Docker 微服务及;具有随机端口的服务发现

Docker 微服务及;具有随机端口的服务发现,docker,microservices,service-discovery,consul,Docker,Microservices,Service Discovery,Consul,我的问题与微服务有关&在多个主机之间传播的服务的服务发现 设置如下所示: 2台docker主机(主机A和主机B) 领事服务器(服务发现) 假设我有两项服务: 服务A 服务B 服务B部署10次(使用随机端口):在主机A上部署5次,在主机B上部署5次 例如,当服务A与服务B通信时,它向serviceB.example.com发送请求(硬编码) 为了获得一个IP和一个端口,服务a应该查询领事服务器的SRV记录 它将得到10个ip:port对,客户机应该为其应用一些负载平衡逻辑 有没有一种更简

我的问题与微服务有关&在多个主机之间传播的服务的服务发现

设置如下所示:

  • 2台docker主机(主机A和主机B)
  • 领事服务器(服务发现)
假设我有两项服务:

  • 服务A
  • 服务B
服务B部署10次(使用随机端口):在主机A上部署5次,在主机B上部署5次

例如,当服务A与服务B通信时,它向serviceB.example.com发送请求(硬编码)

为了获得一个IP和一个端口,服务a应该查询领事服务器的SRV记录

它将得到10个ip:port对,客户机应该为其应用一些负载平衡逻辑

  • 有没有一种更简单的方法来处理这个问题,而不必为此开发客户机解析器(+LB)库
  • 是否已经在某处实现了类似的功能
  • 我做错了吗

    • 我建议您退房。它将立即解决这类问题。每个服务都有一个内部DNS,您可以在服务之间的通信中使用它。Kontena还内置了易于使用的功能,使得创建和扩展微服务变得非常容易

      还有许多内置功能将有助于开发集装箱化应用程序,如私有映像注册、运行服务的VPN访问、机密管理、有状态服务等


      Kontena是一个开源项目,代码在

      上可见。如果您希望进行最低限度的设置,可以通过Netflix基于客户端的负载平衡器包装从Consor收到的值

      你会发现它是一个


      我没有找到最新的独立示例,只有这个链接在Dropwizard上下文中使用它。但这可能是您的起点。

      有几个选项:

      • 正如您所建议的,客户端上的负载平衡需要找到一个现成的服务发现库,该库使用SRV记录并处理负载平衡和电路中断。另一个答案是Netflix,我没有用过,只有在JVM上才会感兴趣。请注意,如果您正在构建自己的服务,您可能会发现仅使用Concur的HTTP API来发现服务比使用DNS SRV记录更简单。这样,您也可以“监视”更改,而不是缓存列表并让其过时
      • 如果您不想重新发明特定的控制盘,另一个流行且简单的选择是使用HAProxy实例作为负载平衡器。您可以将其与Concur集成,通过Concur将自动监视新的/失败的服务实例,并更新LB config。然后,HAProxy通过许多选项(http/tcp、不同的平衡算法等)提供健壮的负载平衡和健康检查。一种可能的设置是在每个docker主机上有一个本地HAProxy实例,并静态地将一个固定端口分配给每个逻辑服务(可以将其存储在Consor KV中)例如,对于服务A,您连接到
        localhost:1234
        ;对于服务B,您连接到
        localhost:2345
        。本地实例意味着您不需要支付到loadbalancer实例然后到实际服务实例的额外往返费用,但这对您来说可能不是问题