分布式系统负载均衡

2019-12-06  本文已影响0人  仰望forward

常见的互联网分布式系统架构分几层,一般如下:

第一层:客户端层->反向代理层的负载均衡

DNS轮询:DNS可以通过A(Address,返回域名指向的IP地址)设置多个IP地址。比如这里访问bysocket.com的DNS配置了ip1和ip2。为了反向代理层的高可用,至少会有两条A记录。这样冗余的两个IP对应的Nginx服务实例,防止单点故障。
每次请求bysocket.com域名的时候,通过DNS轮询,返回对应的IP地址,每个IP对应的反向代理层的服务实例,也就是nginx的外网IP。这样可以做到每一个反向代理层实例得到的请求分配是均衡的。

第二层:反向代理层->Web层的负载均衡

通过反向代理层的负载均衡模块处理。比如nginx有多种负载均衡方法:

  1. 请求轮询。请求按时间顺序,逐一分配到web层服务,然后周而复始。如果web服务层服务down掉,自动剔除
  2. ip哈希。按照ip的哈希值,确定路由到对应的web层。只要是用户的ip是均匀的,那么请求到web层也是均匀的。
  3. weight权重
第三层:web层->业务服务层

dubbo负载均衡;feign负载均衡

第四层:业务服务层->数据存储层的负载均衡

数据库存储层的负载均衡,一般通过DBProxy实现。比如MySQL分库分表。
当单库或者单表访问太大,数据量太大的情况下,需要进行垂直拆分和水平拆分两个维度。比如水平切分规则:

  1. Range、时间
  2. hash取模,订单根据店铺ID等

但伴随着这块的负载会出现下面的问题,需要解决:

  1. 分布式事务
  2. 跨库join等
上一篇下一篇

猜你喜欢

热点阅读