#markmap
微服务架构将大型应用拆分为独立部署的服务单元,通过 API 通信协作,解决单体应用的扩展性和维护性问题。
| 维度 | 单体架构 | 微服务架构 |
|---|
| 部署 | 整体部署 | 独立部署 |
| 扩展 | 整体扩展 | 按需扩展 |
| 技术栈 | 统一 | 灵活多样 |
| 故障隔离 | 一挂全挂 | 单服务故障不影响其他 |
| 复杂度 | 开发简单 | 运维复杂 |
| 问题 | 说明 |
|---|
| 服务通信 | 服务如何发现彼此、互相调用 |
| 数据一致性 | 分布式下强一致性的代价急剧上升 |
| 故障应对 | 超时、熔断、限流是架构的一部分 |
| 配置管理 | 多个服务如何统一管理配置 |
| 组件 | CAP | 特点 | 适用场景 |
|---|
| Eureka | AP | 客户端注册,心跳检测 | Spring Cloud 首选 |
| Zookeeper | CP | 临时节点,watch 机制 | 需要强一致 |
| Nacos | AP/CP | 注册+配置二合一 | 阿里面向云原生 |
| 协议 | 特点 | 适用场景 |
|---|
| HTTP/REST | 通用、跨语言 | Web 服务、轻量级 |
| gRPC | 二进制序列化、高性能 | 微服务内部、高并发 |
| Dubbo | RPC 高性能 | Java 生态、高吞吐 |
| 模式 | 组件 | 说明 |
|---|
| 同步调用 | REST、gRPC、Dubbo | 请求等待响应 |
| 异步消息 | Kafka、RabbitMQ、RocketMQ | 发送后不等待,解耦业务 |
| 类型 | 组件 | 说明 |
|---|
| 客户端负载均衡 | Ribbon、Feign | 服务自己选择目标 |
| 服务端负载均衡 | Nginx | 请求先到 Nginx 再分发 |
| 组件 | 特点 | 适用场景 |
|---|
| Nacos | 配置+注册二合一 | 轻量级、快速上手 |
| Apollo | 权限管理、环境隔离 | 企业级、大规模 |
| Spring Cloud Config | Git 后端 | 结合 Git 流程 |
| 组件 | 现状 | 隔离方式 | 限流 |
|---|
| Hystrix | 停止维护 | 线程池隔离 | 不支持 |
| Sentinel | 阿里活跃维护 | 信号量/并发数 | 支持 |
注意
选型建议
新项目使用 Sentinel,支持 QPS 和并发数限流,提供完善的控制台动态调整规则。
| 策略 | 说明 | 触发条件 |
|---|
| 熔断 | 快速失败,阻止故障传播 | 失败率超过阈值 |
| 降级 | 返回兜底数据 | 熔断或主动开关 |
| 限流 | 控制单位时间请求量 | QPS 超限 |
| 隔离 | 资源隔离限制影响范围 | 舱壁模式 |
| 问题 | 方案 |
|---|
| 身份认证 | OAuth2、JWT |
| 权限控制 | RBAC |
| 敏感数据 | 加密存储、脱敏输出 |
| 接口防护 | 签名验证、限流 |
| 类型 | 工具 | 作用 |
|---|
| 日志 | ELK | 问题定位 |
| 监控 | Prometheus + Grafana | 指标可视化 |
| 链路追踪 | Zipkin、Jaeger | 请求全链路 |
1. 基础设施:服务发现、配置管理
2. 流量治理:限流、熔断、降级
3. 安全:认证、鉴权
4. 可观测:日志、监控、链路
Spring Cloud 是最主流的微服务框架,核心组件详见 SpringCloud。
| 层级 | 组件 | 职责 |
|---|
| 服务构建 | Spring Boot | 微服务基础框架 |
| 服务治理 | Eureka / Nacos | 服务注册与发现 |
| 负载均衡 | Ribbon / OpenFeign | 客户端负载均衡 |
| 服务容错 | Hystrix / Sentinel | 断路器保护 |
| API 网关 | Zuul / Gateway | 智能路由、过滤 |
| 配置管理 | Config / Apollo / Nacos | 外部化配置 |
| 分布式事务 | Seata | 分布式事务解决方案 |
| 分布式跟踪 | Sleuth + Zipkin | 请求链路跟踪 |
| 组件 | 说明 |
|---|
| Docker | 容器化镜像,统一环境 |
| Kubernetes | 容器编排、服务治理 |
| Jenkins | CI/CD 持续集成 |
微服务部署核心:容器化 + 自动化 + 弹性伸缩。