如何实施“共享数据库,分离模式”多租户策略。

3

我需要使用共享数据库分离模式使Web应用程序支持多租户。该应用程序使用Java/J2EE和Oracle 10g构建。

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

如何最好地实现这一点?

  • 在中间层(应用服务器)级别需要做什么?
  • 每个客户端是否需要有一个独立的主机头?
  • 如何根据访问应用程序的客户端动态连接到正确的模式?

https://dev59.com/H3fZa4cB1Zd3GeqPTZje - techuser soma
1个回答

1

总体而言,以下是需要考虑的一些事项:

  • 您可能希望将租户考虑因素从日常开发中隐藏起来。因此,您可能希望尽可能地将其隐藏在基础架构中,并将其与业务逻辑分开。您不想总是检查您处于哪个租户的上下文中...您只想处于该上下文中。
  • 如果您正在使用工作单元模式,则需要确保任何工作单元(除了在纯基础架构上下文而不是在业务上下文中运行的工作单元)都在一个租户的上下文中执行。如果您没有使用工作单元模式...也许您应该使用。不确定您如何遵循上述建议的其他方法(尽管也许您能够找到一种方法)。
  • 您可能希望在每个消息或HTTP请求的标头中放入租户ID。原则上最好将其从业务逻辑中分离出来,不要放在正文中。您可以在幕后刮取它,并确保在幕后将其放在所有传出的消息/请求上。
  • 我不熟悉Oracle,但在SQL Server中,我相信在Postgres中,您可以使用模拟身份作为切换租户的一种方式。也就是说,您可以只有一个SQL用户(没有关联登录),其默认模式为关联租户的模式,而不是在每个SQL命令和查询中参数化模式,然后从日常SQL中省略模式。您将不得不拦截对数据库的调用并将其包装在模拟调用中。就像我说的那样,我不确定Oracle是如何运作的,但这是SQL Server的一般想法。
  • 身份验证和安全性是一个大问题。这远远超出了我在此答案中讨论的范围,但请确保您正确处理

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接