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

时间:2011-05-19 19:14:52

标签: grails playframework saas web-frameworks multi-tenant

我正在构建一个新的SAAS应用程序,并正在寻找关于最合适的框架的一些建议。我意识到没有一个框架可以做到这一切,但我想我会问社区并试图找到解决最难问题的框架。

要求

  1. 单一代码源。 (每个客户都有一个子域或一个不同的域,但每个人都应该运行相同的代码库和相同的服务器)。
  2. 应该能够更新一次编程源并让所有租户选择
  3. 会话信息应保存在缓存的商店中,或仅保存在cookie中(无共享状态)
  4. 内置多租户数据库功能。(基于用于访问应用程序的域,框架应自动使用分配给该域的数据库连接信息)
  5. 每个客户/域可以拥有自己的网页模板。模板需要基于每个客户分配并保持在应用程序代码之外
  6. 安全性和快速原型制作比速度更重要
  7. 会有很多CRUD类型的屏幕,因此需要简单的内置功能
  8. 我有相当长的Java和PHP经验,但只考虑PHP作为最后的手段。我的Scala,Python和Ruby经验有点生气,但如果它们具有显着的优势,我不介意加快速度。我看过Play!框架和喜欢它(很好地完成#1,#2,#6),但多租户方面不是很强。我已经使用Grails完成了几个项目,除了#3和#5之外,它还可以处理所有内容,并且可以通过黑客攻击来完成其余的工作。

4 个答案:

答案 0 :(得分:3)

我会说,第三点是相当独立于grails / play / what。如果你需要一个共享缓存,那么就有很多提供者,Grails中有大多数提供者。

Grails中的多租户非常成熟,并且比Sebastiens的博客文章中的解决方案更具侵入性。您是否使用单一租赁(多个数据库)或多租户对您的代码或多或少透明,并且大部分令人头疼的问题都被抽象掉了。请注意,您需要进行一些智能索引(比如在多列索引中包含租户ID等),以便在数据开始增长时不会感到非常悲伤。

对于外部化视图,您可以将它们打包在数据库中,也可以将它们符号链接到您的webapp中,并将它们保存在单独的编号文件夹中。然后从租户插件中,您可以使用TenantUtils.getCurrentTenant()并从适当的文件夹"/" + (tenantID ?: "default") + "/whatever/view/path"进行渲染。这样,如果你愿意,可以在租户之间共享布局等,你只需将租户特定的东西放在租户特定的文件夹中。

你也可以在游戏中这样做,或者,但是我没有看到任何阻碍你在Grails中做这件事的事情。

这个问题我的0.02美元。

答案 1 :(得分:1)

实际上玩!适合你想要的东西。

阅读这篇文章: http://www.lunatech-research.com/archives/2011/03/04/play-framework-writing-multitenancy-application-hibernate-filters

效果很好。您甚至可以使这个过滤器工作,以便您可以将crud模块暴露给客户,他们只会获得自己的数据......

对于非常大的应用程序,似乎还不支持分片(我认为没有处理hibernate分片)。 有一个multidb插件可以使用多个数据库,但它似乎还不能很好地工作......

答案 2 :(得分:0)

我听说Grails'Multi-Tenant plugin为多种不同的租赁方法提供了一些很好的工具。

  

“每个客户/域可能都有自己的网页模板。   模板需要基于每个客户进行分配并保留   在应用程序代码之外“

我认为你的意思是他们每个人都有自己的布局/皮肤。有几种技术可以执行此操作:

  • 您可以根据租户手动分配layouts<meta name="layout" content="${tenantName}/main" />

  • 编写您自己的租赁感知LayoutDecoratorMapper并覆盖sitemesh.xml中的默认GrailsLayoutDecoratorMapper

  • 了解如何覆盖和增强某些内部工具动态解析视图(每个租户)或资源(GrailsViewResolver,GrailsConventionGroovyPageLocator,GrailsResourceLoader等)

答案 3 :(得分:0)

在PHP中,您可以使用Innomatic Platform构建多租户(隔离数据库)应用程序: http://www.innomatic.org