Kubernetes:是否可以将消息从一个服务广播到另一个服务?



我正在构建一个分布式系统,我需要将特定配置刷新到两个服务(服务-A和服务-B(的所有Pod。此配置由另一个服务 C 处理。用户可以向服务 C 发送 api 请求,该请求需要传播到服务 A 和服务 B 的所有 Pod。

  1. 服务 A 和服务 B 在 grpc 上工作,不暴露在世界上。
  2. 这些服务可以在不同的节点上运行(因此我们不能在这些节点之间共享文件系统(。
  3. 配置
  4. 平均约为 100KB,此类配置约为 100K。

可能的想法:

  1. 我可以使用 kafka 创建一个消息总线,并在该总线上推送这些配置,然后由不同的 pod 侦听。这种方法的问题是服务 A 和服务 B 将运行 100 个 pod,因此会有大约 100 个消费者组,而且如果出现新的 pod,它必须从一开始就消耗队列,这将非常耗时。

  2. 使用像 consul 或 etcd 这样的轻量级瞬态键值存储,因此 Service-C 将在 consul 中推送数据,然后服务-A 和服务 B 可以读取这些数据。这种方法的问题在于,如此多的 pod 侦听 consul 可能会导致延迟。

有人可以帮我一些想法,如何在 kubernetes 上原生实现这一目标吗?

谢谢。

你可以为此使用 configMap。从应用程序 C 通过使用 kubernetes go 客户端库调用 kubernetes API 来创建或更新 configMap,并在服务 A 和服务 B 中挂载 configMap.服务 A 和服务 B 可以有一种机制来检查这些 configMap 中是否有任何更改,如果是,则在内存中重新加载配置。服务 B 和服务 A 中的机制可能只是计算 configMap 的哈希值,并定期将其与文件系统中的内容进行比较(通过 configMap 的 volumeMount(,当有更改时,重新加载内存中的 configMap。

相关内容

最新更新