我们都听说过Rails中的扩展问题。
我很好奇处理HTTP请求的实际成本是在Rails框架中。意思是,每一个请求都会发生什么?是否有类解析?组态?数据库连接建立?
答案 0 :(得分:1)
这实际上很大程度上取决于您使用的Web服务器以及您正在使用的配置,更不用说应用程序设计本身了。涉及的配置和设计问题包括:
与大多数Web应用程序框架一样,有连接池,缓存和进程管理的解决方案。有很多方法可以管理数据库访问;通常的,默认的并不一定是最高性能,但调整这种策略并不是火箭科学。
更深入挖掘内部结构的人可能会更详细地说出来,但是大多数应用程序使用Apache上的FastCGI或者使用其他更友好的网络服务器,这意味着每个进程只需要设置一次应用程序。
答案 1 :(得分:0)
在发布Phusion Passenger(aka mod_rails)之前,部署的“标准”不是FastCGI,而是使用Apache和mod_proxy(或Nginx等)前面的Mongrel服务器集群。
“Rails无法扩展”背后的主要问题是,存在一些相当复杂的线程问题,这意味着当前版本的Ruby和可用的服务机制,Rails并不是线程安全的。这意味着需要多个容器来运行Rails应用程序以支持高级别的并发请求。 Passenger在内部处理所有这些问题时会有一些这样的问题,也可以在Ruby(Ruby Enterprise Edition)的自定义版本上运行,这会改变内存的处理方式。
除此之外,即将推出的Ruby和Rails版本都直接解决了线程问题,应该一劳永逸地关闭这个参数。
就我而言,整个说法都是虚假的。 “规模”是一个建筑问题。
答案 2 :(得分:0)
这是一个很好的高级overview of the lifecycle of a Rails request。完成此操作后,您可以选择要分析和优化的特定部分。