2011-05-19 84 views
4

我正在构建一个新的SAAS应用程序,并且正在寻找一些关于最适合使用的框架的建议。我意识到,没有任何一个框架可能能够做到这一点,但我想我会问社区,并试图找到解决最难的问题。最适合多租户/多模板SAAS应用的Web框架

要求

  1. 单码源。 (每个客户都会有任何一个子域,或者一个不同的领域,但每个人都应该是逃跑相同的代码库和相同的服务器)
  2. 应该可以更新一次节目源,并有所有租户把它捡起来
  3. 会话信息应该保存在缓存存储中,或者只保存在cookie中(无共享状态)
  4. 内置多租户数据库功能(基于用于到达应用的域,框架应自动使用数据库分配给该域的连接信息)
  5. 每个客户/域可能都有自己的网页模板。模板需要在每个用户为基础分配,并保持应用程序代码之外
  6. 安全和快速原型是比速度更重要
  7. 将有大量的CRUD类型的画面,从而简单的内置的功能,这是想要的

我有相当长的Java和PHP的经验,但只会考虑PHP作为最后的手段。我的斯卡拉,Python和Ruby的体验有点rust,,但如果它们提供了显着的优势,我不介意提速。我看过这个游戏!框架和喜欢它(很好地满足#1,#2,#6),但多租户方面不是很强。我已经使用Grails完成了几个项目,它处理除#3和#5之外的所有内容,并且可以被黑客攻破。

+0

[什么是SaaS?](http://izlooite.blogspot.com/2009/05/what-is-saas.html) – 2011-06-10 12:23:12

+0

我不知道我是否正确理解#3。 javax.servlet.http.HttpSession对此有什么错误? – 2012-02-12 18:31:11

回答

1

其实玩!非常适合你要找的东西。

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

它的伟大工程。你甚至可以让这个过滤器的工作,这样就可以露出CRUD模块的客户,他们将只能得到自己的数据...

对于非常大的应用程序,分片似乎还不支持(无休眠碎片尚未处理的我认为)。 有一个多分贝插件与多个分贝工作,但它似乎不工作得很好......

+0

感谢您的链接!就是我一直在寻找的东西。 – Flukey 2012-01-31 16:47:44

3

我会说,第三点是相当独立于grails/play /任何一般。如果你需要一个共享缓存,这里有很多提供者,并且Grails中的大多数插件都是插件。

Grails中的多租户相当成熟,并且比Sebastiens的博客解答中的解决方案少得多。无论您是使用单租户(多个数据库)还是多租户,您的代码都或多或少都是透明的,大部分头痛都会被抽象出来。请注意,您需要做一些智能索引(例如在多列索引中包含租户ID),以便在数据开始增长时不会感到非常悲伤的速度。

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

你也可以在游戏中做到这一点,或者,但是我没有看到阻碍你在Grails中完成这项工作的任何事情。

我对这个问题的$ 0.02。

0

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

“每个客户/域可以有自己的模板网页。 模板需要分配在每个客户的基础上,保持 应用程序代码之外的”

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

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

  • 写自己的租赁知道LayoutDecoratorMapper和覆盖默认GrailsLayoutDecoratorMapper在sitemesh.xml

  • 图如何覆盖和提高一些内部工具动态解析(每租户)的意见或资源(GrailsViewResolver,GrailsConventionGroovyPageLocator, GrailsResourceLoader等)