Architecture 可伸缩性对您意味着什么?

Architecture 可伸缩性对您意味着什么?,architecture,scalability,Architecture,Scalability,我发布了一篇关于linq的可伸缩性的文章。在最近的一些对话中,对于可伸缩性到底意味着什么,有很多不同的观点,所以这也激发了我提出这个问题。可伸缩性对你意味着什么?我回答这个问题时,好像你是说快速,但那是因为我不想成为一个混蛋:)--意思是,我不想开始讨论可伸缩性意味着什么。我认为可伸缩性是:向系统添加资源可以提高其性能 从这个意义上说,PLINQ是可扩展的,因为添加更多的内核将使其运行更快。只需添加到@Lou Franco的帖子中即可 PLINQ甚至在一些开销有限的场景中具有反常的“超线性”性能

我发布了一篇关于linq的可伸缩性的文章。在最近的一些对话中,对于可伸缩性到底意味着什么,有很多不同的观点,所以这也激发了我提出这个问题。可伸缩性对你意味着什么?

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


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

只需添加到@Lou Franco的帖子中即可

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


如果你是C++的家伙,微软也在寻找释放与它们相关联的运行时成本的并发特性和额外的基于任务的并发工具来帮助你更好地调用。

< P.伸缩性是指处理这2个领域中的任一个方面的能力:

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

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


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

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


我不会直接将可伸缩性与功能增长联系起来,尽管在系统的扩展极限下添加功能可能是不可能的。

我从两个角度来看待可伸缩性:

放大

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

向外扩展

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


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

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


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

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

如果没有上下文,我认为可伸缩性没有任何意义

当我被问及系统的可伸缩性时,我需要知道的第一件事是预期其利用率增长的方式。它会吸引更多的用户吗?现有用户会更多地使用它吗?它的功能集会增长吗?目前支持的交易组合是否会发生变化?用户体验是否需要改变

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

举一个不完全是虚构的例子:一个目前支持很少用户的系统,其用户群预计将快速增长,如果DBA每次必须建立一个新帐户时都必须花两个小时手动运行从电子邮件中提取的信息的查询,那么该系统将面临严重的扩展问题。这不是一个可以通过添加更多资源来解决的问题,除非您将DBA包括在要添加的资源列表中(有很多原因无法很好地扩展)

或者想象一个社交网站推出了令人兴奋的新功能,如果你的朋友在线,你可以通过一个漂亮的Ajax-y用户界面与他们聊天。突然之间,由于用户基数没有增加,服务器每天处理的HTTP请求数量增加了20倍,而您对数据库可伸缩性的担忧也随之消失。(当然,除非您在聊天应用程序中使用了数据库。好主意!)

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

哇!,大字

我对每个项目都有一个新的定义,因为它取决于客户想要什么


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

我认为可伸缩性是衡量性价比曲线平滑度的一个指标

也就是说,如果你能在计算资源上花一点钱,得到一个低性能的系统,