如何实现“共享数据库,单独架构”的多租户策略

时间:2010-07-29 08:48:15

标签: java database-design cloud saas multi-tenant

我必须使用共享数据库单独的模式方法来启用Web应用程序多租户。该应用程序使用Java / J2EE和Oracle 10g构建。

我需要使用一个具有多个架构的共享数据库的单个appserver,每个客户端一个架构。

实现这一目标的最佳实施方法是什么?

  • 在中间层(app-server)级别需要做什么?
  • 每个客户端是否需要拥有多个主机头?
  • 如何根据访问应用程序的客户端动态连接到正确的架构?

1 个答案:

答案 0 :(得分:0)

在高层次上,有以下几点需要考虑:

  • 您可能希望隐藏日常开发中的租赁注意事项。因此,您可能希望尽可能地将其隐藏在基础架构中,并将其与业务逻辑分开。您不希望总是检查您所处的租户的上下文...您只是想在这种情况下。
  • 如果您使用的是工作单元模式,则需要确保任何工作单元(在纯粹的基础结构上下文中运行,而不是在业务环境中运行的单元)在一个租户的上下文中执行。如果你没有使用工作单元模式...也许你应该是。不知道你将如何遵循上述建议(尽管你可以找到方法)。
  • 您可能希望将租户ID放入每个消息或HTTP请求的标头中。可能更好的做法是保持这种状态,使其远离业务逻辑。您可以在幕后删除它,并确保在幕后它可以放在任何外发消息/请求上。
  • 我不熟悉Oracle,但在SQL Server中,我相信Postgres,您可以使用模拟作为切换租户的方式。也就是说,不是在每个SQL命令和查询中参数化模式,而是只有一个SQL用户(没有关联的登录名),该用户具有关联租户的模式作为其默认模式,然后将模式保留在你的日常SQL。您将不得不拦截对数据库的调用并将其包装在模拟调用中。就像我说的,我不确定这在Oracle中是如何工作的,但这是SQL Server的总体思路。
  • 身份验证和安全性是一个重要问题。这远远超出了我在这个答案中讨论的范围,但确保你做到了正确