一、核心概念
微服务架构是将单体应用拆分成一组小型服务的架构风格,每个服务:
- 独立部署:拥有独立的进程和数据库
- 职责单一:围绕业务能力构建
- 自治性强:可独立开发、测试、部署
- 轻量通信:通常使用 HTTP/REST 或消息队列
考察点:能否基于业务场景合理拆分服务,避免过度拆分和拆分不足。
二、微服务划分原则
1. DDD(领域驱动设计)思想
核心思路:按业务领域(Domain)划分,而非技术层次。
- 识别限界上下文(Bounded Context):每个上下文对应一个微服务
- 聚合根(Aggregate Root):确定数据一致性边界
- 领域事件:服务间通过事件解耦
2. 服务拆分的三大维度
| 维度 | 说明 | 示例 |
|---|---|---|
| 业务维度 | 按功能模块拆分 | 用户服务、订单服务、商品服务 |
| 性能维度 | 高并发模块独立 | 秒杀服务、搜索服务 |
| 团队维度 | 按组织架构划分 | 康威定律:架构反映沟通结构 |
3. 拆分最佳实践
✅ 应该拆分:
- 业务边界清晰(如用户管理、订单管理)
- 变更频率差异大(营销活动频繁变更,可独立为促销服务)
- 性能要求迥异(搜索服务需要高 QPS,可独立优化)
❌ 避免过度拆分:
- 服务间频繁调用(增加网络开销和复杂度)
- 事务边界模糊(分布式事务成本高)
- 团队规模小(管理成本超过收益)
三、淘宝系统微服务划分示例
架构分层
┌─────────────────────────────────────────┐
│ 接入层(API Gateway) │
│ (统一鉴权、限流、路由、协议转换) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 业务服务层 │
├─────────────────────────────────────────┤
│ 用户服务 | 商品服务 | 订单服务 | 支付服务│
│ 营销服务 | 搜索服务 | 物流服务 | 评价服务│
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 中间件/基础设施 │
│ 注册中心 | 配置中心 | 服务网格 | 消息队列│
└─────────────────────────────────────────┘
核心服务划分
1. 用户中心(User Service)
- 职责:用户注册、登录、资料管理、权限
- 数据:用户基本信息、认证凭证
- 技术:Redis 缓存热点数据、SSO 单点登录
2. 商品服务(Product Service)
- 职责:SPU/SKU 管理、库存、分类、详情页
- 拆分细化:
- 商品基础服务(CRUD)
- 库存服务(高并发扣减,独立优化)
- 搜索服务(ES 搜索引擎,读写分离)
- 技术:读写分离、缓存多级(本地 + Redis)
3. 订单服务(Order Service)
- 职责:下单、订单状态流转、订单查询
- 关键点:
- 分库分表(按用户 ID 哈希)
- 状态机管理(待支付→已支付→已发货→完成)
- 技术:TCC/Saga 分布式事务、消息队列异步解耦
4. 支付服务(Payment Service)
- 职责:对接支付宝/微信、支付回调、账单
- 安全:幂等性设计、异步通知重试
5. 营销服务(Promotion Service)
- 职责:优惠券、满减、秒杀、拼团
- 特点:规则变化快,独立部署降低风险
- 技术:规则引擎(如 Drools)、缓存预热
6. 物流服务(Logistics Service)
- 职责:物流信息推送、轨迹跟踪
- 特点:对接第三方物流 API
7. 消息通知服务(Notification Service)
- 职责:短信、邮件、站内信、Push
- 技术:消息队列削峰填谷
四、关键技术考量
1. 服务间通信
| 方式 | 适用场景 | 示例 |
|---|---|---|
| 同步调用 | 强一致性要求 | HTTP/gRPC(订单查库存) |
| 异步消息 | 最终一致性 | Kafka/RabbitMQ(订单→物流) |
2. 数据一致性
- 强一致性:分布式事务(TCC、Seata)
- 最终一致性:Saga 模式、本地消息表
3. 服务治理
# 关键组件
注册中心: Nacos / Eureka
配置中心: Apollo / Nacos
负载均衡: Ribbon / LoadBalancer
熔断降级: Sentinel / Hystrix
链路追踪: SkyWalking / Zipkin
API 网关: Spring Cloud Gateway / Kong
五、性能与容错优化
1. 缓存策略
// 多级缓存:本地缓存 + Redis
@Cacheable(value = "product", key = "#id")
public Product getProductById(Long id) {
return productRepository.findById(id);
}
2. 限流降级
// Sentinel 限流配置
@SentinelResource(value = "createOrder",
blockHandler = "handleBlock",
fallback = "handleFallback")
public Order createOrder(OrderDTO dto) {
// 核心下单逻辑
}
3. 异步解耦
// 订单创建后异步发送消息
@Transactional
public void createOrder(Order order) {
orderRepository.save(order);
// 发送消息到 MQ(记录本地消息表保证可靠性)
messageService.sendOrderCreatedEvent(order);
}
六、答题总结
回答框架(2-3分钟):
- 定义微服务:独立部署、业务导向、轻量通信
- 划分原则:DDD 领域驱动、按业务/性能/团队拆分
- 淘宝案例:列举核心服务(用户、商品、订单、支付)+ 简述职责
- 技术选型:
- 通信:同步(gRPC)+ 异步(Kafka)
- 治理:Nacos、Sentinel、Gateway
- 数据:分库分表、分布式事务(Seata)
- 优化点:缓存、限流、异步、监控
核心亮点:
- 强调业务理解(DDD)而非盲目拆分
- 提及真实痛点(分布式事务、服务治理)
- 结合实际技术栈(Spring Cloud Alibaba)
延伸问题:
- 如何保证分布式事务一致性?
- 微服务拆分后如何避免循环依赖?
- 服务粒度过细时如何应对?