3

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

我需要一个应用程序服务器,它使用具有多个模式的共享数据库,每个客户端一个模式。

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

  • 在中间层(应用程序服务器)级别需要做什么?
  • 我需要每个客户端都有多个主机头吗?
  • 如何根据正在访问应用程序的客户端动态连接到正确的架构?
4

1 回答 1

1

在高层次上,这里有一些需要考虑的事情:

  • 您可能希望在日常开发中隐藏租赁注意事项。因此,您可能希望尽可能将其隐藏在您的基础架构中,并将其与您的业务逻辑分开。您不想总是检查您是否处于哪个租户的上下文中……您只想处于那个上下文中。
  • 如果您使用的是工作单元模式,您将需要确保任何工作单元(除了在纯基础架构上下文中运行的工作单元,而不是在业务上下文中运行的工作单元)都在一个租户的上下文中执行。如果您不使用工作单元模式……也许您应该使用。不确定您将如何遵循上述建议(尽管也许您能够找到一种方法)。
  • 您可能希望将租户 ID 放入每个消息传递或 HTTP 请求的标头中。在远离业务逻辑的原则下,最好将其保留在正文之外。你可以在幕后把它刮掉,并确保它在幕后被放在任何传出的消息/请求上。
  • 我不熟悉 Oracle,但在 SQL Server 中,我相信在 Postgres 中,您可以使用模拟作为切换租户的一种方式。也就是说,您可以只让一个 SQL 用户(没有关联的登录名)将关联租户的架构作为其默认架构,而不是在每个 SQL 命令和查询中参数化架构,然后将架构排除在外您的日常 SQL。您将不得不拦截对数据库的调用并将它们包装在模拟调用中。就像我说的,我不确定这在 Oracle 中是如何工作的,但这是 SQL Server 的总体思路。
  • 身份验证和安全性是这里的一个大问题。这远远超出了我在这个答案中可以讨论的范围,但请确保你做对了
于 2015-05-26T19:05:25.800 回答