扩展Rails的成本与扩展PHP与Python框架的成本

时间:2009-07-22 04:07:29

标签: php python ruby-on-rails scaling

我猜这个问题已被问到很多。我知道 Rails可以扩展,因为我已经完成了它并且它很棒。就PHP框架而言,对此毫无疑问。

我不想知道哪个框架更好。

假设一个大型应用程序每月访问量达到100万次,那么扩展Rails与其他框架(PHP,Python)的成本差异有多大?

这是我经常被问到的事情。我可以向人们解释“Rails确实很好地扩展”,但从长远来看,经济学是什么?

如果有人可以提供一些指标,那就太棒了。

3 个答案:

答案 0 :(得分:5)

这方面的一个主要因素是不受框架选择影响的是数据库访问。无论采用何种方法,您都可能将数据放入关系数据库中。那么问题是如何有效地从数据库中获取数据。这主要取决于RDBMS(Oracle vs. Postgres与MySQL),而不是框架 - 除了某些数据映射库可能无法有效地使用SQL。

对于纯粹的“访问次数”参数,问题实际上是HTML模板系统的工作速度。所以问题是:你每秒可以渲染多少页?我会将此作为确定系统扩展程度的主要指标。

当然,不同的页面可能会有不同的成本;对某些人来说,你可以使用缓存,但不能用于其他人。因此,在衡量可扩展性时,将您的100万次访问分成便宜且昂贵的页面,并单独测量它们。它们应该共同估计系统可以承受的负载(或者满足需求所需的系统数量)。

还存在内存使用问题。如果你有SQL中的数据,这应该无关紧要 - 但是对于缓存,你可能还需要考虑可扩展性。主内存使用情况。

答案 1 :(得分:4)

恕我直言我不认为这三者之间的扩展成本会有所不同,因为它们都没有包含“可扩展性电池”。我只是没有看到这三种选择之间存在巨大的架构差异,这会导致缩放的显着差异。

换句话说,无论三种语言中的哪一种,您的应用程序架构都将主导应用程序的扩展。

如果你需要内存缓存,你至少要使用memcached(或类似的东西,它将与所有三种语言交互)。也许你使用nginx直接从memcache服务来帮助你的可伸缩性,但这显然不会改变php / perl / python / ruby​​的性能。

如果您使用MySQL或Postgresql,您仍然需要正确设计数据库以进行扩展,而不管您的应用语言是什么,并且您用于启动群集/镜像的任何工具都将在您的应用之外。

我认为在内存使用方面,Python(使用mod_wsgi守护程序模式)和Ruby(带有passenger / mod_rack的企业ruby)具有相当不错的足迹,至少可以与fcgi下的PHP相媲美,并且可能比mod_php下的PHP更好(即apache MPM prefork所有apache进程中的+ php都会占用大量内存。)

这个问题可能有趣的地方是尝试比较这三种语言与Erlang之类的东西,你可以在所有Erlang进程中自动拥有廉价的内置可伸缩性,但即使这样,你也会有一个RDBMS数据库瓶颈,除非你的应用程序非常适合Erlang数据库的一种做事方式,例如CouchDB的。

答案 2 :(得分:1)

不幸的是,我不知道Rails,PHP和Django的任何成本比较。但我确实知道一些Java Web框架的成本比较:Spring(9k $),Wicket(59k $),GWT(6k $)和JSF(49k $)。

你在这里有原始会议:

http://www.devoxx.com/display/DV11/WWW++World+Wide+Wait++A+Performance+Comparison+of+Java+Web+Frameworks

你有一篇关于它的帖子(更短):

http://blog.websitesframeworks.com/2013/03/web-frameworks-benchmarks-192/

如果您想尝试推断此费用。您可以使用Techempower提出的bencharmk交叉此数据:

http://www.techempower.com/benchmarks/

所以,如果你知道Spring与Wicket相比相当便宜,而Django / Rails在基准测试中的分数比Wicket和Spring更差,这可能意味着它们将代表更高的成本。

希望它有所帮助。