【问题标题】:Run & scale simple python scripts on Google Cloud Platform在 Google Cloud Platform 上运行和扩展简单的 Python 脚本
【发布时间】:2022-01-24 03:53:46
【问题描述】:
我有一个简单的 python 脚本,我想在 GCP 上运行数千个它的实例(同时)。该脚本由 $Universe 调度程序触发,类似于“python main.py --date '2022_01'”。
我必须使用什么架构和技术来实现这一目标。
PS:我不能放弃 $Universe,但我不反对使用其他技术的建议。
我的解决方案:
- 我已经有一个 $Universe 服务器一直在运行。
- 创建 Pub/Sub 主题
- 创建始终侦听 Pub/Sub 的永久 Compute Engine
- $Universe 向 Pub/Sub 发送数千个事件
- 计算引擎触发在另一个计算引擎上创建 Python Docker 映像
- 扩展 Docker 映像的创建(我不知道该怎么做)
这是一个好的架构吗?
如何扩展这种流程?
谢谢你:)
【问题讨论】:
标签:
python
python-3.x
google-cloud-platform
architecture
scalability
【解决方案1】:
讨论架构和设计问题可能非常困难,因为它们通常严重依赖于上下文、范围、功能和非功能要求、成本、可用技能和知识等等......
如果可能,我个人更愿意使用完全无服务器的方法。
例如,使用 Cloud Scheduler(无服务器 cron 作业),它将消息发送到 Pub/Sub 主题,在该主题的另一端有一个 Cloud Function(或其他东西),由消息触发.
它应该是云函数还是其他什么,它应该做什么以及如何做 - 取决于你的情况。
【解决方案2】:
据我了解,编排器 ($Universe) 会同时调用大量自定义 Python 代码触发器,并且希望在 GCP 平台上使用它。
像 @al-dann 一样,我会采用无服务器方法以降低成本。
据我所知,pub sub 似乎不是必需的,您可以轻松地从任何 HTTP 调用中触发该函数,并避免 Pub Sub。
PubSub 只需要有一些保证(至少处理一次),但如果 $Universe 验证每次调用的 http 请求,您可以有相同的行为(查看 http 响应代码和正文,如果不匹配则重试预期结果)。
如果您想只进行一次处理,您将需要更多工具,您已经接近事件流(我也理解这可能是一个很好的用例)。在那种情况下,在一个完整的 GCP 中,我会去 pub / sub & Dataflow 可以保证完全一次,或者 Kafka & Kafka Streams 或 Flink。
如果至少一次处理对您来说没问题,我会选择我认为易于维护的 http 版本。对于这种情况,您将有 3 个无服务器选项:
-
应用引擎标准:缩放到0,为cpu使用付费,如果请求被限制在短期内(每天几个小时,因为同一个硬件会处理很多请求),可以比下面的功能更实惠
-
云功能:您将按请求付费(+ cpu、内存、网络...),除了代码之外无需考虑其他任何事情,但执行的代码受专有解决方案的限制。
-
云运行:我更喜欢它,因为它的价格与云功能相同,但您获得了可移植性,该应用程序是一个简单的 docker 映像,您可以轻松移动(到 kubernetes、计算引擎等)并根据成本更改执行引擎(如果研究和现实世界之间的负载发生变化)。