互联网架构中的负载均衡

计算机的资源在分配和使用有两大思维:效率和公平。比如负载均衡技术就体现了公平思维。
负载均衡(Load Balance)是集群和分布式系统中必须考虑的关键因素,它通常是指把数据或请求均匀分摊到操作单元上,它的灵魂就是“均匀”。
负载均衡主要分为硬件负载均衡和软件负载均衡两大类。我在某央企工作时,使用的F5就是硬件负载均衡(记得均衡策略是轮询),本文主要谈软件负载均衡。
说到负载均衡,我第一反应是Nginx,其实互联网架构中到处体现着负载均衡的设计。

互联网架构中的负载均衡_第1张图片
三层架构

互联网架构中的负载均衡_第2张图片
四层架构

上图是常见的互联网架构,它的最大特点就是分层,每层可以水平扩展。在上层访问下层的时候,就会用到用负载均衡技术。

1. 客户端层 -> 反向代理层

互联网架构中的负载均衡_第3张图片

上网的第一步骤,就是解析域名,得到IP,这通过DNS实现。DNS-server对于一个域名,可能配置多个IP,此时的负载均衡是通过DNS轮询实现的,会轮询返回IP,保证每个IP访问是均匀的。这些IP就是Nginx的外网IP。

2. 反向代理层 -> 站点层

互联网架构中的负载均衡_第4张图片

这一步骤的负载均衡是通过Nginx实现的。通过修改nginx.conf可以配置多种负载均衡策略。

常见的Nginx负载均衡策略有以下三种:

  1. 轮询(Round Robin,RR)
  2. 随机(Random)
  3. 权重轮询(Weighted Round Robin,WRR)
  4. 最少连接(Least Connections):那个web-server连接少,就路由到哪个web-server
  5. 源地址哈希(Source hashing):只要IP是均匀的,那么请求理论上也是均衡的。

3.站点层 -> 服务层

互联网架构中的负载均衡_第5张图片

4.服务层->数据层:

请求是否均衡取决于数据分布是否均衡。

在数据量很大的时候,数据层(db和cache)会做水平切分。所以数据层的负载均衡,分为数据的均衡和请求的均衡。

数据的均衡是指,水平切分后的每个服务,数据量是差不多的
请求的均衡是指,水平切分后的每个服务,请求量是差不多的。

数据的均衡提现在水平切分的策略上,最常见的有两种:
A)按照range水平切分

互联网架构中的负载均衡_第6张图片

这种切分的优点:实现简单, 数据均衡, 易于扩展

缺点:请求的负载不够均衡。可能在某个range中服务请求压力比较大。
B)根据id做哈希

互联网架构中的负载均衡_第7张图片

这种切分的优点:实现简单,数据均衡,请求均衡
缺点:不易扩展,增加或减少机器,需要rehash,伴随数据迁移。可以利用一致性哈希来优化这种方案。

5.总结:

客户端层->反向代理层:DNS轮询

反向代理层->站点层:Nginx

站点层->服务层:服务连接池

服务层->数据层:请求是否均衡依据数据分布是否均衡,数据层的数据切分方式,常见的有按照范围水平切分和hash水平切分。

2019-07-16:
互联网架构最本质的特征就是分层。
为什么要分层呢?这是分而治之思想的体现。
从单层结构来看,可以解耦,易于水平扩展。
如果每层之间通信(交换数据),那么怎么选择合适的对象呢?这就需要负载均衡了。

如果提起来架构,首先要会想到什么架构呢?

  1. 计算机本身的结构
  2. 后端的四层架构:反向代理层,站点层,服务层,数据层。

客户端为什么要请求服务端呢?
就是因为服务端有数据(体现为各种资源),而且能操作这些数据。
数据不仅要存储均衡,还要使得数据的访问也要均衡。尤其要将热点数据均匀分布。

Thanks a million:一分钟了解负载均衡的一切

你可能感兴趣的:(互联网架构中的负载均衡)