负载均衡
负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,是指将请求/数据均匀分摊到多个操作单元上执行
常见互联网分布式架构如上,分为客户端层、反向代理nginx层、站点层、服务层、数据层。
【客户端层】到【反向代理层】的负载均衡,是通过DNS轮询实现的:DNS-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问DNS-server,会轮询返回这些ip,保证每个ip的解析概率是相同的
【反向代理层】到【站点层】的负载均衡,是通过nignx实现的,修改nginx.conf,可以实现多种负载均衡策略:
1)请求轮询
2)最少连接路由:哪个web-server的连接少,路由到哪个web-server
3)ip哈希:ip哈希均衡方法可以使同一个用户的请求固定落到同一台web-server上
【站点层】到【服务层】的负载均衡,是通过服务连接池实现的。
【数据层】的负载均衡,分为数据的均衡与请求的均衡
常见的水平切分方式有:
(1)按照range水平切分
每一个数据服务,存储一定范围的数据
优点:
(1)规则简单,service只需判断一下uid范围就能路由到对应的存储服务
(2)数据均衡性较好
(3)比较容易扩展
缺点:
(1)请求的负载不一定均衡
(2)按照id哈希水平切分
优点:
(1)规则简单,service只需对uid进行hash能路由到对应的存储服务
(2)数据均衡性较好
(3)请求均匀性较好
缺点:
(1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移