1

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

  1. 服务 A 和服务 B 在 grpc 上工作,不对外公开。
  2. 这些服务可以在不同的节点上运行(因此我们不能在这些节点之间共享文件系统)。
  3. 配置平均约为 100KB,这样的配置大约有 100K。

可能的想法:

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

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

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

谢谢。

4

1 回答 1

0

You could use configMap for this. From application C create or update a configMap by calling kubernetes API using kubernetes go client library and volumeMount the configMap in service A and service B.The service A and service B can have a mechanism to check if anything has changed in those configMaps and if yes then reload config in the memory. The mechanism in service B and service A could just be calculating a hash of the configMap and keep comparing that periodically with what is there in the Filesystem(via volumeMount of the configMap) and when there is a change reload the configMap in memory.

于 2020-05-26T15:25:42.183 回答