题目
解释微服务架构及其与单体架构的主要区别
信息
- 类型:问答
- 难度:⭐
考点
微服务基本概念,微服务与单体架构对比
快速回答
微服务架构是一种将应用程序拆分为多个独立、松耦合的小型服务的架构风格。与单体架构的主要区别包括:
- 架构组成:单体是单一代码库,微服务是多个独立服务
- 部署方式:单体整体部署,微服务独立部署
- 技术栈:单体统一技术,微服务可混合技术
- 可扩展性:单体垂直扩展,微服务水平扩展
1. 微服务架构核心概念
微服务架构(Microservices Architecture)是一种将单一应用程序拆分为一组小型服务的方法,每个服务:
- 运行在独立进程中
- 通过轻量级机制通信(如HTTP/REST或消息队列)
- 围绕业务能力构建
- 可独立部署和扩展
- 拥有独立的数据库
2. 与单体架构对比
| 对比维度 | 单体架构 | 微服务架构 |
|---|---|---|
| 代码结构 | 单一代码库 | 多个独立代码库 |
| 部署方式 | 整体部署(全有或全无) | 服务独立部署 |
| 技术栈 | 统一技术框架 | 混合技术栈(不同服务可用不同语言) |
| 数据库 | 共享单一数据库 | 每个服务拥有专属数据库 |
| 扩展性 | 垂直扩展(增强单机性能) | 水平扩展(按需增加服务实例) |
| 容错性 | 单点故障导致整个系统崩溃 | 故障隔离(一个服务失败不影响其他) |
3. 架构示意图
单体架构:
┌───────────────────────┐
│ Monolithic App │
│ ┌───┐ ┌───┐ ┌───┐ │
│ │ A │ │ B │ │ C │ │
│ └───┘ └───┘ └───┘ │
│ Database │
└───────────────────────┘微服务架构:
┌───────┐ HTTP ┌───────┐ gRPC ┌───────┐
│Service│◄────────►│Service│◄────────►│Service│
│ A │ │ B │ │ C │
│ │ MQ │ │ │ │
└───────┘◄──┬─────►└───────┘ └───────┘
│ DB_A DB_B DB_C
▼ ┌──┐ ┌──┐ ┌──┐
[Queue] └──┘ └──┘ └──┘4. 最佳实践
- 服务拆分原则:按业务领域划分(如订单服务、支付服务)
- 通信方式:同步用REST/gRPC,异步用消息队列(Kafka/RabbitMQ)
- 数据库设计:每个服务独立数据库,避免共享表
- 部署运维:使用容器化(Docker)和编排工具(Kubernetes)
5. 常见错误
- 过度拆分:创建过多微服务导致运维复杂度剧增
- 分布式事务:跨服务事务未采用Saga模式导致数据不一致
- 服务通信:频繁同步调用造成性能瓶颈(应优先异步)
- 监控缺失:未建立集中式日志和链路追踪(如ELK+Zipkin)
6. 扩展知识
- 康威定律:系统架构会反映组织沟通结构
- 十二要素应用:云原生应用设计原则(https://12factor.net/)
- 演进式架构:从单体开始,按需逐步拆分微服务