如何以可扩展的方式部署[Ruby on Rails]站点?

时间:2010-10-01 15:35:16

标签: ruby-on-rails scalability linode

我已经在我的[第一个]创业公司工作了一个月,虽然它可能距离alpha版本还有一个月之后,但我想知道如何以正确的方式部署它。该站点将为新用户提供初始高负载(网络+ CPU),因此我考虑为此初始进程设置单独的服务器/队列,以便它不会减慢现有用户的站点速度。

根据我目前的研究,我目前倾向于nginx + haproxy + unicorn / thin + memcached + mysql,并在Linode上进行部署。但是,我之前没有任何经验;因此,我希望能够挖掘社区的经验。

  • 上述架构是否合理?你会推荐任何建议/文章/书籍?
  • Linode是个不错的选择吗? Heroku / EY对我来说似乎太贵了(至少我有足够的收入),但是我错过了其他更好的选择吗? MEDIATEMPLE?
  • 有关负载均衡架构的任何好建议?我还在读这个。
  • 最好在2个独立的linode上有2个独立的Rails服务器实例,或者在容量为2倍的linode上运行1个实例(就RAM /存储/带宽而言)?我应该从多少个Linodes开始?
  • 我应该选择哪种Linux发行版? (Linode提供了8个不同的 - http://www.linode.com/faq.cfm)对于Rails站点,它们之间是否存在相对优势/劣势?

如果我的任何问题都是愚蠢或矛盾,我道歉;请将其归因于我的经验不足。

1 个答案:

答案 0 :(得分:18)

<强>建筑

你走在正确的轨道上。我个人更喜欢Passenger over thin / unicorn(长时间运行nginx到瘦后端)只是为了方便,但你提出的设置是相当标准的。如果您使用的是Ruby 1.8.7,我建议您考虑使用REE + Passenger来节省框架内存。

托管&amp;负载平衡

Linode太棒了,我将它们用于我所能做的一切,但你需要了解RAM的限制。每个Rails进程使用大量的RAM,您将希望避免让机器进行交换。计划在每台机器上运行足够的Rails实例,以便内存分配大约是Linode内存的90%。你可能想要另一个专门用于数据库的Linode,尽管你可以在同一台机器上开始使用它们。随着你的成长,准备分裂MySQL。您可以在专用IP上的同一数据中心内设置Linode之间的通信,这不会计入带宽配额。

你的扩展策略应该尽可能水平,所以我建议你只需要获得第二个Linode,并在你需要更多功能时将它添加到你的haproxy池中 - Linode收取20美元的额外费用为512MB,或者你可以获得同样20美元的整个'nother Linode(带CPU,RAM,HDD和带宽配额)。看起来很简单!)。在Rails的情况下,实例是一个实例是一个实例,所以无论它是否在同一个VM上都无关紧要,只要连接到数据库机器或其他什么的时间或多或少相同。你可以运行10个Linode,每个运行10个Rails进程,没有太多问题。 Linode还提供IP故障转移,因此如果您的主要Linode(使用haproxy)出现故障,它可以自动故障转移到辅助Linode,然后您可以运行haproxy,并准备以与第一个相同的容量运行。

<强>分发

老实说,这取决于你!许多人都使用Ubuntu或Redhat(CentOS / Fedora)发行版 - 我自己喜欢CentOS - 但它实际上只是你觉得最舒服的东西。如果你没有最喜欢的发行版,我会建议尝试使用Ubuntu / CentOS,因为它们对初学者来说往往很友好,并且拥有非常强大的社区支持。

你可能想要选择一个32位的发行版,除非你有一个令人信服的理由选择一个64位的发行版; 64位可执行文件需要比32位可执行文件更多的RAM,并且由于RAM可能是您最宝贵的资源,因此将其保存在尽可能的位置是有意义的。