我正在计划一个基于Web的CRM应用程序。
目标用户将是拥有数百个客户的小公司。我计划使用Rails框架和Rackspace Cloud Server / Amazon EC2进行托管。
由于数据是保密的,我宁愿不为所有用户使用单个数据库。这是否意味着我必须使用单独的数据库为每个客户端启动我的rails应用程序的新实例,每个应用程序绑定到子域?或者有解决方法吗?
另一个问题。如果我必须为每个客户端创建一个新的rails应用实例,那么EC2 [大约2GB RAM,2GHz CPU]的大小实例可以支持多少个实例? [每天每个实例100次读/写操作]。
答案 0 :(得分:2)
这不是Rails特有的,但你真的应该阅读multitenancy,这是我为你的应用推荐的模式。您可以维护一个知道它支持多个客户端的实例,而不是为每个客户端维护代码实例。我没有看过它,但我能够在Ruby / Rails中编写多租户应用程序conference talk。您可以在此问题的答案中找到更多信息:Any thoughts on Multi-tenant versus Multi-database apps in Rails
答案 1 :(得分:1)
首先,就框架而言,使用对你来说最简单的生活,对我而言,Rails就是门票。
我不建议每个客户端创建单独的数据库/ rails实例。通过良好的授权,正如我所期望的那样,您可以使用您所描述的应用程序,可以防止所有访问未经授权的项目而不会有太多麻烦。
同时运行许多Rails实例会“堵塞”你的系统,主要是资源浪费。
一个大小合适的EC2应该能够支持你的应用程序,但它实际上取决于代码的运行成本(在cpu时间内),以及查询的成本。这不是我们可以提供真正准确估计的东西。
答案 2 :(得分:1)
SAAS世界中的大多数多租户应用程序似乎使用唯一标识符(客户端或帐户ID)在单个数据库上运行,以保持数据分离。代码非常简单并且有效。您可以为部署过程创建测试和审核,以确保数据保持私有。
但是,我还建议看一下Postgresql架构。使用模式,您可以将单个数据库“拆分”为具有受控访问权限的多个唯一模式。
此处有更多详情:Should I use multiple databases?。
关于实例数量的问题的第二部分 - 它实际上取决于应用程序本身以及它使用了多少RAM。每天100次读/写操作非常小,无关紧要,因此RAM是操作因素。 “普通”Rails应用程序将使用每个实例20-100mb的任何内容,因此2GB服务器应该能够运行不少。当然,您的部署将变得非常复杂,因为您需要在虚拟主机环境中运行才能有效地进行此设置。
我的投票绝对适用于单个应用。