MyException - 我的异常网
当前位置:我的异常网» 互联网 » 互联网络架构 - 负载均衡

互联网络架构 - 负载均衡

www.MyException.Cn  网友分享于:2013-10-27  浏览:0次
互联网架构 -- 负载均衡

互联网架构 -- 负载均衡

 

 

什么是负载均衡

 

       负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。

 

 

 

 

常见的负载均衡方案

 

       常见互联网分布式架构分为:客户端层、反向代理nginx层、站点层、服务层、数据层。可以看到,每一个下游都有多个上游调用,只需要做到,每一个上游都均匀访问每一个下游,就能实现“将请求/数据【均匀】分摊到多个操作单元上执行”。



 

 

 

 

【客户端层->反向代理层】的负载均衡

 

       通过“DNS轮询”来实现这一层的负载均衡:DNS-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问DNS-server,会轮询返回这些ip,保证每个ip的解析概率是相同的。这些ip就是nginx的外网ip,以做到每台nginx的请求分配也是均衡的。


 

 

 

【反向代理层->站点层】的负载均衡

 

       这一层的负载均衡,是通过“nginx”实现的。通过修改nginx.conf,可以实现多种负载均衡策略:

 

  • 请求轮询:和DNS轮询类似,请求依次路由到各个web-server
  • 最少连接路由:哪个web-server的连接少,路由到哪个web-server
  • ip哈希:按照访问用户的ip哈希值来路由web-server,只要用户的ip分布是均匀的,请求理论上也是均匀的,ip哈希均衡方法可以做到,同一个用户的请求固定落到同一台web-server上,此策略适合有状态服务,例如session(可以这么做,但强烈不建议这么做,站点层无状态是分布式架构设计的基本原则之一,session最好放到数据层存储)。


 

 

 

【客户端层->站点层】的负载均衡

 

       其实从客户端层到站点层,可以不用nginx和DNS轮询,用云平台(AWS、阿里云、腾讯云)做负载均衡,也同样能解决问题。而且维护起来更加简单方便,还能有流量报告,减少和增加服务也更加方便。然后再用nginx做反向代理层,通过Nginx 服务器,才能访问到真正的web服务器。


 

 

 

 

 

【站点层->服务层】的负载均衡

 

       服务层的负载均衡是通过“服务连接池”实现的。上游连接池会建立与下游服务多个连接,每次请求会“随机”选取连接来访问下游服务。


 

 

 

【数据层】的负载均衡

 

       在数据量很大的情况下,由于数据层(db,cache)涉及数据的水平切分,所以数据层的负载均衡更为复杂一些,它分为“数据的均衡”,与“请求的均衡”。

 

  • 数据的均衡:水平切分后的每个服务(db,cache),数据量是差不多的。解决方法:按照范围水平拆分
  • 请求的均衡:水平切分后的每个服务(db,cache),请求量是差不多的。解决方法:按照哈希水平拆分

 

按照范围水平拆分


    每一个数据服务,存储一定范围的数据,上图为例:

 

  • user0库,存储uid范围1-1kw
  • user1库,存储uid范围1kw-2kw

 

   优点

 

  1. 规则简单,service只需判断一下uid范围就能路由到对应的存储服务;
  2. 数据均衡性较好;
  3. 比较容易扩展,可以随时加一个uid[2kw,3kw]的数据服务;

 

   缺点

 

  1. 请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大;

 

按照哈希水平拆分


    每一个数据库,存储某个key值hash后的部分数据,上图为例:

  • user0库,存储偶数uid数据
  • user1库,存储奇数uid数据

 

   优点

 

  1. 规则简单,service只需对uid进行hash能路由到对应的存储服务;
  2. 数据均衡性较好;
  3. 请求均匀性较好;

 

   缺点

 

  1. 不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移;

 

 

 

 

总结

 

       负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。

 

  1. 【客户端层】到【反向代理层】的负载均衡,是通过“DNS轮询”实现的
  2. 【反向代理层】到【站点层】的负载均衡,是通过“nginx”实现的
  3. 【站点层】到【服务层】的负载均衡,是通过“服务连接池”实现的
  4. 【数据层】的负载均衡,要考虑“数据的均衡”与“请求的均衡”两个点,常见的方式有“按照范围水平切分”与“hash水平切分”

 

 

文章评论

“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员都该阅读的书
程序员都该阅读的书
代码女神横空出世
代码女神横空出世
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
老程序员的下场
老程序员的下场
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
一个程序员的时间管理
一个程序员的时间管理
旅行,写作,编程
旅行,写作,编程
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我的丈夫是个程序员
我的丈夫是个程序员
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
如何成为一名黑客
如何成为一名黑客
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Java程序员必看电影
Java程序员必看电影
我是如何打败拖延症的
我是如何打败拖延症的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
中美印日四国程序员比较
中美印日四国程序员比较
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员和编码员之间的区别
程序员和编码员之间的区别
为什么程序员都是夜猫子
为什么程序员都是夜猫子
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
每天工作4小时的程序员
每天工作4小时的程序员
那些争议最大的编程观点
那些争议最大的编程观点
 程序员的样子
程序员的样子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
漫画:程序员的工作
漫画:程序员的工作
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员必看的十大电影
程序员必看的十大电影
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员应该关注的一些事儿
程序员应该关注的一些事儿
编程语言是女人
编程语言是女人
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的鄙视链
程序员的鄙视链
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有