kubernetes - 设计从外部源获取数据并发送到同一目的地的 k8s 应用程序
问题描述
我有一个从第三方数据源获取数据的应用程序,它会自动将数据发送到我的应用程序,我无法过滤它,我只能接收所有数据。当数据到达时,我的应用程序会将这些数据传输到 RocketMQ 主题。
现在我必须使这个应用程序成为一个容器并将其部署在具有 3 个副本的 k8s 部署中。但是这些 pod 都将获得相同的数据并发送到相同的 RocketMQ 主题。
如何在不向同一个 RocketMQ 主题发送重复消息的情况下使这个应用程序水平扩展?
解决方案
现在我必须使这个应用程序成为一个容器并将其部署在具有 3 个副本的 k8s 部署中。但是这些 pod 都将获得相同的数据并发送到相同的 RocketMQ 主题。
没有要求。我的应用程序连接到服务器,它将通过 TCP 向应用程序发送数据。每个 Pod 都会连接到该服务器。
如果您想对多个实例执行此操作,则它们需要以某种方式进行协调。
领导者选举模式是一种运行多个实例的方法,但只有一个实例可以处于活动状态(例如,当您从同一个队列中读取时)。这是一种协调模式——当时只有一个实例处于活动状态。所以这个模式只使用你的副本以获得更高的可用性。
如果您希望所有副本都积极工作,可以使用分片或分区等技术来完成。这也是例如Kafka(例如,类似于队列)从队列中进行并发工作的方式。
还有其他方法可以解决这个问题,例如实现某种形式的锁来协调——但是像 Kafka 中的分区或分片可能是最“云原生”的解决方案。
推荐阅读
- c# - 如何在视图中显示列表中的每第 n 个项目?
- istio - 发送 Envoy 运行时标志
- php - 将参数从 URL 传递给 api php 中的 php 函数
- excel - 通过 SAP GUI 脚本发布订单块
- typescript - Typescript - 从异步方法中抛出错误的 Promise 捕获错误
- sql - 如何在 SQL UPDATE 语句 WHERE 子句中读取脏值
- javascript - 如何修复/链接/连接 Telegram bot 内联按钮到 Google 表格中的单元格?
- google-cloud-pubsub - Pubsub 推送拉取订阅
- powershell - Powershell 垂直输出
- python - 将 CSV 字段类型设置为字符串,但打开 CSV 时仍为数字?