【问题标题】:J2EE multi tenant SaaS applicationJ2EE 多租户 SaaS 应用程序
【发布时间】:2014-07-27 12:07:30
【问题描述】:

我必须在 j2ee 中开发一个多租户 SaaS 应用程序,并实现从 Iaas 和 PaaS 开始的三种云模型,我选择了具有 openshift 起源的 openstack。 SaaS 应用程序的第一个标准是多租户,我知道有 3 种方法可以实现它 - 独立的数据库 - 共享数据库,独立架构 - 共享数据库,共享架构 我在这里迷路了,因为许多框架,如 ATHENA,ORM,如 hibernate,还有 TOPLINK。我需要帮助来了解实现多租户 Java 应用程序的最佳方法。

【问题讨论】:

    标签: jakarta-ee multi-tenant saas


    【解决方案1】:

    我喜欢共享数据库共享架构方法 - 从广义上讲,这意味着每个表都有一个 org_id 列,并且每个查询都使用当前用户 org_id 作为过滤器运行。

    我喜欢这种方式,因为您可以对数据库进行分片,以平衡大租户和小租户,而不是根据每个租户大小进行自定义缩放

    我会完全跳过 ORM,因为在多租户部署中太容易搞砸了,而是使用 MyBatis 解决方案,它允许验证和审查查询,因为它们都集中在几个地方而不是遍布整个代码。

    如果你真的需要 ORM,我知道 Hibernate 带有 its own support,但我不喜欢库强迫我使用特定的数据结构,因为它会带走灵活性。只需确保获取会话的唯一方法是自动添加租约,如果这是手动过程,这对开发人员来说太容易搞砸了。

    你可以在这里找到很多资源和一些不同方法的成本效益分析http://msdn.microsoft.com/en-us/library/aa479086.aspx

    【讨论】:

    • “只要确保获得会话的唯一方法是自动添加租约,如果这是手动过程,对于开发人员来说太容易搞砸了。” -- 能否请您详细说明
    • 通常开发人员会使用 EntityManager (JPA) 或 SessionFactory (Hibernate) 或 SqlSessionFactoryBuilder (MyBatis) 或你有什么。然后他们得到一个声明,如果他们走这条路,他们必须添加到所有声明'AND TENANT =:tenantid',他们必须从会话中获取租户并通过它。失败点太多:将其包装到一个对象中,该对象只允许创建强制注入租户子句的语句/查询/对象,让开发人员不必记住这一点。
    猜你喜欢
    • 2012-07-24
    • 2012-05-17
    • 2012-04-10
    • 1970-01-01
    • 2013-04-23
    • 2017-01-28
    • 2017-01-07
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多