首页 > 解决方案 > 使用 Kubernetes 和自动缩放创建 NodeJS 数据处理应用程序

问题描述

我有一个数据处理应用程序,我通过手动创建服务器然后在它们上运行 docker 来通过 docker 进行扩展。

这是架构的样子

1 塔斯克 (tasker.example.com)

tasker 应用程序找到需要处理的数据,然后使用上下文访问 api。tasker 还遍历 5-10 个正在运行的现有 WORKER 服务器,并检查它们是否有任何任务正在运行。tasker 确保限制不会达到每台服务器 100 个任务,以保持及时处理。

2 Worker(数据处理应用程序)

每个工作人员使用此库 https://github.com/samrith-s/concurrent-tasks记录正在处理的当前任务

在worker中定义了许多数据类型及其各自的功能。

问题

该策略不可扩展。它稍后会造成巨大的混乱,这就是为什么我正在寻找使用 kubernetes 的解决方案。

我想要达到的目标

Kubernetes 集群可以:

  1. 公开一个 API,我可以在其中发送我的 TASKER 应用程序中的所有任务 - 所有任务都涌入的单个端点
  2. 根据限制及其当前队列在 WORKER 容器之间分配任务
  3. 如果作业无法排队,则启动新的 pod (WORKERS)
  4. 记录哪个作业被发送到哪个工人以及它是成功还是失败。

我一直在阅读 RabbitMQ 和 Celery,所以我熟悉这些概念。

我应该采用这种 kubernetes 策略还是像 Bull 这样的更好的队列系统?

标签: node.jsdockerkubernetes

解决方案


Kubernetes 应该可以很好地解决这个问题。

让 Tasker 应用程序找到要完成的工作并在 RabbitMQ 中生成任务消息。

设置工作应用程序以使用消息并完成工作。使用 Kubernetes Horizo​​ntal Pod Autoscaler根据在 RabbitMQ 中排队的作业数量来扩展 worker 部署。


推荐阅读