Kubernetes 库伯内特斯:有可能将消息从一个服务广播到另一个服务吗?
我正在构建一个分布式系统,在该系统中,我需要将特定配置刷新到service-a和service-B两个服务的所有POD。此配置由另一个service-C处理。用户可以向service-C发送api请求,该请求需要传播到service-a和service-B的所有PODKubernetes 库伯内特斯:有可能将消息从一个服务广播到另一个服务吗?,kubernetes,kubernetes-networking,Kubernetes,Kubernetes Networking,我正在构建一个分布式系统,在该系统中,我需要将特定配置刷新到service-a和service-B两个服务的所有POD。此配置由另一个service-C处理。用户可以向service-C发送api请求,该请求需要传播到service-a和service-B的所有POD 服务A和服务B在grpc上工作,不接触世界 这些服务可以在不同的节点上运行(因此我们不能在这些节点之间共享文件系统) 配置平均约为100KB,此类配置约为100K 可能的想法: 我可以使用kafka创建一个消息总线,并将这些配置推
谢谢。您可以使用configMap进行此操作。从应用程序C使用kubernetes go客户端库和卷调用kubernetes API创建或更新configMap在服务a和服务B中装载configMap。服务a和服务B可以有一种机制来检查这些configMap中是否有任何更改,如果是,则在内存中重新加载config。服务B和服务A中的机制可能只是计算configMap的哈希值,并定期将其与文件系统中的哈希值进行比较(通过configMap的volumeMount),当发生更改时,将configMap重新加载到内存中。您可以使用configMap进行此操作。从应用程序C使用kubernetes go客户端库和卷调用kubernetes API创建或更新configMap在服务a和服务B中装载configMap。服务a和服务B可以有一种机制来检查这些configMap中是否有任何更改,如果是,则在内存中重新加载config。服务B和服务A中的机制可能只是计算configMap的哈希值,并定期将其与文件系统中的哈希值进行比较(通过configMap的volumeMount)当发生更改时,重新加载内存中的configMap。这是java spring应用程序还是其他应用程序?它是golang应用程序。一个想法是:服务C直接与K8s API对话以更新configMap,服务a和B被配置为使其POD装载该configMap,并在其文件系统上自动更新。服务A和B需要轮询该文件或获得更改通知,然后重新加载配置。这实际上只是在引擎盖下使用etcd,这就是K8s的工作原理。另一个想法:使用领事。让代理作为守护进程集运行,而不是在每个pod中运行,这可能会减少您的延迟问题;尽管执政官应该扩展到大量的代理人。这是java spring应用程序还是其他应用程序?这是golang应用程序。一个想法是:服务C直接与K8s API对话以更新configMap,服务a和B被配置为使其POD装载configMap,这将在其文件系统上自动更新。服务A和B需要轮询该文件或获得更改通知,然后重新加载配置。这实际上只是在引擎盖下使用etcd,这就是K8s的工作原理。另一个想法:使用领事。让代理作为守护进程集运行,而不是在每个pod中运行,这可能会减少您的延迟问题;尽管执政官应该扩展到大量的代理人。感谢配置映射是否能够扩展到100kb配置中的100k?还有没有其他方法可以将数据发送到所有POD?一种广播方式?配置图内部存储在etcd中,可扩展性很强。我无法证明这一点,但你应该尝试一下。配置映射是否能够扩展到100kb配置中的100k?还有没有其他方法可以将数据发送到所有POD?一种广播方式?ConfigMaps内部存储在etcd中,可扩展性很强。我无法证明这一点,但你应该试试看