我们有一个关于在多 Pod 上运行 Sidekiq 的问题。
场景 1:
在开发环境中,我们只有一个副本,这意味着只有一个 Pod 在运行。这里没有任何问题。
供参考:
已检查:forum_url/sidekiq/busy(运行 1 个进程)
场景 2:
在预生产和生产环境中,我们有多个副本(运行多个 Pod)。我们遇到了 Sidekiq 并发问题(作业正在运行,但跳过了代码执行)。
供参考:
已检查:forum_url/sidekiq/busy(运行多个进程)。每个 Pod 运行一个 Sidekiq 进程。
请纠正我,
运行多个 Sidekiq 进程是否可以?
如果不行,如何修复作业并发问题?
供参考,我们正在使用 Discourse Docker。
我需要遵循哪些适当的步骤。提前感谢。
“并发”问题具体指的是什么?可以详细说明一下吗?到底是什么顺序被打乱了?
将 Sidekiq 作业添加到队列并不能保证整体的执行顺序,因为有不同的队列具有不同的优先级,所以某些作业可能会领先于其他作业。
还有“跳过代码执行”。可以详细说明一下吗?什么代码?当作业运行时,代码不会被跳过。您是否检查过 /logs 以确保没有出错?
并且请注意,您可能正在运行一个不受支持的安装,这可能是您问题的根源……
4 个赞
您好 @merefield 感谢您的回复
您说的“并发”问题具体是指什么?可以详细说明一下吗?具体是什么东西没有按顺序执行?
正如我上面提到的,在预生产和生产环境中运行着多个 sidekiq 进程。
我不确定!由于多工作进程,作业可能会在争抢时混淆它应该由哪个进程处理。
还有“跳过代码执行”。可以详细说明一下吗?什么代码?当作业运行时,代码不会被跳过。您是否检查过 /logs 以确保没有出错?
我们正在运行一些自定义的 sidekiq 作业,用于将一些自定义统计数据导出到 CSV 文件。该作业是定期运行的。有时文件导出没有发生。作业运行但没有任何错误消息。
例如:
为了测试目的,如果我点击这个触发按钮,作业就会运行,但有时文件导出不会发生。
供您参考,在开发环境中运行的代码相同,但它只有一个 sidekiq 工作进程。在那里运行正常。我怀疑问题是由于在生产/预生产环境中运行了多个 sidekiq 进程。
您是否检查过 /logs 以确保没有出错?
是的,我们没有收到与该作业相关的任何错误。
并且请注意,您可能正在运行不受支持的安装
我们正在运行最新的 discourse 版本。
谢谢
你必须考虑并发性。这是一个多线程批处理系统。
在 Kubernetes 上运行的人也有一些,但这里不支持。
我认为你必须在你的作业中添加一些日志记录,以找出发生了什么。
这是你自己的自定义代码,对吧?
我们已经在自定义代码中添加了日志记录。我们的代码没有问题。
是的
是的,我们正在使用 Kubernetes 集群。
只有一个问题!
sidekiq 应该只运行一个进程吗?还是运行多个 sidekiq 进程也可以?
像任何一个不错的批处理系统一样,它被设计成可以同时运行多个作业,否则它就无法扩展。
确保在设计作业时考虑到这一点。