`
阅读更多

好的设计是实现高度可伸缩的应用程序的基础。在应用程序的生存周期中,设计阶段所做的决策对应用程序可伸缩性的影响最大。

可伸缩性金字塔

正如可伸缩性金字塔所显示的,速度更快的硬件、软件和优化调整只是可伸缩性等式的一小部分。金字塔的底部是设计,它对可伸缩性的影响最大。沿着金字塔向上,因素的重要性逐渐降低,影响可伸缩性的能力也相应地减小。从金字塔可以看出,与硬件相比,好的设计能够为应用程序带来更大的可伸缩性。

设计可伸缩性时,主要目标是确保有效的资源管理。可伸缩性设计不仅限于应用程序的任何特定的层或组件。应用程序结构设计者必须从用户界面到数据存储区等各个角度考虑可伸缩性。进行设计选择时,以下五条可伸缩性设计戒律可能很有用。

有关可伸缩性设计的五大戒律

不等待

进程等待的时间不应超出必要的长度。每当某个进程在某个时间段内使用资源时,另一个进程将无法在该时间段内使用该资源。可将进程分为两个单独的类别:同步和异步。

有时应用程序必须同步执行操作。某些操作可能需要等待某个操作返回结果后才能继续执行,或者可能需要验证某个操作是否成功以确保原子性。也就是说,与该操作关联的所有操作必须全部失败或成功,才能执行另一个操作。然而,当应用程序被限制在此方式时,资源便成为了给可伸缩性带来负面影响的争用源。

实现可伸缩性的一个方法是以异步方式执行操作。以异步方式执行操作时,长期运行的操作将排队等待以后由单独的进程完成。

例如,某些电子商务站点在结帐过程中执行信用卡验证。如果验证服务存在困难,则这可能成为高访问量电子商务站点上的瓶颈。对于必须以物理方式提供产品以完成订单的电子商务站点,该过程很适合用异步操作来完成。由于产品的所有权不是在在线交易期间从卖方转移到买方,零售商可以脱机完成信用卡验证。然后,应用程序可以在验证信用卡交易后向客户发送确认订单的电子邮件。

不争用资源

争用资源是所有可伸缩性问题的根本原因。不能满足需求的不充足的内存、处理器周期、带宽或数据库连接将导致应用程序无法伸缩,这并没有什么可奇怪的。

不论如何设计,所有分布式应用程序都占有一定数量的资源。除了通过不等待长期运行的操作来加速进程外,还可以采取其他措施避免资源争用。

应安排从充足到缺乏的资源使用。例如,如果执行的事务所涉及的资源缺乏并因此受争用的限制,则应尽量晚些使用这些资源。这样一来,早先中止的事务将不会阻止或延迟成功的进程使用这些资源。

尽量晚些获取资源,然后尽早释放它们。一个进程占用资源的时间越短,另一个进程就可以更快地获取资源。例如,应尽快将数据库连接返回到池。

如果可能,甚至不要使用争用的资源。有时,进程使用的事务在执行功能时不需要资源。例如,需要事务的方法与不需要事务的方法应分开放在不同的组件中,这样可避免在不需要时创建事务。

可交换性设计

可交换性设计通常是最容易被忽略的减少资源争用的方法之一。如果两个或更多的操作可以任何顺序应用并且仍获得同样的结果,这样的操作就称为是可交换的。通常,可在缺少事务的情况下执行的操作适合这样的情况。

例如,一个繁忙的电子商务站点不断更新产品库存,可能会因产品的进出经历记录锁定争用。为避免这种情况,每个库存增减可以成为单独的库存交易表中的一个记录。数据库定期合计该表中的每种产品,然后用净库存变动更新产品记录。

可互换性设计

每当可以一般化资源时,便使它成为了可互换的。相反,每当向资源添加详细状态时,就降低了它的可互换性。

资源池方案利用了可互换资源。COM+ 组件池和 ODBC 连接池都是可互换资源的资源池示例。

例如,如果数据库连接对特定用户是唯一的,则无法为其他用户汇集该连接。相反,要汇集的数据库连接应使用基于角色的安全性,后者将连接与通用凭据集关联。要使连接池运行,连接字符串中的所有详细信息必须相同。此外,应显式关闭数据库连接以确保它们尽快返回到池中。依赖自动断开连接功能将连接返回到池中是不好的编程做法。

可互换性概念支持参数将状态移出组件。要求组件在方法调用间维护状态会破坏可互换性,并最终给可伸缩性带来负面影响。相反,每个方法调用都应是独立的。当方法调用间需要状态时将状态存储在组件的外部。数据库是保存状态的最佳位置。当调用无状态组件的方法时,该方法需要的任何状态既可以参数形式传递,也可从数据库中读取。在方法调用的最后,通过将状态返回到方法调用方或将其写回数据库来保留状态。

可交换性超出了资源池的范围。Web 应用程序的服务器端页缓存很有可能增加它的可伸缩性。尽管个性化可以为用户提供独特的经历,但这样做的代价是创建的自定义表示形式对其他用户是无法重用的。

分割资源和活动

最后应对资源和活动进行分割。通过最小化资源间和活动间的关系,可以将因关系的一方占用的时间超过另一方而导致瓶颈的风险降至最低。相互依赖的两个资源将共存亡。

对活动进行分割可有助于减轻放置在高开销资源上的负载。例如,使用 SSL 将消耗大量的系统开销以提供安全连接。因而,明智的作法是仅将 SSL 用于真正需要高度安全性的页。此外,专用于该任务的 Web 服务器可处理 SSL 会话。

事务为分割活动提供了另一个机会。通过将不需要事务的方法与需要事务的方法分开,避免了将事务所需的系统开销不必要地强加给不需要事务的方法。

然而,分割并不总是一个好办法。分割可使系统更复杂。分割具有依赖项的资源可向操作添加大量昂贵的系统开销。

 

原文:http://msdn.microsoft.com/zh-cn/library/aa291873(VS.71).aspx

分享到:
评论

相关推荐

    行业分类-设备装置-基于可伸缩性设计的教育平台数据缓存方法及系统.zip

    "基于可伸缩性设计的教育平台数据缓存方法及系统"就是一个针对这一挑战的解决方案。这个压缩包文件包含了对这一主题的深入探讨,主要涉及以下几个关键知识点: 1. **可伸缩性设计**:可伸缩性是指系统在面临负载...

    数据库课程设计中的可伸缩性设计:策略与实践

    通过上述策略和实践,可以在数据库课程设计中实现有效的可伸缩性设计,从而确保数据库系统能够适应未来数据增长和用户增加的需求。记住,可伸缩性设计是一个持续的过程,需要不断地评估和调整以满足不断变化的业务...

    分布式系统可伸缩性研究综述_陈斌.pdf

    测试则用来评估和验证系统的可伸缩性,包括对并行代码的测试和专门的可伸缩性测试系统设计,确保在不同工作负载和资源条件下,系统性能能够得到预期的动态调整。 随着云计算的兴起,软件服务的部署和提供方式发生了...

    行业文档-设计装置-可伸缩性手纸筒.zip

    4. **人机交互设计**:可伸缩性设计旨在提供更好的用户体验,这可能涉及到产品的易用性、舒适度和美学设计。例如,手纸筒的伸缩机制可能是无接触式的,减少物理接触以提高卫生性。 5. **材料科学**:为了实现伸缩...

    windows可伸缩性范例

    在IT领域,尤其是在系统管理和架构设计中,"可伸缩性"是一个至关重要的概念。Windows操作系统作为广泛应用的桌面和服务器平台,同样面临着如何提供高效、灵活的可伸缩性解决方案的挑战。本篇将深入探讨"Windows可...

    基于jQuery的可伸缩的在线客服代码.rar

    可伸缩性设计意味着系统能够随着用户量或数据量的增长而扩展,而不影响性能。对于在线客服系统,这可能涉及到负载均衡、数据库优化和前端的动态加载策略。使用jQuery,可以通过AJAX异步请求来优化用户体验,减少页面...

    基于PHP的Zoop PHP 稳定可伸缩移植框架.zip

    **可伸缩性设计** 可伸缩性是指系统在负载增加时能够平滑地扩展资源,而不会影响整体性能。在Zoop框架中,可伸缩性可能体现在模块化设计、负载均衡、数据库连接池、异步处理等方面。模块化使得新功能可以轻松添加而...

    6000m长距离单点驱动可伸缩带式输送机工业试运行分析

    3. 可伸缩性:输送机的可伸缩性设计使得它可以在需要时延长或缩短,适应不同的输送需求。这是为了满足不同生产场景下的物流需求。 4. 稳定性:在描述中特别强调了产品在工业试运行中的表现良好和稳定。稳定性是带式...

    分布式系统可伸缩性研究综述.pdf

    可伸缩性的设计和测试不仅涉及理论,也紧密相关于实际的系统设计与部署。 分布式系统的可伸缩性通常从两个方面进行分析,即并行任务调度和分布式系统框架。并行任务调度关注的是如何将任务有效地分配到多个处理单元...

    可伸缩网络服务可伸缩网络服务可伸缩网络服务博士论文

    在互联网环境中,可伸缩性是指系统能够随着工作负载的变化动态调整资源的能力,以满足用户需求,同时保持性能的稳定。这种特性对于处理流量波动和应对大规模用户增长至关重要。在博士论文的“第一章”中,可能会详细...

    一种基于Qt的可伸缩全异步CS架构服务器实现

    3. **可伸缩性设计** 可伸缩性是指系统在负载增加时能够扩展资源以保持性能的能力。在基于Qt的服务器实现中,可伸缩性可以通过多线程、进程或者分布式集群来实现。例如,当单个服务器无法处理所有请求时,可以动态...

    使用Web存储系统设计知识管理解决方案.doc

    知识点九:性能和可伸缩性设计 性能和可伸缩性是指知识管理解决方案的性能和可扩展性设计考虑因素,包括处理大量数据、快速响应用户请求等。 知识点十:分类和整合 分类和整合是指将知识管理解决方案与业务范围应用...

    利用USL预测MySQL数据库可伸缩性.pptx

    总结来说,利用USL预测MySQL数据库的可伸缩性是解决性能瓶颈和优化数据库设计的有效手段。通过对并发性、竞争和一致性的量化分析,我们可以更好地理解和改进系统的扩展能力,确保数据库在面临高负载时仍能保持高效...

    构建一个可伸缩性的容器平台的挑战与机遇

    在IT行业中,构建一个可伸缩性的容器平台是现代企业数字化转型的关键步骤。这涉及到将应用程序和服务部署在轻量级容器内,通过自动化工具进行管理和扩展,以应对不断变化的业务需求。本文将深入探讨构建这样的平台所...

    优秀系统设计文档_软件设计文档_

    9. **性能和可伸缩性设计**:考虑系统在高负载下的表现,以及如何通过负载均衡、缓存策略等手段提升系统性能和可伸缩性。 10. **实施计划**:制定详细的开发和部署计划,包括里程碑、时间表和责任人分配。 11. **...

    行业文档-设计装置-可伸缩性固定书立.zip

    综上所述,"可伸缩性固定书立"的设计涉及了硬件工程、交互设计、结构设计、嵌入式系统、软件工程、3D建模、可持续性等多个IT领域的知识。每一个环节都对最终产品的成功与否起着关键作用。通过这样的设计实践,我们...

    软件工程与软件系统可伸缩性评估1.pptx

    综上所述,软件工程不仅关注于如何高效地开发高质量的软件,还涉及如何设计具有良好可伸缩性的系统。通过对软件架构进行合理设计,并采取有效的可伸缩性策略和技术,可以显著提升系统的性能和稳定性,从而更好地应对...

    行业分类-设备装置-应用于幕墙上的具有可伸缩性的主钢结构.zip

    5. 设计挑战:尽管可伸缩性主钢结构带来诸多优势,但在实际应用中也面临一些挑战,如材料的选择、伸缩范围的确定、使用寿命的预估等,都需要设计师深入研究和实验验证。 6. 案例分析:文档中可能包含具体的工程案例...

Global site tag (gtag.js) - Google Analytics