学习笔记----网络负载均衡技术

来源:互联网 发布:房地产估价软件 编辑:程序博客网 时间:2024/05/09 07:16

1:  学习负载均衡原理的背景:

 去年低, 在新版软件以及服务器系统刚上线时, 客户端会经常出现断开连接的情况, 引来客户的极多抱怨. 其主要原因是, 服务器在重启, 客户端与服务器之间的连接断开, 客户端在几次重连失败之后认为服务器down机, 弹出连接断开标记. 这种处理的方式极其不友好, 用户体验极差. 后来在技术总监的安排下, 在客户端与后台服务器之间添加了一个Agent的程序, 用Agent来实现负载均衡, 其原理是: Agent保持着一个与后台服务器之间的连接, 定时请求后台服务器的负载情况, 并记录后台服务器的负载. 户端向Agent请求服务器地址, 然后Agent根据后台服务器的负载情况, 选择负载最小的地址给客户端, 客户端再与真正的后台服务器之间建立连接.  通过这个修改, 客户体验已上了一个档次, 即使我在后台重启服务器, 客户端也感觉不出来. 当时用该方法实现之后, 也较为满意. 只知道这个东东叫做"负载均衡".

    今年3月份时, 公司与新浪合作, 在新浪财经网页发布我们的flash客户端. 当时最感兴趣的一个点就是如何做负载均衡才能更好的对客户服务. 咨询了负责该项目的人之后, 了解到前端有F5做硬件的负载均衡, 后面再使用nginx反向代理.

    4月23号, 参加了QConn会议, 听取了一些国内外大型网站的框架之后, 才决定好好补充一下负载均衡方面的基础知识.

 

   

2: 引入负载均衡的背景

 随着应用以及需求的不断发展, 我们有两个方向可以去处理极速增加的数据量:

1): 增加单机可以处理数据的能力

2): 通过增加处理机器的数量来提高处理的能力

在我们尝试的过程中会发现第一条路是有局限性的, 单机的处理能力始终是有限的, 这时我们就采用了第二种方式. 在采用多台机器的时候, 我们又怎样来分配任务呢? 由此, "负载均衡"的概念就产生了.

 

3: 负载均衡的定义

负载均衡(LoadBalance)建立在现有网络结构之上,它提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡有两方面的含义:首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。
4: 实现
1): 全局负载均衡
全局负载均衡是指在不同地理位置、有不同网络结构的服务器群间做负载均衡. 主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。
BGP(Border Gateway Protocol)是用于自治系统(Autonomous Systems)之间交换路由信息的协议,BGP可以设置路由策略,如政策、安全和经济上的考虑。

我们可以利用BGP协议在Internet的BGP路由器插入到Virtual IP Address的路由信息。在不同区域的集群向它附近的BGP路由器广播到Virtual IP Address的路由信息,这样就存在多条到Virtual IP Address的路径,Internet的BGP路由器会根据评价函数选出最近的一条路径。这样,我们可以使得用户访问离他们最近的LVS集群。当一个LVS集群系统失效时,它的路由信息自然不会在Internet的BGP路由器中交换,BGP路由器会选择其他到Virtual IP Address的路径。这样,可以做到抗灾害性(Disaster Tolerance)。

2): 本地负载均衡
i): 基于内容的负载均衡
所谓的"基于内容", 是指按照连接的请求内容不同, 会重定向到不同的后台服务器.
之前一直在疑惑的是, 在做负载均衡时, 是否是以以下方式进行的: 客户端与负载均衡器之间建立一个连接, 负载均衡服务器再与后台的服务器再建立连接. 答案是有这种实现的方式, 其专业名称是:"反向代理", 特别是在做基于内容的负载均衡时. 若不采用TCP迁移技术, 基于内容的负载均衡就必须是这样的两个连接的方式. 但是还有其他方式的负载均衡实现方式, 如LVS中的, 仅实现了请求的重定向, 并未建立客户端与负载均衡器以及均衡器与后台服务器间的连接. 
ii): 基于连接的负载均衡
"反向代理"是实现基于连接的负载均衡的方法之一, 但是还有一种更加高明的方法, 那就是连接的重定向, 实际的连接只有一个, 但是负载均衡器在中间层次调度客户端与后台服务器之间的连接.
在 http://zh.linuxvirtualserver.org/node/25 中详细讲述了这种方式的实现过程. 
3): 负载均衡软件
i): LVS
ii): Haproxy
iii): nginx
iv):squid
5: 启发
我们实现的Agent的功能其实在LVS中已经实现了, 而且还是在内核层实现的, 这样我们可以考虑采用LVS系统来替换掉我们的Agent. 这样在以后用户量激增的情况下, 负载均衡这一块也不会是我们的瓶颈之所在. 
参考:
1: http://baike.baidu.com/view/1234431.htm?fr=ala0_1
2: http://zh.linuxvirtualserver.org
原创粉丝点击