Init
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
---
|
||||
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-部署运维]] — 容器化编排、灰度发布、弹性伸缩
|
||||
Reference in New Issue
Block a user