网络上的可扩展性
Posted
技术标签:
【中文标题】网络上的可扩展性【英文标题】:Scalability on the web 【发布时间】:2010-09-18 09:19:15 【问题描述】:我一直在和大学里的一些朋友争论,我们无法确定哪个框架对 Web 应用程序具有更高的可扩展性(并且仍然非常快)。
一个调用jsp,另一个调用ruby,另一个调用php,以此类推。我能否请您澄清一下什么是更具可扩展性的潜力?
Tks,希望我没有重复我搜索过的任何内容,但没有找到任何以前的类似问题。
编辑:如果您可以对此进行比较,那就太好了:)
【问题讨论】:
由于你没有任何比较的依据,所以没有答案。这在内存、命中数、事务数、会话数方面是否可扩展?您要扩展的度量是什么? sessions :) 同时使用它的用户数 【参考方案1】:我碰巧遇到了这个问题,并注意到有些人谈论速度,其他人谈论可扩展性。我写了一篇博文来解释其中的区别:
http://www.fransekman.com/scalability-or-performance-what-do-you-mean/
“高扩展性网站是一个网站,当负载增加时,可以通过增加更多容量来维持其性能水平”。这可以在任何编程语言和几乎任何框架中实现。一些框架具有内置功能,这可能会使一些常见的可伸缩性事物更快地实现。
【讨论】:
【参考方案2】:你也可以看看“What’s faster? PHP vs ASP vs JSP vs CGI etc”
我认为 Java/Java EE 是唯一从头开始设计用于开发分布式/集群应用程序的“框架”,它鼓励通过规范(EJB、JTA...)实现它的良好实践。
但像往常一样,这取决于。这类问题往往会引发战争:)
【讨论】:
EJB = 委员会设计的废话,无论如何都不是“最佳实践”。 :) 我同意,但无论如何它的设计目的是允许分发应用程序组件......让我们说“从 Sun 的角度来看的良好做法”;)【参考方案3】:(五年后……)
我发现这篇博客文章对多种语言相关的 Web 框架进行了基准测试。现在这几乎回答了我在 2008 年提出的问题。
http://www.techempower.com/blog/2013/03/28/framework-benchmarks/
【讨论】:
【参考方案4】:与您网站的架构相比,选择 Web 框架对可扩展性(扩展能力)的影响较小。大多数现代 Web 框架都非常适合扩展,因此真正需要注意的是您的部署设置。
【讨论】:
【参考方案5】:如果你想知道各大网站如何使用 LAMP 实现可扩展性,你应该看看database sharding。
【讨论】:
【参考方案6】:Web 框架的可扩展性是一个有点过分思考的问题(有人会说 p155ing 竞赛)。除非您获得巨额资金(这些天祝您好运)并且可以确保每天有数百万的访问者,所有这些框架都可以很好地处理它(ASP.NET 也可以)。
就我个人而言,我总是会选择 ASP.NET。它与任何东西一样可扩展,并拥有最好的开发工具。唯一的缺点是托管和操作系统成本。
【讨论】:
【参考方案7】:已经有几个优点了。我的主要观点是:一个对 python 了如指掌的人可能能够使用 python 编写比使用 Java 更具可扩展性的代码。而且有许多大型网站使用您提到的所有技术,所以我认为这两种方法都没有什么大的优势。
在大多数情况下,您应该坚持自己熟悉的方式,除非有真正重要的理由采取其他方式。
【讨论】:
【参考方案8】:A:C ISAPI dll(或自定义 apache 模块):)
即使这样,Web 服务器的开销、解析 http 请求和提供 html 页面也使您的应用程序的执行时间几乎无关紧要。如果您将应用作为 CGI 应用运行,那么预计性能会更低。
对于网络的可扩展性,您实际上是在谈论添加更多服务器和负载平衡,通过将数据库(如果大量使用)放在单独的服务器上来减轻服务器的负载。
这些语言的原始性能几乎无需担心。使用您想要使用的那个,您将最有效率地使用它。担心您会遇到的其他问题 - 网络 io、安全性、正确性。
【讨论】:
【参考方案9】:我不确定你提到的那些框架是否会严重阻碍可扩展性。
这一切都取决于实现。
我会先集中精力让您的 Web 应用运行良好,然后在出现问题时担心可扩展性。换句话说,“当我们到达那座桥时,让我们越过它”。
【讨论】:
【参考方案10】:Ruby 和 PHP 不是 webapp 框架。它们是流行于 Web 开发的编程语言。
一般来说,webapp 的可扩展性不是编程语言的属性,给定的 webapp 框架最多不会妨碍可扩展性。良好的可扩展性更多是应用程序设计的属性。
有太多的 webapp 框架无法进行逐点比较,这简直是百科全书。
此外,您可以通过多种方式解决给定应用程序的可扩展性问题。一种方法是有一个明确定义和狭窄的范围,并瞄准令人敬畏的原始性能,这样一台机器就可以服务于无数的工作单元。最好的例子是Mailinator。
另一种方法是通过“仅”添加更多硬件来更轻松地服务于不断增加的负载。几乎任何数据库支持的 webapp 框架都可以通过这种方式扩展:只需在负载均衡器和共享数据库后端之间添加更多应用程序服务器。如果您以这种方式解决问题,您主要关心的是设计应用程序以最小化 1. 数据库争用 2. 数据库负载。
最后一种方法是将系统设计为一路疯狂并行。谷歌就是最好的例子。
总而言之:语言或框架不能制作可扩展的应用程序,软件架构师可以。
编辑:明确地说,我的答案是关注可扩展性,即在不改变设计的情况下处理不断增加的负载的能力。这是与执行速度不同的属性。
【讨论】:
一个小分歧,'语言或框架不能制作可扩展的应用程序......'。他们确实需要一些东西来开始。流行的框架得到很好的支持,因此很容易扩展。我同意由设计师来利用它们。并行算法有其作用,硬件也是如此。【参考方案11】:编译型语言通常比解释型语言运行得更快,所以我认为 Ruby 和 PHP 在八球之后起步,但这实际上取决于您如何使用该语言以及如何构建代码。
所有语言都有自己的最佳实践和模式来构建可扩展的应用程序,并且通常会根据提议的应用程序的功能做出妥协。
【讨论】:
【参考方案12】:算法在可扩展性方面比使用的语言更重要。
也就是说,不同语言的执行速度会有差异。我相信 Java(Servlet 和 JSP 编译为 servlet,即本机代码)会比 Ruby 和 PHP 快一些)。还有大量用于 Java 的 Web 框架将鼓励您以最佳方式来实现可伸缩性。
还要设计您的应用程序,使其可以在负载均衡器后面愉快地运行,并且可扩展性变得容易得多:) 然而,这不是我的专业领域。
【讨论】:
以上是关于网络上的可扩展性的主要内容,如果未能解决你的问题,请参考以下文章