gpt4 book ai didi

node.js - Mongoose 在 node.js 中为 Multi-Tenancy 支持创建连接

转载 作者:可可西里 更新时间:2023-11-01 09:57:04 24 4
gpt4 key购买 nike

我正在研究一种使用 node.js + mongoose 和 mongodb 实现多数据库以支持 Multi-Tenancy 的好方法。

我发现 mongoose 支持一种名为 createConnection() 的方法,我想知道使用它的最佳实践。实际上我将所有这些连接存储在一个数组中,由租户分隔。就像:

var connections = [
{ tenant: 'TenantA', connection: mongoose.createConnection('tenant-a') },
{ tenant: 'TenantB', connection: mongoose.createConnection('tenant-b') }
];

假设用户发送他将通过请求 header 登录的租户,我在 express 的一个非常早期的中间件中得到它。

app.use(function (req, res, next) {
req.mongoConnection = connections.find({tenant: req.get('tenant')});
});

问题是,静态存储这些连接是否可以,或者更好的做法是在每次发出请求时创建该连接?

编辑 2014-09-09 - 有关软件要求的更多信息

起初我们将有大约 3 个租户,但我们的计划是在一两年内将这个数字增加到 40 个。读操作比写操作多,它基本上是一个带有机器学习的大数据系统。它不是免费增值软件。由于历史数据的数量,数据库非常大,但是将非常旧的数据移动到另一个位置不是问题(我们已经考虑过了)。如果我们的数据库机器上的可用资源用完了,我们计划稍后对其进行分片,我们也可以将不同机器上的一些租户分开。

最让我感兴趣的是,有些人说为 Multi-Tenancy 设置前缀集合不是一个好主意,但原因很简单。

https://docs.compose.io/use-cases/multi-tenant.html

http://themongodba.wordpress.com/2014/04/20/building-fast-scalable-multi-tenant-apps-with-mongodb/

最佳答案

我不建议手动创建和管理这些单独的连接。我不知道您的 Multi-Tenancy 要求的详细信息(租户数量、数据库大小、预期交易数量等),但我认为使用类似 Mongoose's useDb function 的东西会更好。 .然后 Mongoose 可以处理所有的连接池细节。

更新

我要探索的第一个方向是在单独的 Node 进程上设置每个租户。在单独的 Node 进程中运行租户有一些有趣的好处。从安全角度(隔离内存)和稳定性角度(一个租户进程崩溃不会影响其他租户进程)来看,这是有意义的。

假设您基于 URL 租赁,您将在实际租户服务器前设置一个代理服务器。它的工作是查看 URL 并根据该信息路由到正确的进程。这是一个非常简单的 node http proxy设置。每个租户实例可以是完全相同的代码库,但使用不同的配置启动(它告诉他们使用什么 mongo 连接字符串)。

这意味着您可以设计您的实际应用程序,就像它不是 Multi-Tenancy 一样。每个进程只知道一个mongo数据库,不需要 Multi-Tenancy 逻辑。它还使您能够在以后根据负载轻松拆分流量。如果您出于性能原因需要拆分租户,您可以在代理级别透明地进行。 DNS 都可以保持不变,您只需将实例所在的服务器移到幕后即可。您甚至可以让代理平衡多个服务器之间对租户的请求。

关于node.js - Mongoose 在 node.js 中为 Multi-Tenancy 支持创建连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25551732/

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