谈谈可扩展性

翻译自:https://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html (沃纳·博赫尔斯 CTO - Amazon.com

可伸缩性经常被用作魔术咒语,以表明某些东西设计不当或损坏。在讨论中,您经常会听到“但是规模不大”作为结束争论的神奇词汇。这通常表明开发人员正在遇到系统体系结构限制其增长服务能力的情况。如果以积极的意义使用可伸缩性,则通常会指出所需的属性,例如“我们的平台需要良好的可伸缩性”。

我们对可伸缩性的真正含义是什么?如果我们在系统中增加资源时以与所添加资源成比例的方式提高性能,则该服务被称为可伸缩的。通常,提高性能意味着要服务更多的工作单元,但是也可以处理更大的工作单元,例如数据集增长时。

在分布式系统中,还有其他原因需要向系统添加资源。例如,以提高所提供服务的可靠性。引入冗余是防范故障的重要第一道防线。如果添加资源以促进冗余不会导致性能损失,则表示永远在线服务是可伸缩的

为什么可伸缩性这么难?因为可伸缩性不是事后才想到的。它要求在设计应用程序和平台时考虑到扩展性,以便添加资源实际上可以提高性能,或者如果引入冗余,则不会对系统性能造成不利影响。如果请求率增加,数据集增加或分布式系统中的节点数增加,则许多在低负载和较小数据集下表现良好的算法可能会导致成本激增。

第二个问题领域是,通过横向扩展来扩展系统通常会导致系统必须具有异质性。随着下一代硬件的上线,更大或更强大的资源变得更具成本效益或将某些资源分开放置时,系统中的资源多样性也随之增加。异构性意味着系统中的某些节点将比其他节点能够更快地处理或存储更多数据,而依赖于一致性的算法在这些情况下可能会崩溃,或者对新资源的利用不足。

是否有可能实现良好的可伸缩性?绝对可以,但前提是我们在设计和设计系统时要考虑可伸缩性。对于我们构建的系统,我们必须仔细检查我们希望系统沿着哪个轴增长,需要冗余的地方以及应该如何处理该系统中的异构性,并确保架构师知道他们可以在哪种工具下使用哪些工具。条件,以及常见的陷阱是什么。

 

 

 

 

 

你可能感兴趣的:(系统设计,软件设计)