18

我发布了一个关于 linq 的可扩展性的类似问题。在最近的一些对话中,对于可扩展性的实际含义有很多不同的看法,所以这也激发了我提出这个问题。可扩展性对您意味着什么?

4

10 回答 10

15

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

扩大

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

向外扩展

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

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

于 2008-10-18T00:41:10.923 回答
10

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

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

2) 能够处理越来越大的负载,这可能是 Web 开发中的多个请求,或者是一个简单的数据库驱动网站的更大数据集,例如,您是否可以制作一个应用程序来处理仍然被视为“快的”?

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

于 2008-10-18T00:28:53.740 回答
6

我认为可扩展性在没有上下文的情况下毫无意义。

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

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

举一个不完全虚构的例子:一个系统目前只支持很少的用户,而且它的用户群预计会迅速增长,如果 DBA 必须花费两个小时手动运行从电子邮件消息中挑选出来的信息的查询,那么它就会出现严重的扩展问题。时间他必须建立一个新帐户。这不是可以通过添加更多资源来解决的问题,除非您将 DBA 包括在要添加的资源列表中(并且有很多原因不能很好地扩展)。

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

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

于 2008-10-18T02:55:35.707 回答
3

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

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

于 2008-10-18T00:23:17.153 回答
3

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

PLINQ 甚至在某些开销有限的场景中具有怪异的“超级线性”性能(根据他们的一些演示)。试试看。

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

于 2008-10-18T00:27:03.510 回答
3

我认为可扩展性是衡量性价比曲线平滑度的指标。

也就是说,如果你能在计算资源上花一点点,得到一个低性能的系统,然后逐渐增加资源,你就能得到一个比例更好的系统,它是可扩展的。如果您必须以昂贵的块添加资源,以获得少于线性的改进,那么它是不可扩展的。

于 2008-10-19T15:53:18.943 回答
1

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

我不直接将可扩展性与功能增长联系起来,尽管在系统的规模限制下向系统添加功能可能是不可能的。

于 2008-10-18T00:35:29.937 回答
0

这些天,特别是对于 web 应用程序,但在某些情况下,对于企业应用程序,水平可扩展性是你想要的,

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

于 2008-10-18T01:07:58.250 回答
0

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

于 2008-10-18T02:15:51.480 回答
0

哇!,大字……

我在每个项目中都重新定义它,因为它取决于客户想要什么。

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

于 2008-10-19T15:14:18.430 回答