多租户/多模板SAAS应用程序最合适的Web框架

|| 我正在构建一个新的SAAS应用程序,并正在寻找有关最适合使用框架的建议。我意识到没有一个单一的框架可能会完成所有这些工作,但是我想我会问社区并尝试找到解决最棘手问题的框架。 要求 单一代码源。 (每个客户都有一个子域或一个不同的域,但是每个人都应该在相同的代码库和相同的服务器上运行) 应该能够一次更新编程源并让所有租户都可以接收 会话信息应保存在缓存存储区中,或仅保存在cookie中(无共享状态) 内置的多租户数据库功能。(基于用于访问应用程序的域,框架应自动使用分配给该域的数据库连接信息) 每个客户/域可能都有自己的网页模板。模板需要基于每个客户进行分配,并且不包含在应用程序代码中 安全性和快速成型比速度更重要 将会有很多CRUD类型的屏幕,因此需要简单的内置功能 我有相当长的Java和PHP经验,但是只会将PHP作为此方法的最后选择。我在Scala,Python和Ruby方面的经验有点生锈,但是如果它们提供了明显的优势,我不介意加快速度。我看了看Play!框架等(很好地实现了#1,#2,#6),但是多租户方面不是很强大。我已经使用Grails完成了多个项目,它可以处理除#3和#5以外的所有内容,并且可以利用它来做其余的工作。     
已邀请:

bab

我要说的是,第三点与grails / play /大体上无关。如果您需要共享缓存,则可以使用许多提供程序,而Grails中的大多数提供程序都有插件。 Grails中的多租户已经相当成熟,并且比Sebastiens答案中的博客文章的解决方案更具侵入性。无论您使用单一租户(多个数据库)还是使用多租户,对您的代码都或多或少是透明的,并且大多数麻烦都被抽象化了。请注意,您需要进行一些智能索引编制(例如在多列索引中包含租户ID等),以在数据开始增长时不会出现令人沮丧的速度。 至于外部视图,您可以将它们拍打在数据库中,也可以将它们符号链接到您的Web应用程序中,而只需将它们保存在单独编号的文件夹中即可。然后从承租人插件中,您可以使用
TenantUtils.getCurrentTenant()
并从适当的文件夹
\"/\" + (tenantID ?: \"default\") + \"/whatever/view/path\"
中进行渲染。这样,您就可以在租户之间共享布局等信息,而您只需将租户特定的内容放到租户特定的文件夹中即可。 您可能也可以在游戏中进行此操作,或者,但是在Grails中,我看不到任何阻碍您执行此操作的事情。 我在这个问题上的$ 0.02。     
居然玩!非常适合您要寻找的东西。 阅读这篇文章: http://www.lunatech-research.com/archives/2011/03/04/play-framework-writing-multitenancy-application-hibernate-filters 效果很好。您甚至可以使此过滤器起作用,以便可以将crud模块暴露给客户,而客户只会得到他们自己的数据... 对于非常大的应用程序,似乎尚不支持分片(我认为还没有休眠的分片)。 有一个multidb插件可以与多个数据库一起使用,但是似乎还不能很好地工作...     
我听说Grails的Multi-Tenant插件为几种不同的多租户方法提供了很好的工具。   \“每个客户/域可能都有自己的网页模板。   模板需要根据每个客户分配并保存   在应用程序代码之外” 我认为您的意思是他们每个人都有自己的布局/皮肤。有几种技术可以执行此操作: 您可以根据租户手动分配布局。
<meta name=\"layout\" content=\"${tenantName}/main\" />
编写自己的租约感知LayoutDecoratorMapper并在sitemesh.xml中覆盖默认的GrailsLayoutDecoratorMapper 弄清楚如何覆盖和增强一些内部工具来动态解析视图(每个租户)或资源(GrailsViewResolver,GrailsConventionGroovyPageLocator,GrailsResourceLoader等)。     
在PHP中,您可以使用Innomatic Platform来构建多租户(隔离数据库)应用程序: http://www.innomatic.org     

要回复问题请先登录注册