带有 sequelize 和 nest.js 的多租户

Posted

技术标签:

【中文标题】带有 sequelize 和 nest.js 的多租户【英文标题】:multi-tenancy with sequelize and nest.js 【发布时间】:2022-01-22 22:57:46 【问题描述】:

我想实现一个多租户解决方案,其中我有一个网络服务器和一个数据库,所有租户共享。关于这个blog post from AWS,它是“池化多租户模型”。

我正在使用nest.js 和sequelize。如果 sequelize 不适合这个,我也可以在必要时切换到另一个库,比如 typeORM。

如何实现?我完全不知道如何为每个 HTTP 请求使用不同的连接(不同的数据库用户),而且我也不知道如何以一种好的方式为连接设置运行时上下文变量。

我目前得到的是每个 HTTP 请求都包含一个标头 tenant-id。这应该用于所有查询。

还有scopes in sequelize的概念。但这是在客户端实现的,而不是直接在数据库上实现的。此外,这是特定于续集的东西。我更喜欢独立于 sequelize 并且可能更具体到 PostgreSQL 的解决方案。

有没有办法用 sequelize 来实现呢?提示或基本方法就足够了。

【问题讨论】:

【参考方案1】:

看来这种做法是类似的。 https://docs.microsoft.com/en-us/microsoft-365/education/deploy/design-multi-tenant-architecture。 我正在研究创建类似的架构,但我将使用“筒仓”模型或“物理数据库”。我认为首先您需要创建一个名为“目录”的内部数据库,其中将包含用户的信息(该用户已经登录?如果为真,请选择此信息)其中必须包含以前的凭据,即租户 ID。关于 Sequelize,我想有必要使用 RAW 查询来创建 ROLE|GRANT|DATA BASE 等,并使用 MIGRATIONS 为每个新客户创建相同的数据库。

【讨论】:

以上是关于带有 sequelize 和 nest.js 的多租户的主要内容,如果未能解决你的问题,请参考以下文章

使用 class-validator 和 Nest.js 验证对象数组

在 Nest.js 中接受表单数据

Nest.JS 和 Observables

无法连接到数据库 - NEST.JS 和 TypeORM

带有 Sequelize 和 Typescript 的外键

Sequelize:带有关联的种子