上篇给大家介绍的内容是微服务网关:Zuul源码解析,相信大家已经领会并且贯通了;那么本文将给大家介绍的内容是负载均衡:负载均衡机制。
负载均衡
负载均衡(Load Balance)是分布式网络环境中的重要机制,在微服务架构中,通过负载均衡可以实现系统高可用性、集群扩容等。
负载均衡机制也决定着整个系统的性能和稳定性。
负载均衡机制
负载均衡可以说是高可用网络基础架构的关键组件,也是一种集群技术。它通过将网络流量分担到不同的网络服务器实现了业务容量的水平横向扩展,负载均衡不仅可以提升集群中不同服务器实例的负载性能,还可以保证集群整体的稳定性,也可以根据一定的负载策略实现灰度发布、蓝绿部署、A/B测试等。
通过硬件或者软件的方式负载均衡会维护一个服务列表清单,当用户发送请求时,它会将请求发给负载均衡器,后者根据(轮训、随机、加权)算法从可用服务列表中取出一台服务器的地址,进行请求转发,完成负载功能。
负载均衡技术优势
● 高性能:负载均衡技术将业务请求均衡地分配到多台设备或多条链路上,提高了整个系统的性能。
● 可扩展性:负载均衡技术可以方便地增加集群中设备或链路的数量,在不降低业务质量的前提下满足不断增长的业务需求。
● 高可靠性:单个甚至多个设备或链路发生故障不会导致业务中断,提高了整个系统的可靠性。
● 可管理性:大量的管理工作都集中在应用负载均衡技术的设备上,设备群或链路只需要通常的配置和维护即可。
● 透明性:对用户而言,集群等同于可靠性高、性能好的设备或链路,用户感知不到也不必关心具体的网络结构,增加和减少设备或链路均不会影响正常的业务。
负载均衡有很多不同的分类方法,比如硬件负载均衡和软件负载均衡。F5就是比较常见的硬件负载均衡产品。F5以性能稳定著称,很多功能是软件负载均衡不具备的(应用交换、会话交换、状态监控、智能网络地址转换、通用持续性等)。然而缺点也比较明显,除了设备价格昂贵、配置冗余,更重要的是没有软件负载均衡灵活和不能满足定制化的需求。
软件负载均衡中,基于DNS的负载均衡是常用的解决方案。此外,Nginx可以说是Web应用服务领域使用最为广泛的前置软件负载系统,Nginx可以根据系统与应用的状况来分配负载,对于复杂的应用来说,有很好的性价比。LVS(Linux Virtual Server)是一个虚拟服务器集群系统,采用IP地址均衡技术和内容请求分发技术实现负载均衡。
负载均衡的另外一种分类方式是根据负载服务器清单列表存放的位置划分为服务端负载均衡和客户端负载均衡。
服务端负载均衡
类似于Nginx或者F5,它们都可以归类为服务端负载均衡,所有后端服务器地址清单通过注册中心或者集中配置的方式存储在服务器中。负载均衡器也可以通过心跳的方式动态调整服务列表清单的内容,从而使客户端总能访问到一个在线、可用的后端服务。服务端负载均衡如下图所示。
客户端负载
在客户端负载均衡中,客户端自己维护一份服务器地址清单。
Ribbon就是客户端负载均衡工具,Ribbon缓存维护服务列表,如果服务实例注销或宕机,Ribbon能够自行将其剔除。Ribbon利用从EurekaServer中读取的服务信息列表(存储在本地即客户端中),在调用服务实例时合理地进行负载,直接请求到具体的微服务。Ribbon客户端负载均衡如下图所示。
另外,需要说明的是,我们也可以把Ribbon作为服务端负载均衡使用,当我们把Ribbon放入Zuul网关时,对于请求客户端而言,Zuul网关+Ribbon的组合就可以完成服务端的负载均衡。
本文给大家讲解的内容是负载均衡:负载均衡机制
- 下篇文章给大家讲解的内容是四层与七层负载均衡以及负载均衡算法
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!