Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 库伯内特斯:有可能将消息从一个服务广播到另一个服务吗?_Kubernetes_Kubernetes Networking - Fatal编程技术网

Kubernetes 库伯内特斯:有可能将消息从一个服务广播到另一个服务吗?

Kubernetes 库伯内特斯:有可能将消息从一个服务广播到另一个服务吗?,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创建一个消息总线,并将这些配置推

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

  • 服务A和服务B在grpc上工作,不接触世界
  • 这些服务可以在不同的节点上运行(因此我们不能在这些节点之间共享文件系统)
  • 配置平均约为100KB,此类配置约为100K
  • 可能的想法:

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

  • 使用一个轻量级的瞬态键值存储,如concur或etcd,因此Service-C将把数据推送到concur中,然后由Service-a和Service-B读取。这种方法的问题是,如此多的pod侦听concur会导致延迟

  • 有人能帮我想一想如何在库伯内特斯本土实现这一点吗


    谢谢。

    您可以使用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中,可扩展性很强。我无法证明这一点,但你应该试试看