Files
cs-note/hzh/MS/01-基础概念.md
T
2026-05-24 11:42:38 +08:00

107 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [microservice, architecture]
create time: 2026-04-29 12:30
---
# 微服务基础概念
## 概述
本文阐述微服务架构的核心定义、设计原则与常见误区,帮助建立正确的认知框架。
## 什么是微服务
> [!definition] 核心定义
> **微服务**(Microservices)是一种将单一应用拆分为一组**小服务**的架构风格。每个服务运行在独立进程中,通过轻量级通信机制协作,且**各自拥有独立的数据库**。
关键特征:
| 特征 | 说明 |
|------|------|
| 独立部署 | 每个服务可以独立构建、测试和发布 |
| 去中心化 | 数据管理、技术选型由各团队自主决策 |
| 容错性 | 服务故障不影响整个系统 |
| 组织对齐 | 按业务域划分,与 Conway 定律呼应 |
### 单体 vs 微服务
```mermaid
graph TB
subgraph Monolith["单体架构"]
UI["Web UI"]
API["API Layer"]
Biz["Business Logic"]
DB["数据库"]
UI --> API --> Biz --> DB
end
subgraph Microservices["微服务架构"]
GW["API Gateway"]
S1["Service A<br/>+ Database"]
S2["Service B<br/>+ Database"]
S3["Service C<br/>+ Database"]
GW --> S1
GW --> S2
GW --> S3
S2 -.->|RPC/MQ| S1
end
```
> [!question] 思考
> 既然微服务有这么多好处,为什么不是所有公司都迁移到微服务?什么时候单体反而更合适?
**答案线索**:微服务引入的是**分布式复杂度**。网络延迟、数据一致性、运维成本全部上来了。对于小型团队或小规模应用,单体更简单高效。
## 拆分原则:DDD 与限界上下文
微服务拆分的核心思想来自 **领域驱动设计 (DDD)** —— 按 **限界上下文 (Bounded Context)** 划分。
```mermaid
graph LR
UC["用户中心"]
OS["订单服务"]
PS["支付服务"]
IS["库存服务"]
UC -->|查询/注册| OS
OS -->|创建支付| PS
OS -->|扣减库存| IS
PS -->|支付回调| OS
IS -->|库存确认| OS
```
> [!tip] 限界上下文不是代码边界,而是语义边界
> 同一个词在不同上下文中可能有完全不同的含义。比如 "商品" 在电商场景中是一套完整对象,但在物流场景中可能只是一个包裹编号。明确上下文是 DDD 的第一步。
> [!warning] 反模式
> - ❌ **按技术层拆分**:Controller 层一个服务、Service 层一个服务 — 这不是微服务,是"分布式单体"
> - ✅ **按业务域拆分**:每个服务对应一个业务能力边界
## 核心设计原则
> [!summary] SOLID + CAP 的组合拳
>
> | 原则 | 含义 | 微服务场景 |
> |------|------|-----------|
> | 单一职责 | 一个服务只做一件事 | 订单服务只管订单生命周期 |
> | 高内聚低耦合 | 内部紧密,外部松散 | 服务间通过接口通信,不共享代码 |
> | 最终一致性 | 允许短暂不一致 | 分布式环境放弃强一致性,换取可用性 |
> | 独立失败 | 故障隔离 | 单个服务宕机不影响全局 |
## 何时不应该用微服务
> [!failure] 拒绝伪需求
>
> - 团队小于 10 人,维护单个应用就够
> - 项目处于快速原型阶段,需求频繁变更
> - 团队成员缺乏分布式系统设计经验
> - 已有大型单体正在稳定运行
**记住**:架构没有银弹。微服务是为了解决**特定规模下的组织和工程问题**而生的。先问自己:"我的痛点是什么?"再决定是否值得付出代价。
> [!note] 后续延伸
>
> - [[02-服务治理]] — 服务间通信、负载均衡、熔断降级等治理机制
> - [[03-数据一致性]] — 独立数据库架构下的分布式事务方案
> - [[04-可观测性]] — 日志、指标、链路追踪三支柱
> - [[05-部署运维]] — 容器化编排、灰度发布、弹性伸缩