可扩展性对您意味着什么?

时间:2008-10-18 00:19:21

标签: architecture scalability

我发布了similar question有关可扩展linq的信息。关于可伸缩性在最近的一些对话中实际意味着什么,有很多不同的观点,所以它引发了我提出这个问题。可扩展性对您意味着什么?

10 个答案:

答案 0 :(得分:15)

我从两个角度看可扩展性:

向上扩展

如果我在框中添加了更多内存运行的内存,我可以获得多少额外的性能和容量?如果我有一个应用程序可以处理300多个连接,并且当我向服务器添加2 GB RAM时运行速度提高15%而另一个应用程序只能处理100多个连接并运行速度提高5%,那么应用程序A显然更具可扩展性。

向外扩展

现在,如果我在设置中添加更多框,我可以获得多少额外的性能和容量?我可以设置Web前端来处理更多客户端流量吗?如果是这样,是否有线性增长?如果我添加3个盒子,我可以让3倍以上的用户访问我的网站吗?我可以添加更多数据库来分发数据负载吗?我可以扩展多线程吗?如果我可以轻松地将一台机器添加到我的网络中以增加我的应用程序的容量,那么它是可扩展的。

顺便说一下,这是n层的主要驱动器之一。

答案 1 :(得分:9)

可扩展性意味着能够在以下两个领域中处理增长:

1)易于添加新功能,修复错误。为了让代码做这些新事物有多难?虽然这在某些方面可能是可维护性的,但这也是您是否可以构建代码以轻松处理更大规模的问题。

2)能够处理越来越大的负载,这可能是Web开发中的多个请求,或者对于简单的数据库驱动的网站,例如更大的数据集。你能创建一个应用程序来处理数十万行仍然被视为“快速”的表吗?

一般来说,可扩展性意味着增长的能力。

答案 2 :(得分:6)

我不认为可扩展性在没有上下文的情况下会变得有意义。

当我被问及系统的可扩展性时,我首先要知道的是它的利用率预计会增长的方式。是否会有更多用户?现有用户会更加重视它吗?它的功能集会增长吗?它目前支持的交易组合会改变吗?用户体验是否需要改变?

(好的,所有这些问题的答案通常都是“是”;然后在这些问题前加上“如何”这个词。)

选择一个并非完全虚构的示例:如果DBA必须花费两个小时手动运行来自选择的信息的查询,那么当前支持极少数用户并且其用户群预计会快速增长的系统会出现严重的扩展问题每次他必须设置新帐户时都会收到电子邮件。这不是一个可以通过添加更多资源来修复的问题,除非你在要添加的资源列表中包含DBA(并且有很多原因不能很好地扩展)。

或者设想一个社交网站推出令人兴奋的新功能,如果您的朋友在线并通过一个漂亮的Ajax-y UI与他们聊天,您可以看到它。突然之间,在没有增加用户群的情况下,服务器每天处理的HTTP请求数量增加了20倍,而您对数据库可扩展性的担忧也会逐渐消退。 (当然,除非你在聊天应用程序中涉及数据库。好好思考!)

当然,让您的网络应用无状态,以便您可以添加网络服务器,使网页具有幂等性,以便您可以添加代理,设计应用程序,以便您可以跨服务器对数据库进行分区,这些都将使您的应用程序可扩展的各种方面。非常值得思考这些东西。但是,在你开始战斗之前弄清楚你的真正敌人是多么重要。

答案 3 :(得分:3)

我回答这个问题好像你的意思很快,但那是因为我不想成为一个混蛋:) - 意思是,我不想开始讨论什么是可扩展的意思。我认为可扩展性为:向系统添加资源可以提高其性能。

从这个意义上说,PLINQ是可扩展的,因为添加更多内核将使其运行更快。

答案 4 :(得分:3)

只是添加到@Lou Franco的帖子。

PLINQ甚至在某些场景中具有奇特的“超级线性”性能,但开销有限(根据他们的一些演示)。尝试一下。

如果您是C ++人员,Microsoft还希望发布并发功能,这些功能显然没有与之相关的运行时成本,以及其他基于任务的并发工具,可以帮助您更好地调用。

答案 5 :(得分:3)

我认为可扩展性是衡量成本 - 性能曲线平滑度的指标。

也就是说,如果您可以花一点时间计算资源并获得一个低性能系统,并逐步添加资源,您可以获得一个比例更好的系统,它是可扩展的。如果你必须在昂贵的块中添加资源,要获得不到线性的改进,它就不可扩展。

答案 6 :(得分:1)

可伸缩性 - 系统使用其他资源来提高容量或吞吐量的能力。其他资源,如驱动器,内存,网卡,处理器或机器。

我并不直接将可伸缩性与功能增长相关联,但可能无法在规模限制下向系统添加功能。

答案 7 :(得分:0)

这些天特别针对webapps,但在某些情况下也适用于企业应用程序,水平可伸缩性就是你想要的,

我可以通过添加更多商品硬件来处理更多(流量,数据,处理)吗?甚至使用“云服务器”亚马逊ec2,谷歌应用程序引擎和类似?

答案 8 :(得分:0)

可扩展意味着我可以将资源塞入系统,并且它将在O(log(n))和O(n log n)之间的空间和时间上增长。这有点不切实际,但这就是我对“可扩展”的看法。

答案 9 :(得分:-1)

哇!,大字......

我将每个项目定义为一个新项目,因为它取决于客户想要的内容。

可扩展性并不总是增加处理/存储容量,但也可以包括许多输入和许多输出的支持。