我应该为基于Web的CRM应用选择哪种架构?

时间:2010-06-27 10:18:18

标签: ruby-on-rails architecture web-applications

我正在计划一个基于Web的CRM应用程序。

目标用户将是拥有数百个客户的小公司。我计划使用Rails框架和Rackspace Cloud Server / Amazon EC2进行托管。

由于数据是保密的,我宁愿不为所有用户使用单个数据库。这是否意味着我必须使用单独的数据库为每个客户端启动我的rails应用程序的新实例,每个应用程序绑定到子域?或者有解决方法吗?

另一个问题。如果我必须为每个客户端创建一个新的rails应用实例,那么EC2 [大约2GB RAM,2GHz CPU]的大小实例可以支持多少个实例? [每天每个实例100次读/写操作]。

3 个答案:

答案 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服务器应该能够运行不少。当然,您的部署将变得非常复杂,因为您需要在虚拟主机环境中运行才能有效地进行此设置。

我的投票绝对适用于单个应用。