猫鼬在node.js中创建连接以支持多租户

达尼洛·科瓦兰(Danillo Corvalan)

我正在研究使用node.js + mongoose和mongodb为多租户支持实现多个数据库的好方法。

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

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

假设用户向承租人发送了他将通过请求标头登录的租户,而我在早期的中间件Express中就获得了该租户。

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

问题是,可以静态存储这些连接,还是可以在每次发出请求时创建一个更好的连接?

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

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

最让我着迷的是,有人说为多租户添加前缀集合不是一个好主意,但是这样做的原因很简短。

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

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

蒂莫西·斯特拉普(Timothy Strimple)

我不建议手动创建和管理这些单独的连接。我不知道您的多租户需求的详细信息(租户数量,数据库大小,预期交易数量等),但是我认为最好使用Mongoose的useDb函数之的东西然后,Mongoose可以处理所有连接池详细信息。

更新

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

猫鼬+ Node.js:异步问题

来自分类Dev

Node JS模块内的猫鼬查询

来自分类Dev

Node.js猫鼬回调

来自分类Dev

node.js +猫鼬连接和创建问题

来自分类Dev

如何在Node.js中增加猫鼬的连接

来自分类Dev

如何在Node.js中增加猫鼬的连接

来自分类Dev

猫鼬(node.js),无法连接到[localhost:27017]

来自分类Dev

创建架构猫鼬模型(Node.js)以简化代码

来自分类Dev

猫鼬填充-Node.JS创建多个对象

来自分类Dev

使用node.js的猫鼬中的日期转换错误

来自分类Dev

Node.js中的猫鼬无声崩溃

来自分类Dev

在Node.js中异步foreach和猫鼬

来自分类Dev

Node.js猫鼬在复杂查询中变得混乱

来自分类Dev

Node js:猫鼬中间件中的Bluebird Promisify

来自分类Dev

Node.js猫鼬静态函数未调用

来自分类Dev

node.js和猫鼬,如何批量插入?

来自分类Dev

Node.js —猫鼬静态方法示例

来自分类Dev

Node.js猫鼬更新文档

来自分类Dev

node.js /快速路由中的猫鼬组查询

来自分类Dev

node.js链多个承诺(与猫鼬)

来自分类Dev

查询指针数组猫鼬Node.js

来自分类Dev

在Node.js中使用猫鼬样式架构MSSQL

来自分类Dev

使用猫鼬和Express / Node Js提取数据

来自分类Dev

返回推送对象的ID node.js猫鼬

来自分类Dev

Node.js猫鼬模块在Heroku上失败

来自分类Dev

猫鼬只能在node.js下工作吗?

来自分类Dev

Node.js猫鼬静态函数未调用

来自分类Dev

Node.js猫鼬没有方法“保存”

来自分类Dev

无法让Node.js Express猫鼬工作