第7章 性能和可靠性模式 Server Clustering(服务器群集)
上下文
您正在设计要部署应用程序的基础结构层。运行要求包括无法满足的可用性或性能能力,因为基础结构中存在性能瓶颈或故障单点。
影响因素
设计基础结构时,请考虑下列影响因素:
- 用户希望在使用应用程序时这些应用程序可以使用并且能够作出响应。
- 在生产环境中(无论是支持重要客户端/服务器应用程序的数据库,还是电子商务网站)的连续运行时间日益成为普遍的业务要求。
- 应用程序故障可能会造成严重的经济损失。例如,由于基础结构中一个服务器出现故障,某大销售量在线商店每小时 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 人员因而在配置基础结构以支持应用程序性能、可用性和可伸缩性要求的时候有更多选择。
缺点
- 增加了基础结构的复杂性。有些群集设计会明显增加解决方案的复杂性,从而可能影响运行和支持要求。例如,群集可能会增加要管理的服务器、要维护的存储设备以及要配置和监视的网络连接。
- 增加设计和代码要求。应用程序可能需要特定设计并更改代码,才能在使用群集的基础结构中正常运行。例如,跨越多个服务器管理会话状态的需要可能会变得更加困难,并且可能需要更改代码才能适应维护状态的需要,这样在发生服务器故障时才不会丢失会话信息。
不兼容性。现有应用程序或应用程序组件可能不支持群集技术。例如,用于开发应用程序或组件的技术可能存在这样的限制:即使更改代码,也不支持群集。
第7章 性能和可靠性模式 Server Clustering(服务器群集)的更多相关文章
- 第7章 性能和可靠性模式 Load-Balanced Cluster(负载平衡群集)
上下文 您已经决定在设计或修改基础结构层时使用群集,以便在能够适应不断变化的要求的同时保持良好的性能. 问题 在保持可接受的性能级别的同时,如何设计一个可适应负载变化的.可伸缩的基础结构层? 影响因素 ...
- 第7章 性能和可靠性模式 Failover Cluster(故障转移群集)
上下文 您已经决定在设计或修改基础结构层时使用群集以提供高度可用的服务. 问题 您应该如何设计一个高度可用的基础结构层,来防止因单台服务器或它所运行的软件出现故障而导致的服务丢失? 影响因素 在设计高 ...
- 第13章 模版方法模式(Template Method)
原文 第13章 模版方法模式(Template Method) 模板模式 模板模式 举例:模拟下数据库的update方法,先删除在插入. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- 第11章 享元模式(Flyweight Pattern)
原文 第11章 享元模式(Flyweight Pattern) 概述: 面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情况下,对象的数量可能会太多,从而导致了运行时 ...
- 设计模式之第13章-职责链模式(Java实现)
设计模式之第13章-职责链模式(Java实现) “请假都那么麻烦,至于么.”“咋的了?”“这不快过年了么,所以我想早两天回去,准备一下,买买东西什么的,然后去给项目经理请假,但是他说快过年了,所以这个 ...
- 设计模式之第12章-享元模式(Java实现)
设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有 ...
- 使用Micrisoft.net设计方案 第三章Web表示模式
第三章Web表示模式 体系结构设计者在设计第一个作品时比较精简和干练.在第一次设计时,并清除自己做什么,因此比较小心谨慎.第二个作品是最危险的一个作品,此时他会对第一个作品做修饰和润色,以及把第一次设 ...
- 第十一章 Servlet MVC模式
内包含案例,基于jsp+servlet的:MVC模式计算器:MVC模式登陆 第十一章 Servlet MVC模式 模型-视图-控制器(model-view-controller),简称MVC.MVC是 ...
- 《微服务架构设计模式》读书笔记 | 第8章 外部API模式
目录 前言 1. 外部API的设计难题 1.1 FTGO应用程序的服务及客户端 1.2 FTGO移动客户端API的设计难题 1.3 其他类型客户端API的设计难题与特点 2. API Gateway模 ...
随机推荐
- HTML DIV中文字自动换行 , 顶部对齐
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
- c# cookie帮助类
using System; using System.Collections.Generic; using System.Text; using System.Web; namespace Matic ...
- 微信小程序,时间戳和日期格式互相转化
微信小程序,时间戳转为日期格式 通常后台传递过来的都是时间戳,但是前台展示不能展示时间戳.就需要转化了. 功能说明: 微信小程序里,时间戳转化为日期格式,支持自定义. 拷贝至项目utils/utils ...
- Python总结1
时间:24日下午输入:input()输出:print()格式化输出通过某种占位符用于替换字符串中某个位置的字符.占位符:%s:可以替换任意类型%d:可以替换数字类型 需要掌握的#1.strip去左右两 ...
- javaee Properties键值对写入和读取方法
package Zjshuchu; import java.util.Properties; import java.util.Set; public class Demo03 { public st ...
- 【转载】intellij idea如何将web项目打成war包
1.点击[File]->[Project Structure]菜单(或使用Shift+Ctrl+Alt+S快捷键),打开[Project Structure]窗口.如下图: 2.在[Projec ...
- 【剑指Offer】55、链表中环的入口结点
题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 解题思路: 本题是一个比较典型的链表题目,难度适中.首先,对于大多人来说,看到这道题是比较开心的 ...
- Python学习【第1篇】:环境配置
1. 下载安装包 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi # 2.7安装包 https://www. ...
- 单元测试,我在公司Web团队的分享
一.单元测试的意义 1.质量 2.效率 (短期和长远都值得)写单元测试代码,总的来说其实是更节省开发时间,更保证质量的.Controller.Service.Dao其实都可以进行测试. 通过启动 To ...
- adchos 文本混淆工具
#-*- coding:utf-8 -*- import jieba import random import codecs import sys import string import chard ...