其他分享
首页 > 其他分享> > ​基于Docker的负载均衡和服务发现

​基于Docker的负载均衡和服务发现

作者:互联网

 谭林华 分布式实验室 

图片

Docker已经成为时下热门的容器技术,各大公司,中小创业者,都选择采用Docker技术架构其下一代的系统和应用。 随着系统规模扩大,单一Docker容器不能应对压力,需要横向扩展到多个容器,我们需要考虑负载均衡的问题;单一职责的Docker容器之间需要相互通信,而容器在每一次重启之后,它的IP都可能发生变化,那么服务和服务之间如何发现对方? 这一次我们一起来交流基于Docker的负载均衡和服务发现。内容的主题涉及到容器集群入口流量的负载均衡方案,4层和7层协议负载的区别处理,容器集群内服务之间的互相发现等。

图片应用的容器化和微服务化带来的问题

图片解决方案(根据客户端是否有感知进行分类)

对比客户端的发现,服务端发现对客户端无感知,由于很多已有的应用或者系统并不是按照类似Dubbo这种服务化的框架实现的,这些应用或者系统的客户端对服务发现都是无感知的,因此服务端的发现就表现出了独特的优势。客户端的服务发现方法中,DNS是一个例外,几乎所有的客户端都支持DNS。下面介绍客户端DNS和服务端的负载均衡器做服务发现的几个方案。

图片服务发现方案

DNS解析到多个IP

内核空间 LVS/IPVS

用户空间Nginx

用户空间 HAProxy

图片aliyun容器服务的负载均衡解决方案

经过前面优缺点的分析和结合aliyun自身产品的优势,提供了以下解决方案:


图片根据场景提供给用户的服务形态

简单路由服务:基于HAProxy,我们加了一层Wrapper,做到动态发现处于运行状态的容器,加入到负载均衡中,我们称之为简单路由服务(routing service),其公网IP通过一个SLB对外进行暴露。主要解决如下需求:

自定义路由服务:作为一个可选的容器,实现跟简单路由服务类似,解决如下需求:

SLB路由服务:将SLB绑定到某个服务上面,后端随服务的启停动态配置。主要解决如下需求:

图片场景和对应的路由服务总结


图片
图片

如上述图表所示,我们将容器集群外进入容器集群内的入口通信称为南北通信,将集群内容器和容器之间的流量成为东西通信。我们根据不同的通信形式和协议层提供不同的服务来满足用户的需求,例如对应南北通信,如果是使用7层协议的服务,我们推荐用户使用集群的SLB进行流量转发,最终的流量会转发到每个主机的HAProxy容器上面,然后在分发到相应的处理请求的服务上。


标签:HAProxy,容器,负载,服务,SLB,均衡,Docker,路由
来源: https://blog.51cto.com/u_15127630/2801704