加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

负载均衡层设计方案之负载均衡技术总结篇

发布时间:2019-09-27 22:05:56 所属栏目:建站 来源:Java高级互联网架构
导读:1、概述 通过前面文章的介绍,并不能覆盖负载均衡层的所有技术,但是可以作为一个引子,告诉各位读者一个学习和使用负载均衡技术的思路。虽然后面我们将转向业务层和业务通信层的介绍,但是对负载均衡层的介绍也不会停止。在后续的时间我们将穿插进行负载
副标题[/!--empirenews.page--]

负载均衡层设计方案之负载均衡技术总结篇

 1、概述

通过前面文章的介绍,并不能覆盖负载均衡层的所有技术,但是可以作为一个引子,告诉各位读者一个学习和使用负载均衡技术的思路。虽然后面我们将转向“业务层”和“业务通信”层的介绍,但是对负载均衡层的介绍也不会停止。在后续的时间我们将穿插进行负载均衡层的新文章的发布,包括Nginx技术的再介绍、HaProxy、LVS新的使用场景等等。

这篇文章我们对前面的知识点进行总结,并有意进行一些扩展,以便于各位读者找到新的学习思路。

2、负载均衡层的核心思想

2-1、一致性哈希与Key的选取

架构设计:负载均衡层设计方案之负载均衡技术总结篇

我们详细介绍了一致性哈希算法。并且强调了一致性Hash算法是现代系统架构中的最关键算法之一,在分布式计算系统、分布式存储系统、数据分析等众多领域中广泛应用。针对我的博文,在负载均衡层、业务通信层、数据存储层都会有它的身影。

一致性算法的核心是:

  1. 使用对象的某一个属性(这个属性可以是服务器的IP地址、开放端口 还可以是用户名、某种加密串。凡是你可以想到的有散列意义的属性),算出一个整数,让其分布在0 至 2的32次方 范围内。
  2. 一台服务器的某个或者某一些属性当然也可以进行hash计算,并且根据计算分布在这个圆环上的某一个点,也就是图中圆环上的蓝色点。
  3. 一个处理请求到来时,根据这个请求的某一个或者某一些属性进行hash计算,并且根据计算记过分布在这个圆环上的某一个点上。也就是上图圆环上的黄色点。
  4. 我们约定落在某一个蓝点A左侧和蓝点B右侧的黄色点所代表的请求,都有蓝点A所代表的服务器进行处理,这样就完成解决了“谁来处理”的问题。在蓝色点稳定存在的前提下,来自于同一个Hash约定的请求所落在的位置都是一样的,这就保证了服务处理映射的稳定性。
  5. 当某一个蓝色点由于某种原因下线,其所影响到的黄色点也是有限的。即下一次客户端的请求将由其他的蓝色点所代表的服务器进行处理。

2-2、轮询与权

架构设计:负载均衡层设计方案之负载均衡技术总结篇

不加权轮询,就是主控节点(任务来源点)在不考虑目标节点的任何因素的情况下(例如CPU性能、磁盘性能、网络性能),按照目标节点的列表顺序将任务依次分配下去。这是最简单的轮询,也是对主控节点实现复杂性要求最低的轮询。我之前的博文《架构设计:负载均衡层设计方案(2)——Nginx安装》、《架构设计:负载均衡层设计方案(4)——LVS原理》 都对这种最简轮询进行了介绍:例如LVS中的“rr”参数。

加权轮询中的“权”,您可以看成是“轮询”依据的意思。“权”可以是很多种可能,可以是目标机器的性能量化值、可以是一个固定的数字(按照固定数字加权)、可以是目标节点的网络速度。例如LVS中的“lc”参数,就是指按照目标机器,现在已有的“连接”数量进行加权:连接数量越少,越有更大的几率获得这个任务的处理权。

2-3、租约与健康检查

架构设计:负载均衡层设计方案之负载均衡技术总结篇

租约协议主要为了保证一个事实:如果服务器对客户端的检查操作在“最迟时间”失败后,那么服务器端肯定会注销客户端的登录信息,同时客户端上服务器的连接信息也会消失(并且不在向下提供服务)。每一次检查成功,这个“最迟时间”都会向后推移。

租约协议和我们提到的哈希算法一下一样,也是系统架构设计中最基本的设计思想,并且大量运用在各类型的系统中,它的工作原理是每一位架构师都需要掌握的。例如:zookeeper使用这个协议保证Flow节点和Leader节点的链路是正常的;分布式存储系统用这个协议保证datanode和namenode的连接是正常的;

3、负载均衡层技术汇总

在前面的博文中,我重点介绍了Nginx、LVS、Keepalived技术。由于时间有限,这里我们对博文中提到的几种技术进行一个总结,然后再扩展介绍一下DNS技术、CDN技术和硬件负载技术。

3-1、Nginx技术

在负载均衡层这个大的章节中,我有三篇文章都在直接介绍Nginx的原理和使用。但是之后有朋友给我反映还想了解更多的Nginx知识,特别点名要求我再做一篇文章介绍Nginx的动态缓存。是的,我在后面的时间里是有计划介绍Nginx的动态缓存技术,还会介绍Nginx和多款主流的反向代理软件的性能对比。但这需要时间,特别是我不想去网上找一些已有的性能对比图,还是自己一边做这样的性能测试,一边做性能报告比较靠谱。

下面这些技术是我在博文中已经重点介绍过得,我们再做一下总结:

  • Nginx中的连接数限制问题

重要的配置项包括:worker_processes、worker_connections。但是光是配置这些属性是不够的,最关键的是我们要打开操作系统级别的“最大文件数”限制问题。使用“ulimit -n 65535”设置本次会话的“最大文件数”限制;还要使用“vim /etc/security/limits.conf”命令,修改内核的配置信息。主要是以下两项:

  1. soft nofile 65535 
  2. hard nofile 65535 

另外,还要注意和nginx配置项中的“worker_rlimit_nofile”属性共同使用:

  1. user root root;  
  2. worker_processes 4;  
  3. worker_rlimit_nofile 65535;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid; events {  
  4.  use epoll;  
  5.  worker_connections 65535;  
  • Nginx中的Gzip技术

gzip是Nginx进行HTTP Body数据压缩的技术。下面这段Nginx配置信息是启用gzip压缩的实例:

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读