扩展Ruby on Rails站点

时间:2010-08-04 22:23:01

标签: ruby-on-rails linux scalability cluster-computing grid-computing

我正在开发Ruby On Rails应用程序,并希望在生产环境中进行部署。我有多个配置相同的Ubuntu Web服务器我可以使用,但我不知道如何跨多个主机扩展RoR应用程序和数据库数据。

我想在每台主机上安装Web服务器和数据库服务器。

在Web服务器/ ruby​​中间件方面,我希望会话由主Web服务器控制,该服务器在Web服务器/ ruby​​中间件层上进行负载平衡。它应该将新会话交给免费主机。

我需要在Web服务器/ ruby​​中间件方面实现负载均衡。 Web /中间件会话应该是原子的(我不想在多个主机上复制它们)

我希望将未保存到数据库的事务数据记录到中间重做日志 - 以便在故障恢复时重新运行。

在数据库层:

我希望将任何一台主机上的数据库数据复制到其他2台主机上。 (每个数据库集有3个DB主机)

我不希望在所有主机上复制数据库数据,因为它需要太长时间 - 延迟。

我想制定一个算法,将“创建”类型的请求指向正确的数据库。想到负载平衡。

数据库主控制器应该知道要更新/读取/删除请求的3-DB集。

我的测试Web服务器是webrick,后端数据库是Postgresql(尽管这与RoR无关)。

我认为我需要将sessionId绑定到每个事务,并且还要保留重做日志,以防我在失败后需要重新加载该会话。

我可能会遇到哪些其他设计问题?此外,我应该使用什么Web服务器和数据库服务器来执行繁琐的工作?主DB和主Web服务器有哪些好的选择?

我知道这是一个跨越多个知识领域的复杂问题。我想知道我问的是否可能。

1 个答案:

答案 0 :(得分:2)

在我上一份工作中,我们对以下基础设施运气良好:

1负载均衡器-nginx

3个app server -thin

2个具有冗余写入功能的mysql服务器

2个备份框

目前,我们在该环境中运行了4个非常大且关键任务的应用程序。我们有两个应用程序服务器来处理第五个应用程序。

如果您需要更多,那么heroku可能是投资回报率更好的选择。显然,即使对于较小的扩展问题,heroku也是一个更好的选择,你在上述计划中的系统管理员中有一个噩梦。