【问题标题】:how to use tenant and microservice in node js如何在 node js 中使用租户和微服务
【发布时间】:2022-01-11 11:17:27
【问题描述】:

我计划在 MongoDB 中使用节点 js 中的微服务进行用户租户 我的偏好是

  • 带有 express 的节点 js
  • mongobd
  • 护照验证(针对每个微服务)
  • 各个微服务之间的通信

我的问题是

  1. 如何使用多个数据库连接?
  2. 如何使用 auth 等常用中间件?
  3. MongoDB 是否适合多租户?

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: node.js mongodb express architecture multi-tenant


【解决方案1】:

不完全确定您在这里寻找什么答案。

一种常见的方法是将微服务隔离并独立部署到云端。使用 Apache Kafka、RabbitMQ 等工具或 AWS SQS 等特定于云的工具进行通信。

就使用 mongo 或 passport 而言,没有什么能真正阻止每个单独的微服务实现这些。

就多租户而言,我建议使用策略模式或多态,您的服务器维护与所有租户数据库的连接,一旦请求命中,就会选择其中一个连接来执行实际工作

编辑回答一些问题: 任何服务都适合多租户。实施多租户系统完全基于您的实施,而不是所涉及的服务。看多态在nodejs中实现真正的多租户系统

例如,假设您在一个名为devprod 的系统中有两个租户。您可以为您的数据库连接创建一个基类,例如

class DbRoot {
  private connection;

  constructor(tenant) {
    this.setConnection(tenant);
  }

  private setConnection(tenant) {
    switch(tenant) {
      case Tenants.DEV:
        this.connection = 'https://dev.db.com';
        break;
      case Tenants.PROD:
        this.connection = 'https://prod.db.com';
        break;
      default:
        throw new Error('tenant not recognized');
     }
  }

之后,您可以使用此基类来实现一个利用您的实际数据库实现的类

  class DbClass extends DbRoot {
    constructor(tenant) {
      super(tenant);
    }

    public getUsers() {}
    public createUser() {}
    ...
  }

【讨论】:

  • 谢谢,但我的问题是 1) 如何使用多个数据库连接? 2)如何使用常见的中间件,如auth? 3) MongoDB 适合多租户吗?
  • 对我来说会更清楚
  • 更新了我的初始答案以包含对这些问题的答案
猜你喜欢
  • 1970-01-01
  • 2021-07-02
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多