模式之性能与可靠性模式(一)

2008-02-23 09:36:56来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

1.服务器集群;2,负载平衡集群;3,故障转移集群.这几种严格地说是属于针对硬件瓶颈而采用得调整策略.

1,负载平衡集群:将服务或应用程序安装到多台服务器上,并将这些服务器配置为共享工作负荷。这种类型的配置就是 Load-Balanced Cluster。负载平衡通过将客户端请求分散在多台服务器上,从而提高了基于服务器的程序(如 Web 服务器)的性能。负载平衡技术(通常称为"负载平衡器")可以接收传入请求,并根据需要将它们重定向到特定主机。有负载平衡功能的主机能够同时响应不同客户端请求,甚至是来自同一客户端的多个请求。例如,Web 浏览器有可能从群集中的不同主机获得单个 Web 页所包含的多个图像。这就分散了负载,加快了处理速度,并缩短了对客户端的响应时间。

负载平衡器使用不同的算法控制通信流量。这些算法用于以智能方式分散负载,并/或最大限度地利用群集内的所有服务器。这些算法中的一部分示例包括:

循环法。循环算法将负载均衡地分配给每台服务器,而不考虑当前的连接数或响应时间。循环法适合于群集中的服务器具有相同处理能力的情况;否则,一些服务器收到的请求可能会超过它们的处理能力,而其他服务器的处理能力则有富余。

加权循环法。加权循环算法适合于每台服务器具有不同处理能力的情况。管理员将性能权值手动分配给每台服务器,而且按照服务器权值自动生成调度序列。然后,系统按照循环调度序列将请求定向到不同的服务器。

最少连接。最少连接算法根据群集中哪台服务器当前正在处理的连接数最少,从而将请求发送给该服务器。

基于负载。基于负载算法先判断群集中哪台服务器当前的负载最低,然后将请求发送给该服务器。

此外,一些负载平衡器还具有故障检测功能。平衡器可以跟踪服务器或在服务器上运行的应用程序,并在出现服务器故障后停止向该服务器发送请求。图 1 显示负载平衡的基本组件。


图 1:负载平衡组件

当负载平衡器收到来自客户端的请求时,群集组中的一台服务器将处理该请求。每台服务器都能够独立地处理请求。如果任何服务器因出现错误或正在维护而不可用,其他服务器仍然可以为请求提供服务而不会受到影响。因此,服务的总体可用性比由单台服务器处理所有请求的方案要高得多。但是,如果在一组软件负载平衡服务器前面使用单个物理负载平衡器或单个网络交换机,将会引入另一个故障单点。可以使用冗余负载平衡设备和/或交换机来减少这类风险。

会话状态管理

在完整的用例中,应用程序通常需要在各个步骤之间与用户交互。在用户实现其目标的过程中,他们在交互时所作的每个响应会影响可供用户使用的选项和应用程序的状态。术语"会话状态"通常用于描述这种以用例为中心的状态。此会话状态的一部分仅仅用于跟踪任务的进度,并在使用结束后丢弃该部分;如果用例成功结束,则将会话状态的其他部分保存在数据库中进行长期存储。例如,在使用联机购物车的用户选择结帐按钮(购物车中至少有一个项目时,才会启用该按钮)之前,很少要求该用户提供支付或运送信息。

分布式应用程序通常通过网络连接调用远程服务器上的软件组件。应用程序必须跟踪在各步骤之间会话状态发生的更改,以提供它们之间的连续性。应用程序设计人员通常在以下三个基本位置中的某一个维护会话状态:

客户端。应用程序设计人员将每个用户的会话状态存储在用户的计算机上。

中间服务器。应用程序设计人员将会话状态存储在一台在客户端计算机与永久存储用户信息的数据库服务器之间作为中介的计算机上。

数据库服务器。应用程序设计人员将会话状态与其他长期应用程序和用户数据一起存储在数据库服务器中。

只有中间服务器方法影响此模式。每种方法及其优缺点在 Designing for Scalability with Microsoft Windows DNA [Sundblad00] 的第 2 章"Designing for Scalability"中有详细说明。

如果所有服务器都是无状态的(就是说,在服务器处理请求后,服务器的状态将还原为默认值),一个简单的解决方案(如图 1 中所示的解决方案)就足够了。在两种情况下服务器可以是无状态的。其一,客户端不需要会话;也就是说,每个请求都是单独的工作单元,并且在请求之间没有持续存在的临时值。其二(称为"客户端会话管理"),客户端本身将保存会话的状态,并在请求内发送会话状态信息,以便任何服务器都可以检查到请求,并继续处理它。

在服务器会话管理方案中,服务器负责维护用户会话的状态。服务器会话管理要求负载平衡器将同一个用户会话内来自一个客户端的所有请求定向到同一个服务器实例。此机制通常称为"服务器关系"。

会话管理本身的一个问题是:如果服务器因出现错误或进行维护而脱机,则可能会丢失客户端的工作,而且客户端必须重新发送丢失的会话中已经发送的所有请求。在某些情况下,偶然丢失会话对用户来说不是大问题。例如,在联机地图搜索应用程序中,如果服务器丢失用户刚键入的地址,用户重新键入该地址不会是一件太麻烦的事情。但是,在其他情况下,会话丢失可能是极其不便的。例如,在具有无状态客户端的联机租用应用程序中,用户可能要花费 10 分钟的时间才能将几页有价值的信息键入到合约表格中。如果负载平衡组中的一台服务器脱机,您当然不希望用户再花费 10 分钟重新键入所有信息。为避免因负载平衡组中的服务器出现故障而导致的会话丢失,可以使用以下两种方法:集中式状态管理和异步会话状态管理。图 2 显示集中式状态管理。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java中如何实现表格的多表头显示

下一篇:Eclipse Extract Method 方法实现 (一)