Rails、PHP和Python框架的扩展成本比较
我想这个问题已经被问过很多次了。我知道Rails可以扩展,因为我用过它,真的很棒。而且在PHP框架方面,大家对这一点也没有太多疑问。
我并不想知道哪个框架更好。
假设有一个每月有100万次访问的大型应用,扩展Rails和其他框架(比如PHP、Python)之间的成本差别有多大呢?
这是我经常被问到的问题。我可以告诉大家“Rails扩展得很好”,但从长远来看,经济方面又是怎样的呢?
如果有人能提供一些数据,那就太好了。
3 个回答
很遗憾,我不知道Rails、PHP和Django的成本对比。不过,我知道一些Java网页框架的成本对比:Spring大约9000美元,Wicket大约59000美元,GWT大约6000美元,JSF大约49000美元。
你可以在这里找到原始的会议资料:
这里有一篇关于这个话题的简短文章:
http://blog.websitesframeworks.com/2013/03/web-frameworks-benchmarks-192/
如果你想尝试推测这些成本,可以把这些数据和Techempower提供的基准测试数据结合起来:
http://www.techempower.com/benchmarks/
所以,如果你知道Spring相对便宜,而Wicket的表现比Django和Rails要好,那么这可能意味着后者的成本会更高。
希望这些信息对你有帮助。
在我看来,这三种语言在扩展成本上没有什么区别,因为它们都没有“扩展电池”这种东西。我觉得这三者之间没有什么大的架构差异,会导致扩展上的显著不同。
换句话说,无论你用哪种语言,应用程序的架构都会主导应用的扩展方式。
如果你需要内存缓存,至少得用memcached(或者其他类似的工具,它们都能和这三种语言配合使用)。也许你可以通过nginx直接从memcache提供服务来帮助扩展,但这显然不会改变php、perl、python或ruby的性能。
如果你使用MySQL或Postgresql,无论你的应用语言是什么,你仍然需要正确设计数据库以便扩展,而且你用来开始集群或镜像的任何工具都将在你的应用之外。
从内存使用的角度来看,Python(使用mod_wsgi守护进程模式)和Ruby(企业版Ruby与passenger/mod_rack)在内存占用上表现不错,至少和PHP在fcgi下的表现相当,可能还比PHP在mod_php下的表现要好(也就是说,apache MPM prefork + php在所有apache进程中会占用很多内存)。
这个问题可能有趣的地方在于比较这三种语言和像Erlang这样的语言,Erlang据说在所有进程中都有便宜的内置扩展能力,但即便如此,除非你的应用很好地适应Erlang的数据库处理方式,比如couchdb,否则你仍然会遇到关系数据库的瓶颈。
一个主要因素是,选择什么框架并不会影响数据库的访问。无论你采用什么方法,你很可能会把数据放在一个关系型数据库里。接下来要考虑的问题是,你能多快地从数据库中取出数据。这主要取决于你使用的关系型数据库管理系统(RDBMS),比如Oracle、Postgres或MySQL,而不是框架本身——当然,有些数据映射库可能会让SQL的使用效率变低。
对于“访问次数”这个指标,真正的问题是你的HTML模板系统运行得有多快。所以问题是:你每秒能渲染多少个页面?我认为这是判断一个系统扩展能力的主要指标。
当然,不同的页面可能会有不同的成本;有些页面可以使用缓存,而有些则不能。因此,在测量扩展能力时,可以把100万次访问分成便宜的页面和昂贵的页面,分别进行测量。这样加起来,可以很好地估算出你的系统能承受的负载(或者你需要多少个系统来满足需求)。
还有一个问题是内存使用。如果你的数据在SQL中,这通常不会成为问题——但如果使用了缓存,你可能还需要考虑主内存使用的扩展能力。