当前位置: 首页 > 知识库问答 >
问题:

在多租户多数据库环境中为多个租户提供集中访问的最佳方案是什么?

蓝苗宣
2023-03-14

我最近在工作中遇到了以下架构问题,我不确定这里的最佳做法。

我们为学校提供了一个多租户SAAS应用程序,其体系结构与一个中央主数据库(包含配置和共享数据)以及每个“学校组”的一个特定数据库配合使用。这些群体通常具有地域性,学校合作并为他们的群体取得软件许可证。

这在过去带来了一些问题,因为有时学校会改变群体。我们通过创建一个迁移工具来解决这个问题,该工具从一个数据库中提取学校数据,并将其合并到其他组数据库中。

最近,我们遇到了以下请求:大多数学校由一个非营利组织运营(这与我们使用的分组不同),现在这些非营利组织要求向他们提供所有学校的申请权限。例如,一个组织有150多所学校,它们的数据存储在25个不同的数据库中。

平均数据库大小约为6-7GB,我们有大约350个。

我们最好的做法是什么,提供这种访问?将所有数据库合并到一个数据库并从一个数据库运行是可行的吗?我们是否应该创建某种类型的或同步算法到一个新的数据库,或者其他什么?我们的目标是根据需要改变我们的架构和基础设施,以提供这种新的方法角度。

我不禁觉得这个案例有一个标准的解决方案,也有标准的架构,但我只是不知道名字。如果你把这个案例抽象化,应该有一个“好”的解决方案?

摘要:

实体可以获得软件许可证,一组实体可以获得软件许可证,实体可以更改组,管理组可以获得许可证(稍后),实体已被许可为单个或组许可证。数据应该在所有三个级别上都可以访问,每个用户的数据应该有正确的安全隔离。

请提供我的具体问题的答案,或者抽象问题的解决方案

共有1个答案

仲孙诚
2023-03-14

可能的解决方案之一

抽象问题

更具体地说,是云——应用程序模型。我认为它是因为你的服务(由大用户组使用)的远程服务器是联网的,以允许集中数据存储。我认为SaaS多租户数据库架构是你正在寻找的。这个问题的答案非常有帮助。

此外,对于您的情况,我认为共享数据库是一个很好的选择,但是单独的模式。它允许在同一个数据库中容纳多个租户。哪个租户有自己的模式。您可以在这个演示文稿中找到这个和其他解决方案。

 类似资料:
  • 我们正在开发一个多租户应用程序。在体系结构方面,我们为业务逻辑设计了共享中间层,为数据持久性设计了每个租户一个数据库。也就是说,业务层将与每个租户的数据库服务器建立一组连接(连接池)。这意味着应用程序为每个租户维护单独的连接池。如果我们预计约有5000个租户,那么这个解决方案需要高资源利用率(每个租户的应用服务器和数据库服务器之间的连接),这会导致性能问题。 我们已经通过保持公共连接池解决了这个问

  • 我正在AWS上开发一个多租户应用程序。我正在努力在Cognito上实现多租户。我的第一个方法是为整个应用程序使用一个认知用户池和一个标识池。 这个想法是为每个用户角色创建一个认知组,并将它们与各自的IAM角色相关联。工作正常。当使用组进行角色分配时,我将身份池经过身份验证的角色选择配置为“从令牌中选择角色”。 但是,对于20个租户,将需要40个组,每个用户池的认知组限制为25个。 每个租户使用一个

  • 问题内容: eclipselink(或Hibernate)中的租户是一个很好的概念,可以将数据域彼此分开。我在单表策略中使用eclipselink。 有时有必要从多个租户那里访问数据(例如,出于管理目的)。有什么好办法吗?(我不想遍历所有租户来收集数据…) 例: 我可以使用参数化的实体管理器访问特定租户中的对象: 有没有方便的方法可以查询所有租户?(或者持久性对象的身份仅在单个租户中定义?) 问题

  • 我在一个多租户环境中工作,在这个环境中,数据可以从大约10个不同的数据源(和实体管理器)通过网络应用程序(rest)前端访问。 要使用的entityManager取决于其余api中的URL参数,例如。api/订单/1/1000003。 我需要使用entitymanager“1”来获取数据。目前,在创建hibernate会话和通过hibernate条件创建查询之前,我正在使用存储库层中调用setDi

  • 目前为止,我们已经让用户页面在多租户风格下工作。为使它工作,我们看起来并没有做太多的变化。但请记住,我们正在对一个原来不是多租户的系统作修改。 让我们在 Roles 表应用类似的原则。 再一次,一个租户的用户在不能查看或修改其他租户的角色,每个租户的用户是相互独立工作的。 我们先在 RoleRow.cs 添加 TenantId 属性: namespace MultiTenancy.Administ

  • 这很有效,所以看起来。上面指定的作用域是由域确定的多租户环境中为一个租户定义的自定义作用域。但我认为,为了这个问题的目的,这也可能是会话范围。我在这里的想法是,TemplateResolver对于每个范围都是不同的。我们需要它是因为我们正在从租户的数据库中读取模板。 最后,我的症状:似乎第一个房客工作很好。对于任何后续租户,我在试图处理数据库模板时都会遇到异常。 我尝试禁用Thymeleaf的Sp