什么是负载均衡?负载均衡(LoadBalance)是分布式系统架构设计中必须考虑的因素之一。它通常是指将请求/数据均匀分布到多个操作单元。执行上,负载均衡的关键是均匀性。常见的负载均衡方案有哪些?常见的互联网分布式架构如上,分为:每个上游平均访问每个下游,这样可以实现整体均匀分布。VPN层:客户层到反向代理层客户层到反向代理层的负载均衡是通过“DNS轮询”实现的。DNS服务器为一个域名配置了多个解析ip。每次访问DNS-server发起DNS解析请求,都会轮询返回这些ip,保证每个ip的解析概率相同。这些ip都是nginx的外网ip,这样各个nginx的请求分布也是均衡的。第二层:反向代理层到站点层反向代理层到站点层的负载均衡是通过“nginx”实现的。画外音:nginx是反向代理的统称。修改nginx.conf实现多种均衡策略:(1)请求轮询:类似于DNS轮询,请求依次路由到各个web-server;(2)Leastconnectionrouting:哪个web-server的连接数少,路由到哪个web-server;(3)iphash:根据来访用户的iphash值来路由web-server,只要用户的ip分布均匀,理论上请求也是均匀的,iphash均衡化的方法就可以了来自同一用户的请求总是落在同一个网络服务器上。这种策略适用于有状态的服务,比如session;画外音:site层可以存储session,但是强烈不推荐。无状态站点层是分布式架构设计的基本原则之一,session最好存放在数据层。(4)...第三层:站点层到服务层站点层到服务层的负载均衡是通过“服务连接池”实现的。上游连接池会与下游服务建立多个连接,每个请求都会“随机”选择一个连接访问下游服务。除了负载均衡,服务连接池还可以实现故障转移、超时处理、限流限速、ID序列化等诸多功能。第四层:数据层的接入在数据量较大的情况下,由于数据层(db/cache)涉及数据水平切分,数据层的负载均衡比较复杂,分为“数据平衡”,以及“要求的余额”。数据均衡是指水平切分后的每个服务(db/cache)的数据量是均匀的。请求均衡是指水平切分后的每个服务(db/cache)的请求量是统一的。业界常见的几种横向切分方式:1.将每个数据服务按照范围横向切分,存储一定范围的数据:user0service:storeuidrange1-1kwuser1service:storeuidrange1kw-2kw这个方案优点是:规则简单,服务只需要判断uid范围就可以路由到对应的存储服务,数据均衡性更好,更容易扩展,随时可以增加一个uid[2kw,3kw]。数据服务的不足是:请求的负载不一定均衡。一般来说,新注册用户会比老用户更活跃,大范围的服务请求压力会更大。2.将每个数据服务按照idhash级别切分,存储某个key值的hash部分数据:user0服务:存储uid偶数数据user1服务:存储uid奇数数据这种方案的优点是:规则简单,服务只需要对uid进行hash即可路由到对应的存储服务,数据均衡性更好,请求统一性更好缺点是:不易扩展,扩展一个数据服务,hash方式时更改,可能需要进行数据迁移。总结负载均衡(LoadBalance)是分布式系统架构设计中必须考虑的因素之一。通常是指将请求/数据平均分配给多个运行单元执行,关键是统一性:反向代理层的负载均衡是站点层通过“DNS轮询”的负载均衡,服务层是通过“nginx”实现数据层的负载均衡,就是通过“服务连接池”实现数据层的负载均衡。应该考虑两点:“数据平衡”和“请求平衡”。《横向分割》希望大家有所收获。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文
