HOW - Moleculer 微服务构建分布式服务系统

文章目录

Moleculer 是一个 Node.js 微服务框架 ,专门用于构建 分布式服务系统。

它的设计目标类似于 Java 里的 Spring Cloud 或 Apache Dubbo,但更适合 Node.js 生态。

一、Moleculer 的核心架构

Moleculer 的基本单元是 Service。

典型架构:

复制代码
API Gateway
      |
      v
+-------------------+
|  Moleculer Broker |
+-------------------+
   |      |      |
   v      v      v
UserSvc OrderSvc ProductSvc

核心组件:

概念 作用
Service 业务模块
Broker 服务运行容器
Action 服务方法(RPC)
Event 事件通信
Transporter 服务发现 & 消息传输

二、最基础实践(服务设计)

1 创建 Broker

js 复制代码
const { ServiceBroker } = require("moleculer");

const broker = new ServiceBroker({
  nodeID: "node-1",
  transporter: "NATS"
});

broker.start();

transporter 用于:

  • 服务发现
  • RPC通信
  • 事件分发

常见:

  • NATS
  • Redis
  • Apache Kafka

2 定义 Service

js 复制代码
broker.createService({
  name: "users",

  actions: {
    get(ctx) {
      return { id: ctx.params.id, name: "Tom" };
    }
  }
});

调用:

js 复制代码
broker.call("users.get", { id: 1 });

返回:

复制代码
{ id: 1, name: "Tom" }

三、实践一:API Gateway

通常用 moleculer-web

安装:

复制代码
npm install moleculer-web

网关:

js 复制代码
const ApiGateway = require("moleculer-web");

broker.createService({
  mixins: [ApiGateway],

  settings: {
    routes: [
      {
        path: "/api",

        aliases: {
          "GET users/:id": "users.get"
        }
      }
    ]
  }
});

访问:

复制代码
GET /api/users/1

自动调用:

复制代码
users.get

四、实践二:服务拆分(真实微服务)

推荐结构:

复制代码
services/
  users.service.js
  orders.service.js
  products.service.js
gateway.service.js

例如:

users.service.js

js 复制代码
module.exports = {
  name: "users",

  actions: {
    get(ctx) {
      return { id: ctx.params.id, name: "Tom" };
    }
  }
};

orders.service.js

js 复制代码
module.exports = {
  name: "orders",

  actions: {
    create(ctx) {
      return {
        orderId: 100,
        user: ctx.params.userId
      };
    }
  }
};

五、实践三:服务之间调用

js 复制代码
actions: {
  async createOrder(ctx) {
    const user = await ctx.call("users.get", { id: ctx.params.userId });

    return {
      order: 1,
      user
    };
  }
}

这就是:

复制代码
RPC service call

六、实践四:事件驱动

发布事件:

js 复制代码
broker.emit("user.created", {
  id: 1,
  name: "Tom"
});

监听事件:

js 复制代码
events: {
  "user.created"(payload) {
    console.log("User created", payload);
  }
}

适用于:

  • 订单创建
  • 用户注册
  • 日志
  • 数据同步

七、实践五:数据库集成

常见搭配:

数据库 用法
MongoDB moleculer-db
PostgreSQL ORM
MySQL ORM

例如:

js 复制代码
const DbService = require("moleculer-db");

module.exports = {
  name: "users",
  mixins: [DbService]
};

八、实践六:服务发现

如果使用:

复制代码
transporter: "NATS"

Moleculer 会自动实现:

  • 服务注册
  • 服务发现
  • 负载均衡

例如:

复制代码
users.get

可能被:

复制代码
node-1
node-2
node-3

轮询处理。

九、实践七:容错机制

Moleculer 内置:

功能 说明
retry 自动重试
timeout RPC超时
circuit breaker 熔断
rate limit 限流

例如:

js 复制代码
actions: {
  get: {
    timeout: 2000,
    retries: 3,

    handler(ctx) {
      return { ok: true };
    }
  }
}

十、生产环境常见架构

真实项目常见结构:

复制代码
                +----------------+
                | API Gateway    |
                +----------------+
                         |
         +---------------+----------------+
         |                                |
   +------------+                   +------------+
   | User Svc   |                   | Order Svc  |
   +------------+                   +------------+
         |                                |
   +------------+                   +------------+
   | MySQL      |                   | MySQL      |
   +------------+                   +------------+

消息总线:

复制代码
NATS / Kafka

十一、Moleculer 最大优势

优势 说明
开箱即用 微服务能力内置
RPC 调用 非常简单
自动服务发现 不需要额外组件
事件系统 内置
性能高 Node生态中非常快

很多 Node 微服务项目会用它替代:

  • Express.js
  • NestJS

十二、Moleculer 的缺点

实践中也有一些问题:

问题 说明
社区不算特别大 相比 NestJS
TypeScript 生态一般
运维复杂度上升 微服务固有问题

十三、一个真实企业实践(简化版)

复制代码
API Gateway
   |
   v
Moleculer Broker Cluster
   |
   +-- user-service
   +-- order-service
   +-- payment-service
   +-- notification-service
   |
   +-- Redis
   +-- MySQL

通信:

复制代码
RPC + Event
相关推荐
Hello.Reader1 小时前
一个开源项目,让 AI 做逆向不再靠猜reverse-skill 架构解析与本地实战
人工智能·架构·开源
CCblandy9 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
唠点键盘之外的9 小时前
27 存量系统接大模型:旁挂一个 AI 微服务,老架构一行不改
人工智能·微服务·架构
GOWIN革文品牌咨询10 小时前
工业测量品牌系统化搭建指南:从内容架构到长期治理的全流程
大数据·人工智能·架构
forest_0910 小时前
Agent 系列02|Agent 架构全景图
人工智能·架构·prompt·agi
天远数科11 小时前
零信任架构实战:基于天远贷前风险报告构建自动化消金信贷风控与多头共债排查网关
运维·人工智能·架构·自动化
一条大祥脚11 小时前
【CS336】lecture7 多卡|通信架构|集合通信|NCCL|通信原语|torch.distributed
分布式·架构·nccl·多机多卡·集合通信
RichardLau_Cx11 小时前
STEPX Neo 技术解析:智能体原生操作系统 Step AOS 与 Agentic Phone 架构深度拆解
架构
Dawson Zhu12 小时前
《Agentic Design Patterns》第 18 章导读:Guardrails 安全模式
人工智能·语言模型·架构·aigc·agi
姜鱼问生12 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构