当前位置: 首页 > news >正文

系统架构——分布式架构负载均衡系统设计实战

摘要

关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡有两方面的含义:

  • 首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
  • 其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。

目前负载均衡技术大多数是用于提高诸如在Web服务器、FTP服务器和其它关键任务服务器上的Internet服务器程序的可用性和可伸缩性。总之,它的目的就通过调度集群,达到最佳化资源使用,最大化吞吐率,最小化响应时间,避免单点过载的问题。

一、负载均衡分类

二、二层负载均衡

三、三层负载均衡

四、四层负载均衡

五、七层负载均衡

六、四层负载均衡和七层负载均衡的区别

七、负载均衡技术的常见具体应用方案

八、常用的负载均衡算法

常用的负载均衡算法分为两类:

  • 一种是静态负载均衡。
  • 一种是动态负载均衡。

8.1 轮询算法

将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。

  • 优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡;
  • 缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。

8.2 随机算法

将请求随机分配到各个节点。由概率统计理论得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配,也就是轮询的结果。

优缺点和轮询相似

8.3 Hash源地址算法

源地址哈希的思想是根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会落到到同一台服务器进行访问。

  • 优点:相同的IP每次落在同一个节点,可以人为干预客户端请求方向,例如灰度发布;
  • 缺点:如果某个节点出现故障,会导致这个节点上的客户端无法使用,无法保证高可用。当某一用户成为热点用户,那么会有巨大的流量涌向这个节点,导致冷热分布不均衡,无法有效利用起集群的性能。所以当热点事件出现时,一般会将源地址哈希法切换成轮询法。

8.4 加权轮询算法

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

加权轮询算法要生成一个服务器序列,该序列中包含n个服务器。n是所有服务器的权重之和。在该序列中,每个服务器的出现的次数,等于其权重值。并且,生成的序列中,服务器的分布应该尽可能的均匀。比如序列{a, a, a, a, a, b, c}中,前五个请求都会分配给服务器a,这就是一种不均匀的分配方法,更好的序列应该是:{a, a, b, a, c, a, a}。

  • 优点:可以将不同机器的性能问题纳入到考量范围,集群性能最优最大化;
  • 缺点:生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。

8.5 加权随机算法

与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。

8.6 键值范围算法

根据键的范围进行负债,比如0到10万的用户请求走第一个节点服务器,10万到20万的用户请求走第二个节点服务器……以此类推。

  • 优点:容易水平扩展,随着用户量增加,可以增加节点而不影响旧数据;
  • 缺点:容易负债不均衡,比如新注册的用户活跃度高,旧用户活跃度低,那么压力就全在新增的服务节点上,旧服务节点性能浪费。而且也容易单点故障,无法满足高可用。

8.7 最小连接数

根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器。俗称闲的人不能闲着,大家一起动起来。

  • 优点:动态,根据节点状况实时变化;
  • 缺点:提高了复杂度,每次连接断开需要进行计数;
  • 实现:将连接数的倒数当权重值。

8.8 快速响应算法

根据请求的响应时间,来动态调整每个节点的权重,将响应速度快的服务节点分配更多的请求,响应速度慢的服务节点分配更少的请求,俗称能者多劳,扶贫救弱。

  • 优点:动态,实时变化,控制的粒度更细,跟灵敏;
  • 缺点:复杂度更高,每次需要计算请求的响应速度;
  • 实现:可以根据响应时间进行打分,计算权重。

8.9 观察者模式算法

观察者模式是综合了最小连接数和最快响应度,同时考量这两个指标数,进行一个权重的分配。 

博文参考

  • 《网络编程懒人入门(一):快速理解网络通信协议(上篇)》
  • 《网络编程懒人入门(二):快速理解网络通信协议(下篇)》
  • 《网络编程懒人入门(三):快速理解TCP协议一篇就够》
  • 《高性能网络编程(七):到底什么是高并发?一文即懂!》
  • 《腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面》
  • 《快速理解高性能HTTP服务端的负载均衡技术原理》
  • 《新手入门:零基础理解大型分布式架构的演进历史、技术原理、最佳实践》
  • 《通俗易懂:基于集群的移动端IM接入层负载均衡方案分享》
  • 《IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理》

一篇读懂分布式架构下的负载均衡技术:分类、原理、算法、常见方案等-其它分享/专项技术区 - 即时通讯开发者社区!

http://www.lryc.cn/news/16669.html

相关文章:

  • 机器学习算法: AdaBoost 详解
  • 6.824lab1总结
  • NIO蔚来 面试——IP地址你了解多少?
  • Gluten 首次开源技术沙龙成功举办,更多新能力值得期待
  • springboot+redis+lua实现限流
  • 线段树总结
  • 龙芯GS232(MIPS 32)架构cache管理笔记
  • js去重
  • 小白都能看懂的C语言入门教程
  • leetcode 21~30 学习经历
  • 让ArcMap变得更加强大,用python执行地理处理以及编写自定义脚本工具箱
  • SAP 项目实施阶段全过程
  • idea中的Maven导包失败问题解决总结
  • REDIS中的缓存穿透,缓存击穿,缓存雪崩原因以及解决方案
  • 数据库及缓存之MySQL(一)
  • 项目管理中,项目经理需要具备哪些能力?
  • itk中的一些图像处理
  • Endless lseek导致的SQL异常
  • JUC-day01
  • Mind+Python+Mediapipe项目——AI健身之跳绳
  • 数据库概述
  • 【已解决】解决IDEA的maven刷新依赖时出现Connot reconnect错误
  • 动态链接库(.so)文件的变编译和引用、执行
  • linux(centos8)文件解压命令
  • 阅读笔记6——通道混洗
  • 上海亚商投顾:沪指失守3300点 卫星导航概念全天强势
  • 疯狂的SOVA:Android银行木马“新标杆”
  • 汽车零部件企业数字工厂管理系统建设方案
  • 【线程同步工具】Semaphore源码解析
  • 获取实时天气