架构设计

互联网架构中的负载均衡

2018-07-19  本文已影响5人  packet

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

三层架构
四层架构

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

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

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

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

这一步骤的负载均衡是通过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.站点层 -> 服务层

4.服务层->数据层:

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

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

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

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


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

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

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

5.总结:

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

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读