代码之家  ›  专栏  ›  技术社区  ›  Daksh M.

如何与多个微服务共享Mongoose模型

  •  1
  • Daksh M.  · 技术社区  · 8 年前

    我有一个用户模型,它看起来像:

    import mongoose from 'mongoose';
    
    const UserSchema = new mongoose.Schema({
        name: String,
        email: {
            type: String,
            required: true,
            unique: true,
        },
        password: {
            type: String,
            required: true,
        },
    });
    
    export default mongoose.model('User', UserSchema);
    

    我正在尝试与多个微服务共享此模型,但如何共享此模型?我应该通过http公开数据库服务,还是应该在每台服务器中手动创建模型并以这种方式使用它,或者是否有其他方法可以这样做?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Constantin Galbenu    8 年前

    跨微服务共享模式是危险的,因为它们可能变得非常耦合,或者至少不是这样。微服务使用彼此的数据是正常的,但是模型不应该完全导入到另一个微服务中。相反,依赖的微服务应该使用一个子集,远程模型的本地表示。为此,您应该使用 Anti-corruption layer . 这个acl将作为输入远程模型接收,并作为输出生成该模型的本地、不可变/只读表示。acl位于微服务的外部边界,即进行远程调用的地方。

    还有,分享 *schema.js 跨微服务的文件将迫使您在所有其他微服务中使用javascript/nodejs,这是不好的。每个微服务都应该使用最适合它的编程语言。

    我应该通过http公开数据库服务吗

    数据库是所属微服务的私有数据库。不应该暴露在外。