Rails请求初始化

时间:2008-10-02 04:36:32

标签: ruby-on-rails ruby scalability

我们都听说过Rails中的扩展问题。

我很好奇处理HTTP请求的实际成本是在Rails框架中。意思是,每一个请求都会发生什么?是否有类解析?组态?数据库连接建立?

3 个答案:

答案 0 :(得分:1)

这实际上很大程度上取决于您使用的Web服务器以及您正在使用的配置,更不用说应用程序设计本身了。涉及的配置和设计问题包括:

  • 您是否正在使用fastcgi,old-school cgi或其他一些请求处理机制(影响您是否必须重新运行每个请求的所有应用程序初始化代码)
  • 您是否正在使用memcache(或备用缓存策略)(影响数据库请求的成本)
  • 您是否正在使用其他负载平衡技术
  • 您正在使用哪种会话持久性策略(如果需要)
  • 您是否正在使用“开发”模式,这会导致代码文件在更改时重新加载(我记得;也许只是按请求)或不是

与大多数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。完成此操作后,您可以选择要分析和优化的特定部分。