我正在构建一个新的SAAS应用程序,并正在寻找关于最合适的框架的一些建议。我意识到没有一个框架可以做到这一切,但我想我会问社区并试图找到解决最难问题的框架。
要求
我有相当长的Java和PHP经验,但只考虑PHP作为最后的手段。我的Scala,Python和Ruby经验有点生气,但如果它们具有显着的优势,我不介意加快速度。我看过Play!框架和喜欢它(很好地完成#1,#2,#6),但多租户方面不是很强。我已经使用Grails完成了几个项目,除了#3和#5之外,它还可以处理所有内容,并且可以通过黑客攻击来完成其余的工作。
答案 0 :(得分:3)
我会说,第三点是相当独立于grails / play / what。如果你需要一个共享缓存,那么就有很多提供者,Grails中有大多数提供者。
Grails中的多租户非常成熟,并且比Sebastiens的博客文章中的解决方案更具侵入性。您是否使用单一租赁(多个数据库)或多租户对您的代码或多或少透明,并且大部分令人头疼的问题都被抽象掉了。请注意,您需要进行一些智能索引(比如在多列索引中包含租户ID等),以便在数据开始增长时不会感到非常悲伤。
对于外部化视图,您可以将它们打包在数据库中,也可以将它们符号链接到您的webapp中,并将它们保存在单独的编号文件夹中。然后从租户插件中,您可以使用TenantUtils.getCurrentTenant()
并从适当的文件夹"/" + (tenantID ?: "default") + "/whatever/view/path"
进行渲染。这样,如果你愿意,可以在租户之间共享布局等,你只需将租户特定的东西放在租户特定的文件夹中。
你也可以在游戏中这样做,或者,但是我没有看到任何阻碍你在Grails中做这件事的事情。
这个问题我的0.02美元。
答案 1 :(得分:1)
实际上玩!适合你想要的东西。
效果很好。您甚至可以使这个过滤器工作,以便您可以将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