gpt4 book ai didi

java - 为成熟的企业应用程序实现 Multi-Tenancy

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:55 25 4
gpt4 key购买 nike

我的任务是让一个企业应用程序成为 Multi-Tenancy 。它有一个使用 SOAP 网络服务的 Java/Glassfish BLL 和一个 PostgreSQL 后端。每个租户都有自己的数据库,因此(至少就我而言)“ Multi-Tenancy ”意味着每个应用程序服务器支持多个数据库。

当前的单租户应用服务器使用从配置文件中获取的连接字符串来初始化 C3P0 连接池。我的想法是,现在应用服务器服务的每个客户端/数据库都需要一个连接池。

用户登录后,我可以通过查找其租户将其映射到正确的连接池。我的主要问题是如何做到这一点 - 当用户首次登录时,查询后端的 User 表并提供相应的 User 对象。看来我需要知道要使用哪个数据库,只有一个用户名才能使用。

我唯一不错的想法是需要有一个“配置”数据库——一个用于管理连接字符串等租户信息的集中式数据库。 BLL 可以查询此数据库以获得足够的信息来初始化必要的连接池。但是因为我只有一个用户名可以使用,所以我似乎还需要一个集中的用户名查找,换句话说,一个 UserName 表,其中有一个指向 Tenant 的外键表。

这就是我的设计方案开始产生异味的地方,让我产生了怀疑。现在我将在两个单独的数据库中拥有用户信息,这需要同步维护(用户添加、更新和删除)。此外,用户名现在必须是全局唯一的,而以前它们只需要每个租户都是唯一的。

我强烈怀疑我是在重新发明轮子,或者至少有更好的架构可能。我以前从未做过这种事情,我的团队中也没有人做过,因此我们无知。不幸的是,该应用程序几乎没有使用现有技术(例如,ORM 是自制的),因此我们的道路可能很艰难。

我要求以下内容:

  • 对我现有设计计划的批评,以及改进或改造架构的建议。
  • 对提供此问题解决方案的现有技术的建议。我希望可以在游戏后期轻松插入一些东西,尽管这可能是不现实的。我读过 jspirit ,但几乎没有找到关于它的信息 - 任何关于它或其他框架的反馈都会有所帮助。

更新:该解决方案已成功实现和部署,并通过了初始测试。感谢@mikera感谢他的帮助和令人放心的回答!

最佳答案

一些快速的想法:

  • 您肯定需要某种形式的共享用户管理索引(否则您无法将客户端登录与正确的目标数据库实例相关联)。但是我建议使它非常轻便,并且只将它用于初始登录。一旦确定这是哪个数据库,您的用户对象仍然可以从特定于客户端的数据库中提取。
  • 您可以创建主键 [clientID, username],这样用户名就不需要在客户端之间是唯一的。
  • 除了这个薄的用户索引层,我会将大部分用户信息保存在客户特定的数据库中。现在重构它可能会造成太大的破坏,您应该首先让基本的 Multi-Tenancy 功能发挥作用。
  • 您需要保持共享索引与各个客户端数据库同步。但我认为这应该不会太难。您还可以“测试”同步并使用批处理作业更正任何错误,批处理作业可以在夜间运行,或者在出现任何不同步时由您的 DBA 按需运行。我会将客户端数据库视为主数据库,并使用它来按需重建共享用户索引。
  • 随着时间的推移,您可以重构一个完全共享的用户管理层(如果您愿意,甚至最终完全共享客户端数据库。但是将其保存以备将来迭代......<

关于java - 为成熟的企业应用程序实现 Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com