2008-10-18 63 views
18

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

+1

伟大的问题。在我读完最后一个问题时,我有这个想法 - 确定你的意思是“它速度有多快?”,但是如果你的意思是可扩展的,就意味着可以扩展PLINQ。 – 2008-10-18 00:25:53

回答

15

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

向上扩展

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

向外扩展

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

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

3

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

从这个意义上说,PLINQ具有可扩展性,因为添加更多内核将使其运行速度更快。

3

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

PLINQ在有些开销有限的情况下(根据他们的一些演示)甚至具有奇特的“超线性”性能。试试看。

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

9

伸缩性意味着在任一这些2个区域来处理生长的能力:

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

2)能够处理越来越大的负载,这可能是Web开发中同时发生多个请求的问题,也可能是一个简单的数据库驱动的网站的大型数据集。你可以创建一个应用程序来处理那些仍然被视为“快速”的数十万行的表吗?

通常对于我来说,可扩展性意味着增长的能力。

+1

我想删除1),它污染了这个词,我不认为很多人会加入它。当然,可维护性通常是可扩展性的一个要求,但我们可以这么说,易用性。 – reinierpost 2011-03-09 11:54:24

1

可扩展性 - 系统使用额外资源实现更高容量或吞吐量的能力。其他资源,如驱动器,内存,网卡,处理器或机器。

我并不直接将可扩展性与功能增长联系起来,但可能无法将功能添加到系统的规模限制。

+0

同意。添加功能与可伸缩性无关。 – user18931 2008-10-18 00:46:36

0

这些天,专门为web应用,但在某些情况下,还为企业应用,横向可扩展性是你想拥有什么,

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

0

可伸缩性意味着我可以将n个资源压入系统,并且它在O(log(n))和O(n log n)之间的空间和时间都会增长。这是不切实际的,但这就是我认为“可扩展”的原因。

6

我不认为可伸缩性使没有上下文的意义的iota。

当我被问到系统的可扩展性时,我需要知道的第一件事是预计其利用率将会增长的方式。它会得到更多的用户吗?现有的用户是否会加重使用它?它的功能将会增长吗?它目前支持变更的交易组合是否会混合?用户体验是否需要更改?

(OK,所以回答所有这些问题通常是“是”,然后在前面加上词“如何”的问题。)

要挑一个不完全是虚构的例子:目前支持非常系统如果数据库管理员每次必须设置新帐户时,必须花费两个小时手动运行从电子邮件中挑选的信息来查询,那么很少用户和其用户群预计会迅速增长的用户会遇到严重的扩展问题。这不是一个可以通过添加更多资源来解决的问题,除非您将DBA添加到要添加的资源列表中(并且有很多原因不能很好地扩展)。

或想象一个社交网站,推出令人兴奋的新功能,您可以看到您的朋友是否在线并通过良好的Ajax-y UI与他们聊天。突然间,没有增加用户群,你的服务器每天处理的HTTP请求数量增加了20倍,并且你对数据库可扩展性的担忧退到了后台。 (当然,除非你已经在你的聊天应用程序中涉及数据库,思考得很好!)

当然,让你的web应用程序成为无状态的,这样你就可以添加web服务器,使网页idempotent,以便你可以添加代理,设计您的应用程序以便您可以跨服务器对数据库进行分区,这些都将使您的应用程序在各个维度上可扩展。这是非常值得考虑的东西。但在开始战斗之前弄清楚你真正的敌人是多么重要。

-1

窝!大字....

我把它定义一个全新的每一个项目,因为它取决于客户想要什么。

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

3

我认为可扩展性可以衡量成本 - 性能曲线的平滑度。也就是说,如果您可以在计算资源上花费一点时间并获得低性能系统,并逐步添加资源,则可以获得比例更高的系统,并且可扩展。如果您必须以昂贵的块来添加资源,为了获得比线性改进更少的效果,它不是可扩展的。