互联网的可扩展性

11

我和一些大学的朋友们一直在争论,我们无法得出哪种框架对于Web应用具有更高的扩展性(同时速度也很快)。

其中一个人支持jsp,另一个人支持ruby,还有人支持php等等。我能否请您澄清一下哪个框架具有更大的可扩展潜力?

谢谢,希望我没有重复之前的问题,如果您能对此进行比较就更好了 :)


由于您没有比较基础,因此没有答案。这个可扩展性与内存、点击数、事务数、会话数有关吗?您试图扩展的是什么度量? - S.Lott
1
会话 :) 同时使用它的用户数量 - fmsf
12个回答

24

Ruby和PHP不是Web应用程序框架。它们是流行的用于Web开发的编程语言。

一般而言,Web应用程序的可扩展性并不是编程语言的特性,给定的Web应用程序框架最多只能避免阻碍可扩展性。良好的可扩展性更多地取决于应用程序设计。

有太多的Web应用程序框架存在了,如果进行逐点比较,那么这样的比较就会变成百科全书式的内容。

此外,您可以通过多种方式解决给定应用程序的可扩展性问题。其中一种方法是具有明确定义和狭窄的范围,并旨在实现出色的原始性能,以便单台计算机可以处理大量工作单元。其最佳示例是Mailinator

另一种方法是通过“仅”添加更多硬件来更轻松地处理增加的负载。几乎任何基于数据库的Web应用程序框架都可以通过这种方式进行扩展:只需在负载均衡器和共享数据库后端之间添加更多应用程序服务器即可。如果您将问题定义为此方式,则主要关注的是设计应用程序以最小化1.数据库争用2.数据库负载。

最后一种方法是将系统设计为从头到尾都是非常并行的。谷歌是主要的例子。

总之:语言或框架不能使应用程序具有可扩展性,软件架构师可以实现。

编辑:要明确的是,我的答案关注的是可扩展性,即在不更改设计的情况下处理增加的负载的能力。这是与执行速度不同的属性。


1
一些微小的分歧,“编程语言或框架不能决定应用程序是否具有可扩展性……”它们需要一些东西作为基础。流行的框架得到良好支持,因此更容易进行扩展。我同意设计师需要善加利用它们。并行算法和硬件都有它们的作用。 - questzen

4
算法对可伸缩性的影响比所使用的编程语言更为重要。
话虽如此,不同编程语言之间的执行速度存在差异。我认为Java(Servlets和JSP编译成Servlets,即本地代码)会比Ruby和PHP快一些。此外,Java还有大量的Web框架,可以鼓励你以最佳方式实现可伸缩性。
同时,设计你的应用程序,使其能够在负载均衡器后面顺畅运行,这样可伸缩性就变得更加容易 :) 但这并非我的专业领域。

3

3

您还可以查看 "什么更快?PHP vs ASP vs JSP vs CGI等"

我认为Java / Java EE是唯一从头开始设计用于开发分布式/集群应用程序并鼓励通过规范(EJB,JTA ...)实现良好实践的“框架”。

但像往常一样,这取决于情况。 这种类型的问题往往会引发争论:)


1
EJB = 委员会设计的无意义之物,绝非任何意义上的“最佳实践”。 :) - gbjbaanb
我同意,但无论如何它都被设计成允许应用程序组件的分发...可以说是“Sun公司的最佳实践”;) - Guido

3

Web框架的可扩展性是一个有点过于考虑的问题(一些人会说这是竞争性表现)。除非你能获得大量资金(这些天祝你好运),并且可以确保每天有数百万的访问量,所有这些框架都可以很好地处理它(ASP.NET也可以)。

个人而言,我总是会选择ASP.NET。它和任何东西一样具有可扩展性,并且拥有最好的开发工具。唯一的缺点是托管和操作系统成本。


2

我不确定你提到的那些框架会严重影响可伸缩性。

这完全取决于实现方式。

我建议先集中精力让你的Web应用程序运行良好,然后在出现问题时再考虑可伸缩性。换句话说,“让我们等到真正需要时再解决这个问题。”


2

A: 使用C ISAPI dll(或自定义Apache模块) :)

即使如此,Web服务器的开销、解析HTTP请求和提供HTML页面也会使您的应用程序执行时间几乎无关紧要。如果将应用程序作为CGI应用程序运行,则预计性能会更低。

对于Web的可扩展性,您真正需要考虑的是添加更多服务器和负载平衡,通过将数据库(如果使用频繁)放在单独的服务器上来卸载服务器的负载。

那些语言的原始性能几乎不值得担心。使用您想要使用并且最具生产力的语言。担心你遇到的其他问题-网络IO、安全性、正确性。


1
我偶然看到这个问题,并注意到有些人谈论速度,有些人谈论可扩展性。我写了一篇博客文章来解释它们的区别:

http://www.fransekman.com/scalability-or-performance-what-do-you-mean/

"高可扩展性的网站是指当负载增加时,可以通过增加容量来维持其性能水平。这可以在任何编程语言和几乎任何框架中实现。一些框架具有内置功能,可能使某些常见的可扩展性问题更快地实现。"

1

已经有几个好观点了。我的主要观点是:一个精通Python的人可能会比使用Java更能编写可扩展的代码。而且有许多大型网站使用您提到的所有技术,因此我认为没有任何重大优势。

在大多数情况下,除非有真正重要的原因选择另一种方式,否则应坚持自己熟悉的技术。


0

如果你想知道主要网站如何使用LAMP实现可扩展性,那么你应该看一下数据库分片


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接