Author : 岑文初
Email: wenchu.cenwc@alibaba-inc.com
Blog: http://blog.csdn.net/cenwenchu79
Date: 2009-5-26
目录
需求转而学习... 2
“软”负载均衡... 2
LVS (Linux Virtual Server)... 3
Virtual Server三种模式介绍... 3
Virtual Server三种模式的比较... 5
Virtual Server三种模式实践... 6
三种模式下的简单压力测试... 9
HA-Proxy. 10
HA-Proxy安装和使用... 10
HA-Proxy的压力测试结果... 15
“软”负载学习心得... 15
很多时候不少做开发的同学都认为技术更新的快,新技术、新概念层出不穷,大家乐此不疲的去跟随着所谓的“技术趋势”走在风头浪尖上,但其实往往忘记了一个最重要的问题“满足客户需求”。其实技术就是为满足需求服务的,用最小的代价来满足用户的需求,以最简单高效的方式来达到目标,就是每个开发者应该追求的。(不要因为自己的架构很简单就脸红拿不出手,只要你在满足用户当前需求的基础上对未来有所考虑,那么化繁为简就是一种能力的表现)
SIP(服务集成平台)5.7版本中对于未来多个服务提供商,多种类型的服务,在每日几亿的调用压力下,需要找到一个解决方案:可以分流不同服务提供商的服务,分流不同类型的服务,服务隔离化来减少服务相互之间影响以及服务提供商之间的影响。
当前SIP的前端是通过硬件F5作负载均衡,因此是无状态无差别的服务负载,这也使得无法区分不同的服务提供商的服务请求和不同类型的服务请求,导致服务提供商之间的服务会产生相互影响(旺旺即时通信类API在峰值占用了大部分的服务处理资源,淘宝宝贝上传类API占用了大量的带宽)。近期还有更大的两类API将会接入,因此寻找一个服务可分流的方案势在必行。(当然过去也考虑通过三级域名配置在负载均衡上来解决这些问题,但是这样首先对于开发者来说不透明,其次也是一种比较僵化的设计方案,扩展和维护也有一定的难度)
在过去也尝试过Apache等Web容器自己的一些load balance特性,当然效果不是很好,和硬件基本无法比拟,而一些专有的“软”负载均衡方案和开源项目也没有深入的去了解,因此借着这次机会,好好深入的挖一挖“软”负载均衡。
作为互联网应用,随时都需要做好用户量突然增大,访问量突然上升的准备。今年热门的词汇“云”我就不多说了,这里就简单说说服务器的横向扩展。其实和DB,文件系统等一样,当资源成为瓶颈的时候,就需要考虑如何通过扩展或者提升资源能力来满足用户的需求,这就是我们常说的横向扩展和纵向扩展。(对于横向扩展和纵向扩展的优劣大家应该都很清楚了,这里也不做赘述)横向扩展中就会要求使用负载均衡的能力,如何根据资源能力不同以及资源在运行期负荷动态变化将负载合理分配是判断负载均衡优劣的标准。
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HA Proxy就是基于第三应用实现的软负载。(后面会详细介绍这两种方式的使用)
最早期也是最原始的软负载均衡:“Round Robin DNS”,通过轮询方式在DNS绑定多个IP的情况下,将用户对于同一个域名的请求分配到后端不同的服务节点。这种方案的优点:配置简单,负载分配效率高。缺点:无法知晓后端服务节点服务情况(是否已经停止服务),无法保证在一个Session中多次请求由一个服务节点服务,每一个节点都要求有一个外网IP。
另一种较为常见的就是基于分发器的Load balance。服务使用者通过向分发器发起请求获得服务,分发器将请求分发给后端实际服务处理的节点,给客户提供服务,最常说的反向代理模式就是典型的分发器Load Balance。这类负载均衡处理可以基于应用级转发,也可以基于IP级别转发,当然基于应用转发效率和损耗比较大,同时分发器本身也会成为瓶颈。
LVS (Linux Virtual Server)
LVS是在Linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡。LVS主要是处理OSI模型中的4层消息包,根据一定的规则将请求直接转发到后端的服务处理节点,有较高转发效率。
Virtual Server是Load Balancer和一组服务器的逻辑组合统称,使用服务者只需要与Virtual Server进行交互就可以获得高效的服务。真实服务器和Load Balancer通过高速LAN进行交互。Load Balancer能够将请求分发到不同的服务端,在一个虚拟IP下并行处理多个请求。
Virtual Server有三种基于IP级别的负载均衡实现方式:IP address translation(NAT)、Direct routing、IP Tunneling。
NAT(Network address translation):由于IPV4的某些缺陷和安全原因,某些网段例如(10.0.0.0/255.0.0.0, 172.16.0.0/255.240.0.0 and 192.168.0.0/255.255.0.0)不能被用于互联网,因此常常被用作内部局域网,通过网络地址翻译的方式可以让这些网段的服务器访问互联网或者被互联网访问。网络地址翻译主要作用就是将一组ip地址映射到其他的一组ip地址,当映射比例为1:1的时候通常称作静态映射,而当映射地址为M:N(M>N)的时候(M为被映射地址数量,通常是内部ip),则成为动态映射。而对于Virtual Server的NAT模式来说,就是利用了NAT的特性,将内部的一组服务器通过映射到一个虚拟的IP,然后以一个外网虚拟服务节点的身份对外提供服务。
上图是一个实际的NAT范例,对外的服务IP为202.103.106.5,内部建立了虚拟IP为172.16.0.1,然后将内部其他两台实际服务的服务器172.16.0.2,172.16.0.3映射到172.16.0.1这个虚拟IP。客户端向202.103.106.5发起请求服务,Load Balancer查看请求数据包,如果是请求目标地址是注册的虚拟IP及监听端口的时候,那么通过NAT按照一定算法选择某一台实体服务器,再重写报文目标地址,转发请求到实际的目标服务器,当目标服务器处理完毕以后,将处理结果返回给Load Balancer,由Load Balancer修改源地址,返回给客户端。
IP Tunneling:IP管道技术是在IP报文上再次封装IP报文协议的一种技术。允许将一个目标为A的IP数据报文封装成为目标为B的IP数据报文,在特定的IP 管道中传输。
上图就是IP Tunneling模式的运作原理。首先客户端还是通过访问对外的一个服务IP请求服务,当Load Balancer接受到请求以后,检查VIP注册信息,然后根据算法选择实际的一台后台服务器,通过IP管道封装技术对IP报文再次封装,然后将消息通过IP管道转发到实际的服务器,实际的服务器通过解包处理请求,然后根据包体内实际的服务请求地址,将处理结果直接返回给客户端。
Direct routing:利用Load Balancer和实际服务器共享同一VIP,简单的通过修改消息报体目标MAC地址,转发请求,然后再通过实际服务器配置VIP为本地回环,直接处理消息报文,而不再转发,当处理完以后,直接将处理结果返回给客户端。
上图就是Direct Routing的运作流程,当外部请求到Load Balancer时,通过查找VIP注册信息,直接选择一台后端服务器作为新的目标地址,修改消息报文中的目标地址Mac地址,转发到目标服务器,目标服务器由于配置VIP在本地网卡回路中,因此直接处理消息,将处理完的结果直接返回给客户端。
下表是官方整理出的关于Virtual Server三种不同模式的区别:
|
NAT
|
TUNNEL
|
DR
|
服务器要求
|
无要求
|
需要支持IP管道
|
无 arp组件(当前也有补丁)
|
网络要求
|
Private
|
LAN/WAN
|
LAN
|
可支持后端服务器节点数
|
较少(10-20)
|
较多
|
较多
|
服务网关
|
Load Balancer
|
本身
|
本身
|
NAT:根据其实现原理,可以知道这种模式对于操作系统,网络都没有太多的要求和约束,但是由于消息需要打解包,同时消息的响应都必须经过Load Balancer,因此Load Balancer自身成为了瓶颈,这样一个Load Balancer能够支持的后端服务节点数量就有限了。当然可以采用混合模式来解决这个问题,也就是通过TUNNEL或者DR模式作为前端模式串联起多个NAT模式Balancer。
TUNNEL:这种模式要求操作系统支持IP Tunnel,通过对IP报文再次封装转发,达到负载均衡的目的。设计这种模式的初衷是考虑,对于互联网很多服务来说,服务请求数据量和返回数据量是不对称的,返回的数据往往要远远大于请求的数据量,因此如果请求和返回都走Load Balancer会大量占用带宽,影响处理能力。IP Tunnel设计中请求是通过Load Balancer,但是返回是直接返回到客户端的,因此节省了返回的带宽,提高了请求处理的能力。
DR:这种模式要求Load Balancer和后端服务器处于同一个局域网段。DR模式处理消耗最小,消息转发和回复基本没有损耗,因此效率应该是最高的,但是约束是相对来说最多的。
分享到:
相关推荐
### Java点滴学习资料 #### 一、Java简介与特点 Java是一种高级编程语言,由Sun Microsystems公司于1995年推出。Java的核心优势之一在于其跨平台特性,即所谓的“一次编写,到处运行”,这使得Java代码能够在不同...
在自动点滴管理系统中,如果服务部署在多台服务器上,可以通过WCF的负载均衡策略来分散请求,提高系统响应速度和整体性能。 总之,自动点滴管理系统利用.NET 3.5框架和WCF技术,构建了一个高效、安全的分布式系统,...
本系统通过光电传感器检测液面高度和液体点滴速度,使用步进电机控制液体点滴速度,并实现了多机通信,即一个主机站控制多个从机站和主、从机之间的数据传输。 系统组成框图: 1. 测量模块:使用光电传感器检测...
在VC++的学习过程中,了解和掌握这些点滴知识是非常重要的,它们涵盖了从基本语法到MFC框架的使用,以及面向对象编程的原则。以下是对这些知识点的详细说明: 1. **组合框数据输入**:在VC++中,当你在组合框...
"一点滴模块"是易语言中的一个重要组成部分,它是易语言程序设计中的一种资源库,包含了特定功能或服务的代码集合。这些模块通常由易语言社区的开发者制作并分享,以便其他用户可以方便地在自己的程序中复用这些功能...
### SD卡协议学习知识点 #### 一、SD卡操作模式与状态 SD卡协议的核心概念之一就是**操作模式(operation mode)**及其对应的**状态(state)**。根据SD卡的标准规范,每种操作模式都关联着特定的状态,主机通过发送...
自动点滴管理系统是一款基于.NET 3.5框架,利用Windows Communication Foundation (WCF) 技术构建的应用程序。WCF是微软提供的一种全面的服务导向架构,用于构建高度互操作的、分布式系统。它允许应用程序在不同的...
7. **负载均衡与故障转移**:WCF支持负载均衡和故障转移策略,当服务节点增多或出现故障时,系统能自动调整,确保服务的连续性和可用性。 通过.NET框架3.5和WCF技术的结合,自动点滴管理系统能够实现高效、安全的...
【基于Wcf技术的自动点滴管理系统】是一种利用先进的软件技术设计的医疗管理工具,主要用于提升医疗机构的点滴护理效率。此系统的核心是运用Windows Communication Foundation(Wcf),这是一种由微软提供的.NET框架...
国旗下演讲:学习点滴心得.pdf
标题中的“智能液体点滴速度监测”是指一种利用现代科技手段对输液过程中的点滴速度进行实时、精确监控的技术。这项技术通常结合传感器、微处理器和显示设备,旨在提高医疗护理的安全性和效率,防止因点滴速度不当...
本设计报告主要探讨了一种基于单片机技术的液体点滴速度监控装置,旨在实现对输液过程的精确控制和实时监测,以提高医疗安全性和患者的舒适度。该系统的核心是单片机AT89C51,通过键盘和红外对射式传感器作为输入,...
自动点滴管理系统是一款基于.NET 3.5框架,利用Windows Communication Foundation (WCF) 技术构建的高效能、高可靠性的应用。WCF是微软推出的一种面向服务的通信框架,旨在简化分布式系统的开发,它提供了丰富的功能...
同时,为了保证服务的稳定性和可扩展性,可能还需要考虑负载均衡、故障转移和监控策略。 总的来说,自动点滴管理系统是一个集成了.NET 3.5框架、WCF技术以及数据库管理和用户界面设计的综合项目,它展示了如何利用...
很抱歉,我无法根据您提供的文件内容来生成与"Oracle初学者的学习点滴及国内oracl.docx"相关的IT知识。文件的内容主要涉及国际贸易教程的习题和理论,如李嘉图的比较优势理论、里昂惕夫悖论,以及21世纪国际贸易的新...
SD卡协议学习点滴(完整版本),对使用SD卡很有帮助
标题“用51实现对点滴速度的控制”指的是利用经典的51系列单片机来设计一个可以调节输液速度的系统。51单片机是微控制器的一种,因其内部资源丰富、开发工具成熟且价格适中,常被用于教学和各种嵌入式控制系统中。 ...