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
- 有没有一种更简单的方法来处理这个问题,而不必为此开发客户机解析器(+LB)库李>
- 是否已经在某处实现了类似的功能
- 我做错了吗
- 正如您所建议的,客户端上的负载平衡需要找到一个现成的服务发现库,该库使用SRV记录并处理负载平衡和电路中断。另一个答案是Netflix,我没有用过,只有在JVM上才会感兴趣。请注意,如果您正在构建自己的服务,您可能会发现仅使用Concur的HTTP API来发现服务比使用DNS SRV记录更简单。这样,您也可以“监视”更改,而不是缓存列表并让其过时
- 如果您不想重新发明特定的控制盘,另一个流行且简单的选择是使用HAProxy实例作为负载平衡器。您可以将其与Concur集成,通过Concur将自动监视新的/失败的服务实例,并更新LB config。然后,HAProxy通过许多选项(http/tcp、不同的平衡算法等)提供健壮的负载平衡和健康检查。一种可能的设置是在每个docker主机上有一个本地HAProxy实例,并静态地将一个固定端口分配给每个逻辑服务(可以将其存储在Consor KV中)例如,对于服务A,您连接到
;对于服务B,您连接到localhost:1234
。本地实例意味着您不需要支付到loadbalancer实例然后到实际服务实例的额外往返费用,但这对您来说可能不是问题localhost:2345
- 我建议您退房。它将立即解决这类问题。每个服务都有一个内部DNS,您可以在服务之间的通信中使用它。Kontena还内置了易于使用的功能,使得创建和扩展微服务变得非常容易
还有许多内置功能将有助于开发集装箱化应用程序,如私有映像注册、运行服务的VPN访问、机密管理、有状态服务等
Kontena是一个开源项目,代码在上可见。如果您希望进行最低限度的设置,可以通过Netflix基于客户端的负载平衡器包装从Consor收到的值 你会发现它是一个
我没有找到最新的独立示例,只有这个链接在Dropwizard上下文中使用它。但这可能是您的起点。有几个选项: