【问题标题】:How to scale activejob-google_cloud_pubsub worker?如何扩展 activejob-google_cloud_pubsub 工作人员?
【发布时间】:2020-01-25 21:21:46
【问题描述】:

概述

我有一个使用 gem activejob-google_cloud_pubsub 的 Rails ActiveJob。 (Short usage tutorial)。我的应用程序在 ruby​​ flex 环境中部署到 AppEngine。虽然我的应用程序按预期工作,但我很难扩展使用来自 Google Cloud PubSub 的消息的工作人员服务。 gem 的 README 文档提到了一种从终端指定 Worker 的 max_threads 的方法,而不是从 rails 应用程序中指定的方法。当我阅读 gem 的源代码时,我看到工作人员的 initialize 接受了该变量 max_threads (默认为核心数)。问题是我看不到如何使用默认配置初始化worker,所以我可以增加线程数。

问题总结:

1 - 如何用更多线程数初始化activejob-google_cloud_pubsub Worker?

2 - 用比机器中的处理器更多的线程来初始化工作线程是不可取的吗?

其他细节:

  • 我通过使用 app.yaml 之外的 worker.yaml 将 worker 部署在与 Rails 服务器不同的服务上
  • 工作人员服务正在手动扩展为 3 个实例,但每秒仍勉强处理 10 条消息(精简消息处理器,仅记录到输出和返回)

任何关于如何扩展此类队列处理的输入都会有所帮助。

【问题讨论】:

  • 我的答案中的任何链接有用吗?你有同样的性能问题吗?
  • @Juancki,虽然您的回答确实提供了有关使用 Rails 进行扩展和多线程主题的有用资源的链接,但它没有回答有关 activejob-google_cloud_pubsub gem 的主要技术问题。我找到了一个更直接的答案并将提交。感谢您的资源链接:)
  • 您好,感谢您的回复。请考虑将您的回答标记为正确。 stackoverflow.com/help/self-answer

标签: ruby-on-rails google-cloud-pubsub rails-activejob app-engine-flexible


【解决方案1】:

1 - 如何使用更多线程数初始化 activejob-google_cloud_pubsub Worker?

worker.yaml

添加终端标志--max_threads,如gem's README中所述

runtime: ruby
env: flex
service: <xxx>
entrypoint: bundle exec activejob-google_cloud_pubsub-worker --max_threads=5
...

这应该在每个实例中创建 5 个工作线程。默认为逻辑核心数。

【讨论】:

    【解决方案2】:

    嗯,您每秒可以提供的消息数量可以通过以下方式增加:

    对于计算资源的细粒度性能,我建议检查Scaling App.yaml reference 并使用automatic_scaling 将您的计算能力扩展到高峰时段的负载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2015-06-28
      • 2021-06-19
      • 2021-10-13
      相关资源
      最近更新 更多