年薪百万的Golang架构师都在用的微服务分层方案,全网最强详解图来了!

117 阅读2分钟

 📌 架构总览:分层+模块化+微服务治理组件整合

┌────────────────────────────┐
│         接入层(Gateway)       │ 🔹统一网关,限流鉴权,灰度发布
└────────────┬─────────────┘
             ↓
┌────────────────────────────┐
│        API 层(服务入口)       │ 🔹gRPC / HTTP,路由与协议处理
└────────────┬─────────────┘
             ↓
┌────────────────────────────┐
│       服务层(UseCase)        │ 🔹组合业务流程,调度多个领域服务
└────────────┬─────────────┘
             ↓
┌────────────────────────────┐
│      领域层(Domain)         │ 🔹核心业务模型与规则,保持纯净
└────────────┬─────────────┘
             ↓
┌────────────────────────────┐
│     基础设施层(Infra)        │ 🔹数据库、MQ、缓存、搜索引擎等
└────────────────────────────┘

🧩 架构特色拆解

1️⃣ 接入层(Gateway/Api Gateway)

  • Kong / APISIX / Nginx 等统一入口网关

  • 功能包括:

    • JWT 鉴权
    • IP 限流
    • API 聚合
    • 灰度发布

2️⃣ API 层(Protocol Adapter)

  • 每个服务都有自己的入口,例如:

    • HTTP(Gin)
    • gRPC(Protobuf + grpc-go)
    • WebSocket(用于实时通信)
func (h *OrderHandler) CreateOrder(ctx *gin.Context) {
    ...
    err := h.orderUsecase.Create(cmd)
}

3️⃣ 服务层(UseCase Layer)

  • 每一个服务的业务 orchestrator
  • 聚合多个领域对象,流程控制、事务逻辑在此
func (uc *OrderUsecase) Create(cmd CreateOrderCommand) error {
    order := domain.NewOrder(cmd)
    err := uc.repo.Save(order)
    uc.msgPublisher.Publish(order.Event)
}

4️⃣ 领域层(Domain Layer)

  • 🧠 核心业务逻辑

  • 包含:

    • Entity 实体
    • Value Object 值对象
    • Domain Service 领域服务
    • Domain Event 领域事件

5️⃣ 基础设施层(Infra Layer)

  • 所有 I/O 相关逻辑:

    • MySQL、PostgreSQL、MongoDB
    • Kafka / RocketMQ
    • Redis / etcd
    • ElasticSearch
  • 遵循接口隔离,通过依赖倒置和接口注入方式解耦:

type OrderRepository interface {
    Save(order *domain.Order) error
}

🧰 微服务治理扩展建议

模块说明
服务注册发现Consul / Nacos / etcd
配置中心Apollo / Nacos
分布式链路追踪Jaeger / Zipkin / OpenTelemetry
服务限流熔断Sentinel / Hystrix
日志采集ELK / Loki + Promtail
鉴权 & 认证OAuth2 / JWT / Casbin
自动化部署Kubernetes + Helm

🗂 推荐目录结构(基于微服务)

/cmd/
    order-service/          → 单个服务入口
/internal/
    order/
        api/                → gRPC/HTTP 适配器
        usecase/            → 应用服务
        domain/             → 业务模型
        infra/              → 数据库/消息/缓存实现
        config/             → 配置
/pkg/                      → 通用模块(日志、中间件、错误封装)
/api/                      → Protobuf / OpenAPI 接口定义

Golang全栈开发完整课程