上下文
您正在设计要部署应用程序的基础结构层。运行要求包括无法满足的可用性或性能能力,因为基础结构中存在性能瓶颈或故障单点。
影响因素
设计基础结构时,请考虑下列影响因素:
- 用户希望在使用应用程序时这些应用程序可以使用并且能够作出响应。
- 在生产环境中(无论是支持重要客户端/服务器应用程序的数据库,还是电子商务网站)的连续运行时间日益成为普遍的业务要求。
- 应用程序故障可能会造成严重的经济损失。例如,由于基础结构中一个服务器出现故障,某大销售量在线商店每小时 25,000 美元的收入即会降低。如果故障持续数小时,其资金影响则可能相当严重。
- " 应用程序基础结构中的所有系统都需要维护。各个系统必须既能适应硬件升级,又能适应软件升级,而不会导致应用程序停止运行。例如,发布了修补程序,以修复 运行于某服务器(提供了应用程序)的组件的相关安全问题。如果仅有此服务器,则应用程序将停止运行。如果该服务器是一系列服务器之一,则仅该服务器将会停 止运行,而应用程序不会停止运行。
- " 增加硬件可能会增加解决方案的成本和复杂程度。例如,新硬件或功能更强的硬件需要增加开发和测试,才能使应用程序充分利用功能更强的环境。另外,管理更为复杂的环境还需要增加维护和培训成本。
解决方案
对应用程序基础结构进行相应设计,使服务器对用户和应用程序表现为虚拟统一计算资源。实现这种虚拟效果的方法之一是使用服务器群集。服务器群集是相互连接的两个或多个服务器,这些服务器表现为一个服务器,因而创建了能增强可用性和(或)可伸缩性的虚拟资源。
在某个服务器由于故障或计划停机而无法使用时,通过确保群集中其他服务器可以承担工作负载,群集服务器可以实现提高可用性的目标(请参阅 Failover Cluster 模式)。此类群集可避免向访问该群集的用户或应用程序所提供服务的损失,还可透明进行服务器转移而不为用户所知。
还可以使用群集增强可伸缩性。服务器群集可以在当前性能级别支持更多用户,或通过向多个服务器分散工作负载来提高当前数量的用户的应用程序性能。另外,如前所述(请参阅 Load-Balanced Cluster 模式),可伸缩群集服务器还有一附带作用,即多个服务器的额外冗余性有助于提高系统可用性。
图 1:群集基本概念
图 1 显示了服务器群集如何使两个或多个服务器(服务器 1 到服务器 n)对独立应用程序表现为一个虚拟资源。
不对称群集
在" 不对称群集"中,备用服务器仅是为了在其他服务器发生故障时接替其工作。此类群集通常用于为读/写存储(如数据库、邮件系统以及文件和打印服务)提供高可 用性和高可伸缩性。如果由于维护需要而出现计划停机,或因故障导致未计划停机,群集中某节点因而无法使用,其他节点则会接替该故障节点的功能。
备用服务器不执行其他有用工作,且其功能不强于主服务器。在将主服务器与多个冗余子系统配置一起以获得高可用性和高容错性时,通常使用功能较差、成本较低的备用服务器。不对称群集的一个常见类型是 Failover Cluster(请参阅 Failover Cluster 模式)。
图 2:不对称群集
图 2 显示了不对称群集如何向应用程序显示虚拟资源。正常情况下,主服务器处理所有请求。发生故障时,备用服务器将接替处理所有请求。
对称群集
在" 对称群集"中,群集中每个服务器都执行有用工作。通常情况下,每个服务器都是一组特定应用程序的主服务器。如果一个服务器出现故障,其余服务器则会继续处 理其分配应用程序组,同时处理发生故障的服务器上的应用程序。因为更为充分利用了群集资源,对称群集的成本效率更高;但在发生故障时,剩余各服务器的附加 负载可能导致这些服务器也出现故障。
图 3:对称群集
图 3 显示了对称群集如何向应用程序显示虚拟资源。请求被分散至各个正常运行的服务器,以分散负载并增加可伸缩性。
对称群集的一个常见类型是负载平衡群集(请参阅 Load-Balanced Cluster 模式)。通过向服务器群集中所有正常运行的服务器分布请求,负载平衡群集可以提高 Web 服务器、介质服务器、VPN 服务器和只读存储等服务的性能、可用性和可伸缩性。
结果上下文
Server Clustering 具有下列优缺点:
优点
- 更强的可伸缩性。通过 Server Clustering,应用程序可以处理更多负载。
- 更高的可用性。Server Clustering 有助于应用程序避免服务中断。
- 更大的灵活性。群集具有提供虚拟统一计算资源的功能,IT 人员因而在配置基础结构以支持应用程序性能、可用性和可伸缩性要求的时候有更多选择。
缺点
- 增加了基础结构的复杂性。有些群集设计会明显增加解决方案的复杂性,从而可能影响运行和支持要求。例如,群集可能会增加要管理的服务器、要维护的存储设备以及要配置和监视的网络连接。
- 增加设计和代码要求。应用程序可能需要特定设计并更改代码,才能在使用群集的基础结构中正常运行。例如,跨越多个服务器管理会话状态的需要可能会变得更加困难,并且可能需要更改代码才能适应维护状态的需要,这样在发生服务器故障时才不会丢失会话信息。
不兼容性。现有应用程序或应用程序组件可能不支持群集技术。例如,用于开发应用程序或组件的技术可能存在这样的限制:即使更改代码,也不支持群集。