1、第十一讲第十一讲 负载均衡服务负载均衡服务1感谢你的欣赏2019-10-10一、服务性能一、服务性能二、常用分析方法二、常用分析方法三、负载平衡三、负载平衡内内 容容感谢你的欣赏2019-10-10一、服务性能一、服务性能性能的重要性性能的重要性: 核心质量属性之一核心质量属性之一正确正确健壮健壮安全安全 高效高效易维护易维护感谢你的欣赏2019-10-10什么是高效性:什么是高效性:包括时间高效性与空间高效性包括时间高效性与空间高效性时间高效性主要是指系统响应时间小、吞吐率高时间高效性主要是指系统响应时间小、吞吐率高空间高效性主要是占用资源空间高效性主要是占用资源(例如:例如:CPU、内存、
2、内存、数据库连接、网络连接等等数据库连接、网络连接等等)少少类似内容还包括:同时服务的客户数目等类似内容还包括:同时服务的客户数目等感谢你的欣赏2019-10-10由于早期由于早期CPU的计算能力有限的计算能力有限内存容量也有限内存容量也有限因此程序的效率问题在早期很受重视:因此程序的效率问题在早期很受重视:算法复杂性的研究长期以来是计算机科学算法复杂性的研究长期以来是计算机科学的重要内容的重要内容衡量一个算法好坏的主要标准是时间开销衡量一个算法好坏的主要标准是时间开销与空间开销与空间开销感谢你的欣赏2019-10-10仅十多年年来,对效率问题的重视程度有所下降:仅十多年年来,对效率问题的重视
3、程度有所下降:为提高开发效率,人们往往以牺牲代码效率为代价为提高开发效率,人们往往以牺牲代码效率为代价例如大量系统软件、框架的引入例如大量系统软件、框架的引入方便了应用软件的开发方便了应用软件的开发同时导致调用层次过多、系统执行效率下降同时导致调用层次过多、系统执行效率下降 只是由于硬件速度与容量提升较快只是由于硬件速度与容量提升较快盖过了软件效率的下降盖过了软件效率的下降使最终用户感觉系统速度还是增加了使最终用户感觉系统速度还是增加了感谢你的欣赏2019-10-10为了提高用户的响应时间为了提高用户的响应时间许多系统以大量的重复冗余计算为代价:许多系统以大量的重复冗余计算为代价:为同一个用户
4、请求创建在多个机器上的计算为同一个用户请求创建在多个机器上的计算并将最先得到的结果返回给用户并将最先得到的结果返回给用户将后续得到的结果直接抛弃将后续得到的结果直接抛弃 google:一次一次Google搜索所消耗的电能可以足够一个搜索所消耗的电能可以足够一个11瓦瓦的节能灯亮的节能灯亮15分钟到一个小时分钟到一个小时降低对效率的追求降低对效率的追求 是导致是导致IT系统能耗增长的因素之一系统能耗增长的因素之一随着能源问题的日趋突出随着能源问题的日趋突出这方面的研究迫切需要加强这方面的研究迫切需要加强感谢你的欣赏2019-10-10基本过程:基本过程:分析效率分析效率=发现问题发现问题=调整调
5、整基本方式:基本方式:离线离线 在线在线感谢你的欣赏2019-10-101、静态分析、静态分析2、动态测试、动态测试3、在线监测、在线监测感谢你的欣赏2019-10-10l通过静态分析可以发现程序中:通过静态分析可以发现程序中:从来就不会执行的代码从来就不会执行的代码(Dead Code)不会被引用的变量或者赋值操作不会被引用的变量或者赋值操作不需要的检查不需要的检查不必要的串复制不必要的串复制(strcpy)、数字转换、数字转换等等等等l然后就可以对代码进行优化:然后就可以对代码进行优化:在不改变程序语义的前提下在不改变程序语义的前提下剔除冗余的代码,从而减少内存开销,提高执行效率剔除冗余的
6、代码,从而减少内存开销,提高执行效率感谢你的欣赏2019-10-10这个过程需要自动化的测试工具来辅助完成:这个过程需要自动化的测试工具来辅助完成:测试工具主要用来模拟多种正常、峰值以及异常测试工具主要用来模拟多种正常、峰值以及异常负载条件负载条件从而对系统的各项性能指标进行测试从而对系统的各项性能指标进行测试效率测试可以使在用户模拟的环境中进行的效率测试可以使在用户模拟的环境中进行的由于软件的运行效率与运行环境有很大的关系由于软件的运行效率与运行环境有很大的关系因此效率测试更需要在系统部署到实际环境中因此效率测试更需要在系统部署到实际环境中但还没有实际上线时进行但还没有实际上线时进行感谢你的
7、欣赏2019-10-10在系统实际运行过程中分析性能在系统实际运行过程中分析性能对效率进行监测的主要对象包括:对效率进行监测的主要对象包括:l系统的响应时间系统的响应时间lCPU负载情况负载情况l内存使用内存使用l客户连接实例数目客户连接实例数目l内部类型的实例数目内部类型的实例数目l数据库连接实例数目数据库连接实例数目l等等等等感谢你的欣赏2019-10-10在由大量处理结点组成的集群系统中在由大量处理结点组成的集群系统中系统在服务过程中系统在服务过程中提高资源利用率提高资源利用率降低请求响应时间降低请求响应时间的有效手段的有效手段感谢你的欣赏2019-10-101、负载平衡方案、负载平衡方
8、案 2、Web层的负载平衡层的负载平衡3、EJB层的负载平衡层的负载平衡4、动态负载平衡技术、动态负载平衡技术 内内 容容感谢你的欣赏2019-10-10l负载平衡点负载平衡点l负载平衡粒度负载平衡粒度l负载平衡算法负载平衡算法感谢你的欣赏2019-10-10l负载平衡点指作出负载平衡决策的位置负载平衡点指作出负载平衡决策的位置独立的负载均衡器上、服务节点自身、客户端独立的负载均衡器上、服务节点自身、客户端l在多数情况下负载平衡由单个节点完成在多数情况下负载平衡由单个节点完成l单点负载平衡好处:单点负载平衡好处:便于获得系统的全局状态,作出全局一致的决策;便于获得系统的全局状态,作出全局一致的
9、决策;能实现复杂的负载平衡算法,获得最优的效果;能实现复杂的负载平衡算法,获得最优的效果;便于支持多种平衡策略,适用于不同的应用环境便于支持多种平衡策略,适用于不同的应用环境l单点负载平衡的不足:单点负载平衡的不足:负载平衡点可能成为性能瓶颈负载平衡点可能成为性能瓶颈影响系统的伸缩性影响系统的伸缩性也可能单点失效也可能单点失效感谢你的欣赏2019-10-10l多点负载平衡多点负载平衡l可以获得比较好的伸缩性,但一般仅能使用可以获得比较好的伸缩性,但一般仅能使用静态算法静态算法l存在两种类型的多点负载平衡存在两种类型的多点负载平衡一种是多个节点独立地进行决策,其综合效果取一种是多个节点独立地进行
10、决策,其综合效果取决于单个节点的负载平衡效果与多个节点的叠加决于单个节点的负载平衡效果与多个节点的叠加效果;效果;另一种是多个节点并行地做出相同的决策,如根另一种是多个节点并行地做出相同的决策,如根据请求的源地址(或目标地址)进行静态散列以据请求的源地址(或目标地址)进行静态散列以确定服务节点,此时多个物理负载平衡点等价于确定服务节点,此时多个物理负载平衡点等价于单个逻辑负载平衡点。单个逻辑负载平衡点。l当客户数量众多而又无法依赖高速硬件来完当客户数量众多而又无法依赖高速硬件来完成负载分发时,多点负载平衡可能是必须的成负载分发时,多点负载平衡可能是必须的感谢你的欣赏2019-10-10l指负载
11、分发(或迁移)基本单位的组合程度指负载分发(或迁移)基本单位的组合程度l对于网络层的负载平衡,基本单位是对于网络层的负载平衡,基本单位是IP数据报。一数据报。一种可能的负载平衡粒度是目标地址为同一个种可能的负载平衡粒度是目标地址为同一个IP的所的所有数据报(如有数据报(如Linux服务器集群系统的目标地址散服务器集群系统的目标地址散列调度算法)列调度算法)l对于分布对象中间件而言,基本单位是对象请求。对于分布对象中间件而言,基本单位是对象请求。常见的两种负载平衡粒度是请求级与会话级。请求常见的两种负载平衡粒度是请求级与会话级。请求级(级(per-request)指每次对象调用时都作负载分发)指
12、每次对象调用时都作负载分发l会话级(会话级(per-session)指的是仅在查找或首次调用)指的是仅在查找或首次调用一个对象时进行负载决策,而后针对该对象引用的一个对象时进行负载决策,而后针对该对象引用的所有请求都被发往同一个节点所有请求都被发往同一个节点l直观上,粒度越细,负载平衡效果越好,但用于负直观上,粒度越细,负载平衡效果越好,但用于负载平衡的开销也越大载平衡的开销也越大感谢你的欣赏2019-10-10l具体的负载平衡实施方法具体的负载平衡实施方法l根据决策时是否使用运行时刻的信息(如各根据决策时是否使用运行时刻的信息(如各节点的负载状况、请求的类型或内容),负节点的负载状况、请求的
13、类型或内容),负载平衡算法可以分为静态算法与动态算法两载平衡算法可以分为静态算法与动态算法两大类大类感谢你的欣赏2019-10-10l静态算法也称为非适应性算法,不使用静态算法也称为非适应性算法,不使用运行时刻的信息运行时刻的信息l常用的静态算法有轮循、随机及加权轮常用的静态算法有轮循、随机及加权轮循循 算法(算法(weighted round-robin)等几种)等几种l其中轮循与随机算法适合于所有节点处其中轮循与随机算法适合于所有节点处理能力相当的情况,静态加权算法适合理能力相当的情况,静态加权算法适合于节点处理能力不同的情况于节点处理能力不同的情况感谢你的欣赏2019-10-10l动态算
14、法也称为适应性算法,参考运行时的动态算法也称为适应性算法,参考运行时的系统信息做出负载平衡决策系统信息做出负载平衡决策l一般只有单点负载平衡才能使用动态算法一般只有单点负载平衡才能使用动态算法l常见的动态算法可分为两类常见的动态算法可分为两类一类算法仅使用系统的负载信息。典型的例子是一类算法仅使用系统的负载信息。典型的例子是最低负载法(最低负载法(least loaded),即每次负载决策都),即每次负载决策都选当前负载最轻的节点选当前负载最轻的节点另一类算法不仅考虑系统负载,还兼顾请求的内另一类算法不仅考虑系统负载,还兼顾请求的内容以获得更好的总体性能,例如基于局部性的负容以获得更好的总体性
15、能,例如基于局部性的负载分发载分发 感谢你的欣赏2019-10-10l理论上,动态算法能获得更好的负载平衡效果,理论上,动态算法能获得更好的负载平衡效果,特别在负载不均匀的情况下特别在负载不均匀的情况下l实际效果则依赖于所选择的负载分发策略、负实际效果则依赖于所选择的负载分发策略、负载度量以及运行时数据的获取载度量以及运行时数据的获取l特别的,对于动态负载平衡算法,选择合适的特别的,对于动态负载平衡算法,选择合适的负载度量(负载度量(load metric)十分重要)十分重要l常用的负载度量有单位时间的请求数、一段时常用的负载度量有单位时间的请求数、一段时间内间内CPU运行队列的平均长度、运行
16、队列的平均长度、CPU利用率、利用率、可用内存数以及活跃连接数等等可用内存数以及活跃连接数等等l很多参数的设置会影响到动态算法的效果很多参数的设置会影响到动态算法的效果例如从各节点获取负载的频率以及确定节点是否例如从各节点获取负载的频率以及确定节点是否过载的界限等过载的界限等 感谢你的欣赏2019-10-10Web层负载平衡具有如下特点:层负载平衡具有如下特点:1)单点负载平衡,既逻辑上只有一个负载)单点负载平衡,既逻辑上只有一个负载 平衡点,物理上也只有一个负载平衡点平衡点,物理上也只有一个负载平衡点2)请求级负载平衡,即每次客户请求都需)请求级负载平衡,即每次客户请求都需要经由负载平衡器进
17、行请求分发要经由负载平衡器进行请求分发感谢你的欣赏2019-10-10lDNS轮循(轮循(DNS Round Robin) 由由DNS服务器维护域名与一组服务器维护域名与一组IP地址的映射,对地址的映射,对于每一个域名解析请求,于每一个域名解析请求,DNS服务器依次选择列服务器依次选择列表中的下一个表中的下一个IP地址返回地址返回由于用户直接访问的由于用户直接访问的DNS服务器常常没有所需的服务器常常没有所需的DNS信息,而需将信息,而需将DNS请求转发给保存着该信息请求转发给保存着该信息的的DNS服务器,并且缓存返回的域名与服务器,并且缓存返回的域名与IP地址的地址的映射,实际效果可能并不理
18、想。映射,实际效果可能并不理想。当一个新的服务节点加入时,当一个新的服务节点加入时,DNS信息不能很快信息不能很快更新;而当服务节点崩溃时,更新;而当服务节点崩溃时,DNS服务器也无法服务器也无法感知,这些都影响了负载平衡的效果感知,这些都影响了负载平衡的效果感谢你的欣赏2019-10-10l服务器均衡负载(服务器均衡负载(Server Load Balancing,简称,简称SLB):整个系统对外而言只有一个):整个系统对外而言只有一个IP地址(即均地址(即均衡器的地址),所有请求都发往该地址,由均衡器衡器的地址),所有请求都发往该地址,由均衡器根据选定的负载平衡算法转发请求根据选定的负载平
19、衡算法转发请求l负载均衡器一般由交换机或路由器充当,请求转发负载均衡器一般由交换机或路由器充当,请求转发与应答返回通过修改与应答返回通过修改IP数据报中的源地址与目的地数据报中的源地址与目的地址来实现址来实现l请求结果既可以经由均衡器返回客户,也可由服务请求结果既可以经由均衡器返回客户,也可由服务节点直接返回客户节点直接返回客户lSLB能迅速感知服务节点的加入与退出;检查节点能迅速感知服务节点的加入与退出;检查节点的状态并将不可用的节点排除在外的状态并将不可用的节点排除在外l为避免单点失效,均衡器一般采用冗余配置为避免单点失效,均衡器一般采用冗余配置感谢你的欣赏2019-10-10l没有单独的
20、负载均衡器,而由位于各个服务节点上的没有单独的负载均衡器,而由位于各个服务节点上的负载平衡服务实现客户请求到节点地址的源地址散列负载平衡服务实现客户请求到节点地址的源地址散列l由于各个节点上的负载平衡服务使用相同的映射规则,由于各个节点上的负载平衡服务使用相同的映射规则,这种方案既达到了单点负载平衡的效果,又获得了比这种方案既达到了单点负载平衡的效果,又获得了比前两种方案更高的可用性前两种方案更高的可用性l具体做法:具体做法:参与负载平衡的所有节点组成一个集群,对客户而言只参与负载平衡的所有节点组成一个集群,对客户而言只有一个有一个IP地址地址位于网络驱动与位于网络驱动与TCP/IP协议实现之
21、间的负载平衡服务协议实现之间的负载平衡服务将该将该IP地址映射为一个特定的地址映射为一个特定的MAC地址,从而集群内地址,从而集群内各个节点的数据链路层都会接收所有客户请求;对于来各个节点的数据链路层都会接收所有客户请求;对于来自同一个自同一个IP地址与端口的客户请求,各个节点的负载平地址与端口的客户请求,各个节点的负载平衡服务都将其映射为同一个节点地址;此节点的负载平衡服务都将其映射为同一个节点地址;此节点的负载平衡服务将请求向上交给衡服务将请求向上交给TCP/IP协议栈处理,而其它节协议栈处理,而其它节点则忽略该请求点则忽略该请求感谢你的欣赏2019-10-10l由由Web服务器实现对请求
22、的负载平衡服务器实现对请求的负载平衡Apache/Tomcat提供了一种典型的负载平衡方案,即提供了一种典型的负载平衡方案,即由一个由一个Apache服务器处理静态页面,后面挂多个服务器处理静态页面,后面挂多个Tomcat服务器处理服务器处理JSP/Servlet请求请求为保持会话语义,一般使用为保持会话语义,一般使用“粘着会话粘着会话”(sticky session)策略,即同一个客户的所有请求由同一个)策略,即同一个客户的所有请求由同一个Tomcat服务器来处理服务器来处理负载平衡使用静态加权轮循算法,可以为不同的负载平衡使用静态加权轮循算法,可以为不同的Tomcat服务器指定不同的权值服
23、务器指定不同的权值Tomcat提供了会话状态复制的能力(基于提供了会话状态复制的能力(基于JGroups提提供的组通信服务),从而提高了系统的可用性供的组通信服务),从而提高了系统的可用性感谢你的欣赏2019-10-10l很多情况下,很多情况下,Web容器与容器与EJB容器位于同一容器位于同一个节点上,此时对于个节点上,此时对于Web客户仅需要客户仅需要Web层负载平衡即可层负载平衡即可l但是当但是当Web容器与容器与EJB容器分离时,特别对容器分离时,特别对于独立客户而言,于独立客户而言,EJB负载平衡仍是必要负载平衡仍是必要的的 l一般仅使用静态负载平衡算法一般仅使用静态负载平衡算法 感谢
24、你的欣赏2019-10-10l查找级(查找级(per-lookup) 向一个向一个home对象以及该对象以及该home对象创建的所有对象创建的所有remote对象发出的请求都由一个固对象发出的请求都由一个固定的节点处理,仅支持同一个定的节点处理,仅支持同一个EJB的不同的不同home对象对象及不同及不同EJB的负载平衡的负载平衡l会话级(会话级(per-session) 向向home对象发出的不同请求对象发出的不同请求可以负载平衡,而向可以负载平衡,而向remote对象发出的请求则始终对象发出的请求则始终由创建该对象的节点处理由创建该对象的节点处理l请求级(请求级(per-request) h
25、ome与与remote对象的请求都对象的请求都可以负载平衡。一般只有无态会话构件与只读实体可以负载平衡。一般只有无态会话构件与只读实体构件能做到这一级。尽管会话状态复制为有态会话构件能做到这一级。尽管会话状态复制为有态会话构件的请求级负载平衡提供了支持,但是考虑到性构件的请求级负载平衡提供了支持,但是考虑到性能开销,在实际应用中会话状态复制一般仅用于需能开销,在实际应用中会话状态复制一般仅用于需要支持容错的情况要支持容错的情况感谢你的欣赏2019-10-10l动态、异构的环境动态、异构的环境l这表现为节点会动态加入、退出集群,这表现为节点会动态加入、退出集群,节点的负载能力可能会发生变化(例如,节点的负载能力可能会发生变化(例如,在正在运行的集群的某个节点上运行一在正在运行的集群的某个节点上运行一个后台应用,可能需要降低该节点的权个后台应用,可能需要降低该节点的权值),有异构节点加入集群等等值),有异构节点加入集群等等l动态迁移!动态迁移!感谢你的欣赏2019-10-10