【发布时间】:2018-08-10 16:15:41
【问题描述】:
我有一个非常琐碎的 - 我猜 - 情况,以及几个实现选择。我有一个 Rails 应用程序(称为 Core),可根据用户请求从互联网上抓取数据。爬虫没有任何业务逻辑——至少现在是这样——但是获取和持久化数据是一项需要时间的工作,我不希望它被阻塞。
我考虑过不同的架构,但是我不确定当事情扩大时哪一个会发挥最佳效果。选项:
- Sidekiq:每次用户请求抓取数据时,Sidekiq 中都会生成一个后台作业并抓取数据,将它们持久化并完成作业。这里可能的缺点是我不会为 Sidekiq Pro 版本付费,我不确定 OSS 版本是否适合我的需求。
- RabbitMQ:在Rails中开发一个微服务,我们称之为Fetcher,它将从RabbitMQ消费并获取和持久化数据。我不明白在这种情况下我是否也需要后台处理,所以再说一次 Sidekiq(或 Sneakers)。如果我这样做了,使用消息代理(在这种情况下)而不是让 Sidekiq 在同一个应用程序中进行后台处理有什么好处?
【问题讨论】:
-
您不需要开发单独的微服务。除了您的 rails 服务器之外,您还可以将您的 rails 应用程序作为“工作人员”启动。 Sidekiq 和 Sneakers 都提供了一种方法来创建在这些“工作”进程中执行的工作/工作类。
-
Sneakers 和 Sidekiq 之间的区别在于它们存储要处理的消息的后端。 Sidekiq 使用 redis,Sneakers 使用 RabbitMQ。 Sidekiq 更精致,更易于使用 imo。您还可以将 Redis 重用于会话存储等。RabbitMQ 虽然可以让您排队更多作业并更快地处理它们,因为它可以将作业消息存储在磁盘上并且它是并发的。它也更难设置
标签: ruby-on-rails ruby rabbitmq microservices sidekiq