7

我想这个问题已经被问了很多。我知道Rails 可以扩展,因为我一直在研究它,而且它很棒。就 PHP 框架而言,这一点毫无疑问。

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

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

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

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

4

3 回答 3

5

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

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

当然,不同的页面可能有不同的费用;对于某些人,您可以使用缓存,但对于其他人则不行。因此,在衡量可扩展性时,将您的 100 万次访问分成便宜和昂贵的页面,并分别衡量它们。它们应该一起很好地估计您的系统可以承受的负载(或您需要满足需求的系统数量)。

还有内存使用的问题。如果您有 SQL 中的数据,这应该无关紧要 - 但对于缓存,您可能还需要考虑可伸缩性 wrt。主内存使用。

于 2009-07-22T05:27:53.637 回答
4

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

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

如果您需要内存缓存,您至少要使用 memcached(或与所有三种语言交互的类似工具)。也许您使用 nginx 直接从 memcache 提供服务来帮助您的可扩展性,但这显然不会改变 php/perl/python/ruby 的性能。

如果您使用 MySQL 或 Postgresql,无论您的应用程序语言如何,您仍然必须正确设计数据库以进行扩展,并且您用于启动集群/镜像的任何工具都将在您的应用程序之外。

我认为就内存使用而言,Python(使用 mod_wsgi 守护进程模式)和 Ruby(使用乘客/mod_rack 的企业 ruby​​)至少与 fcgi 下的 PHP 相当,并且可能比 mod_php 下的 PHP 更好(即 apache MPM prefork + php in所有的 apache 进程都会占用大量内存)。

这个问题可能很有趣的地方是尝试将这 3 种语言与 Erlang 之类的语言进行比较,在这些语言中,您(据说)在所有 Erlang 进程中自动具有廉价的内置可伸缩性,但即便如此,除非您的应用程序很好,否则您将遇到 RDBMS 数据库瓶颈适合 Erlang 数据库的一种处理方式,例如 couchdb。

于 2009-07-22T06:16:17.470 回答
1

Unfortunately, I do not know any cost comparison of Rails, PHP and Django. But I do know a cost comparison of some Java Web Frameworks: Spring(9k$), Wicket(59k$) , GWT(6k$) and JSF(49k$).

You have the original conference here:

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

There you have a post about it(shorter):

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

If you want to try to infere about this cost. You could cross this data with the bencharmk proposed by Techempower:

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

So, if you know Spring is pretty cheap compare to Wicket and Django/Rails have worse marks in benchmarks than Wicket and Spring, it probably means they will represent a higher cost.

Hope it helps.

于 2013-09-04T19:55:08.007 回答