微服务架构概述
微服务架构是一种将应用拆分为多个小型、独立服务的架构风格。
核心原则
| 原则 | 说明 |
|---|---|
| 单一职责 | 每个服务专注于一个业务功能 |
| 自治性 | 独立开发、部署和扩展 |
| 去中心化 | 可选择最适合的技术栈 |
| 容错设计 | 一个服务的失败不影响整个系统 |
与单体架构对比
| 特性 | 单体架构 | 微服务架构 |
|---|---|---|
| 代码库 | 单一代码库 | 多代码库 |
| 部署 | 整体部署 | 独立部署 |
| 扩展 | 整体扩展 | 按需扩展 |
| 技术栈 | 统一 | 可混合 |
| 运维复杂度 | 低 | 高 |
| 故障隔离 | 差 | 好 |
何时使用微服务?
适合场景
- 大型团队(> 10人)协作
- 产品需求变化频繁
- 需要独立扩缩容
不适合场景
- 小型项目(1-3人团队)
- MVP 验证阶段
- 团队缺乏 DevOps 经验
微服务技术栈
基础设施
- 容器:Docker
- 编排:Kubernetes
- CI/CD:GitLab CI、Jenkins、GitHub Actions
服务通信
- REST:HTTP/JSON(通用)
- gRPC:高性能二进制协议
- 消息队列:Kafka、RabbitMQ、NATS
可观测性
- 监控:Prometheus + Grafana
- 日志:ELK Stack
- 告警:Alertmanager
关键挑战
- 分布式事务:最终一致性 vs 强一致性
- 服务间通信:网络延迟、序列化
- 数据一致性:每个服务独立数据库
- 运维:服务数量多,监控困难
设计建议
先构建单体,再拆分微服务。
不要为了微服务而微服务。
