相关疑难解决方法(0)

基于Java(GWT,Spring,Hibernate)Web应用程序的SaaS /多租户方法

我目前正在考虑将使用Spring,GWT,Hibernate,Jackrabbit,Hibernate Search/Lucene(以及其他)的单租户基于Java的Web应用程序转换为完全成熟的SaaS风格应用程序.

我偶然发现了一篇文章,其中强调了以下7个"事物"作为对单个租户应用程序进行重要更改以使其成为SaaS应用程序:

  1. 该应用程序必须支持多租户.
  2. 该应用程序必须具有一定程度的自助注册.
  3. 必须有一个订阅/计费机制.
  4. 应用程序必须能够有效扩展.
  5. 必须具备监视,配置和管理应用程序和租户的功能.
  6. 必须有一种机制来支持唯一的用户识别和身份验证.
  7. 必须有一个机制来支持每个租户的某种程度的定制.

我的问题是,是否有人使用与我列出的类似技术在SaaS /多租户应用程序中实现上述任何7项内容?在我走上正在考虑的道路之前,我希望得到关于最佳方法的尽可能多的意见.

作为一个开始,我很确定我能够很好地处理如何在模型级别处理多个租户.我正在考虑为所有表添加租户ID,然后使用Hibernate过滤器(以及Hibernate Search的全文过滤器)根据登录用户的所有查询的租户ID进行过滤.

然而,我对性能也有一些担忧,特别是当我们的租户数量增长很多时.

任何有关如何实施此解决方案的建议都将受到高度赞赏(如果这个问题有点过于开放,我会道歉).

java saas multi-tenant hibernate-search

27
推荐指数
2
解决办法
7642
查看次数

有效地部署相同WAR的多个实例(不同的上下文,相同的容器)

我有一个WAR(app.war)和一个容器(Tomcat,Jetty,Glassfish,等等).我的目标是在容器上按需部署数百个同一Web应用程序的实例.

http://foo/app1 --> app.war
http://foo/app2 --> app.war
http://foo/app3 --> app.war 
...
http://foo/appN --> app.war
Run Code Online (Sandbox Code Playgroud)

实现这一目标的一些明显方法:

  • 在Tomcat中,为每个应用程序(名为appN.xml)创建一个context.xml文件,所有这些文件都指向同一个WAR.其他容器也有类似的方法
    • 这种方法有问题:它将爆炸WAR N次,占用大量磁盘空间
  • 使用符号链接创建指向app.war爆炸版本的webapp/{app1,app2,appN}文件夹.这可以防止磁盘空间爆炸,但JVM仍然会将许多重复的JAR加载到内存中
  • 使用一些共享的lib文件夹来包含大多数jar(以及前两个选项的组合).

我想知道是否有更好的方法来做到这一点.理想情况下,创建新实例不应占用任何更多磁盘空间(边缘配置文件除外),并且只占用与线程执行堆栈和其他运行时分配相关的内存.

有任何想法吗?

java tomcat jetty glassfish war

11
推荐指数
1
解决办法
7332
查看次数

标签 统计

java ×2

glassfish ×1

hibernate-search ×1

jetty ×1

multi-tenant ×1

saas ×1

tomcat ×1

war ×1