
【Day 3】微服务拆分与SOA服务化的边界决策一、题目还原某大型电商平台易购商城历经6年发展日订单量突破800万SKU超3000万。系统早期基于单体架构快速上线但随着业务扩张架构问题日益突出1订单、支付、库存、营销、用户等核心模块混布在同一进程中任何模块发布都需全量上线发布周期从1天拉长至2周2订单模块直连用户数据库和商品数据库读取信息DB连接池瓶颈频发数据库库表已超过3000张且存在大量跨库JOIN3平台希望引入外部ERP和物流系统但无法直接复用当前系统的功能接口需要大量定制开发4双11大促峰值QPS达50万单体应用垂直扩容已达瓶颈单机4C16G上限。问题请从服务粒度、数据治理、服务集成三个维度分析该系统从单体架构向微服务架构或SOA架构演进时的决策要点和边界条件并给出推荐方案。二、考点分析项目内容核心考点微服务 vs SOA 架构选型边界判别 — 服务粒度、数据自治、集成方式三个维度的对比决策答题模板套用模板四方案评价/对比 模板一架构风格选择理由关键追问① 什么时候该用微服务什么时候该用SOA② 服务怎么切③ 数据要不要独立④ 用ESB还是API Gateway分值权重通常12~15分其中风格选择3分 方案对比6分 详细设计4~6分答题诀窍一定要用维度对比法几个维度列几行对比表然后给出完整的选型理由链业务需求 → 质量属性约束 → 风格特征匹配 → 选定。三、标准答案采分点格式Q1服务粒度分析约4分问题的核心企业服务总线ESB vs API网关对比维度SOA路线ESB微服务路线API Gateway服务粒度粗粒度如交易服务涵盖下单、支付、退款细粒度“订单服务”“支付服务”退款服务各自独立复用原则服务可被多个上层应用复用强调服务可组合性单一职责每个服务专注一个业务能力强调独立交付通信协议SOAP/XML/WS-*通过ESB做协议转换REST/JSON/gRPC轻量级HTTP通信服务发现ESB本身承担路由和消息转换独立注册中心Nacos/Consul耦合度数据耦合通过ESB解耦但服务间仍然共享Schema完全独立仅通过API契约耦合本系统推荐方案采用微服务架构 API Gateway理由① 系统日订单800万、峰值50万QPS可水平扩展是硬需求。微服务每个服务独立水平伸缩比SOA的ESB中心化瓶颈更适合。② 核心痛点之一是独立部署。微服务每个服务独立构建/测试/发布发布周期从2周缩短至1天。③ 新ERP/物流系统接入可通过API Gateway统一管控路由和认证无需重型ESB。④ 当前团队具备DevOps能力已有CI/CD pipeline满足微服务基础设施要求。不适用的风格及理由SOA ESB路线不适合ESB会引入中心化瓶颈在大促50万QPS场景下ESB会成为新的单点。且当前需求是独立部署快速迭代而非异构系统深度集成——SOA的WS-*协议和协议转换优势在此场景下得不偿失。单体架构已不适用单机垂直扩容已达天花板4C16G无法突破物理限制。Q2数据治理分析约5分问题的核心数据库完全拆分 vs 保留共享库对比维度共享数据库模式Monolithic DB数据库即服务Database per Service数据独立服务共享同一库表间有外键依赖每个服务独占数据库Schema无外键查询灵活支持跨表JOIN查询方便跨服务查询需通过API聚合或CQRS扩展性垂直扩展有限无法按服务独立扩容每个服务数据库可独立水平扩展一致性本地强一致ACID事务分布式事务Seata/Saga/TCC迁移代价无需改造但耦合不解决需要拆分、数据迁移、一致性改造推荐方案采用Database per Service模式逐步拆分拆分策略5步法第1步准备期识别限界上下文 → 按DDD识别核心聚合根 输出订单聚合、支付聚合、库存聚合、用户聚合、商品聚合 第2步数据隔离期去除跨表外键 → 改为应用层约束 操作删除订单表对用户表的外键改为通过userId应用层关联 第3步独立Schema期每个微服务创建独立Database/Schema 操作订单库、支付库、库存库、用户库、商品库各自独立 第4步数据同步期引入CQRS和事件总线 操作订单完成后发布OrderCreatedEvent → 其他服务消费事件更新本地只读缓存 第5步优化期引入分布式事务方案处理强一致场景 操作下单→扣库存→支付 核心链采用Seata AT模式XA两阶段提交 非核心优惠券发放/积分累计使用Saga编排模式关键权衡点强一致 vs 最终一致核心交易路径支付扣款必须强一致 → Seata AT非核心路径发短信、统计可最终一致 → 消息表Saga查询性能跨服务查询不再能JOIN引入CQRS模式查询端使用ESElasticsearch Redis建立只读聚合视图Q3服务集成方式分析约4分问题的核心服务间如何通信分层通信方案设计┌─────────────┐ │ API Gateway │ ← 统一入口路由、限流、认证 └──────┬──────┘ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 订单服务 │ │ 支付服务 │ │ 库存服务 │ ← 同步调用REST/gRPC └─────┬────┘ └─────┬────┘ └─────┬────┘ │ │ │ └───────────────┼───────────────┘ ▼ ┌────────────┐ │ 事件总线 │ ← 异步通信RocketMQ │ (RocketMQ) │ 削峰填谷 解耦 └──────┬─────┘ ┌────────────┼────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 物流服务 │ │ 通知服务 │ │ 数据同步 │ ← 消费方独立伸缩 └──────────┘ └──────────┘ └──────────┘同步通信API Gateway → 微服务协议内部服务间使用gRPC二进制高吞吐外部网关暴露RESTful API服务发现Nacos3节点集群AP模式5秒心跳检测容错策略Sentinel 熔断降级 — RT500ms或异常比例30%触发熔断熔断时长30秒半开恢复异步通信事件总线中间件RocketMQ相比Kafka支持事务消息、延迟消息、消息轨迹更完善更适合电商金融场景关键消息事件名称发布者消费者可靠性等级OrderCreatedEvent订单服务库存/支付/物流/通知至少一次投递PaymentSuccessEvent支付服务订单/通知/积分事务消息保序InventoryShortageEvent库存服务订单/采购普通可靠第三方集成ERP/物流系统对外暴露标准的RESTful API通过API Gateway统一管理敏感数据接口通过API Gateway鉴权 OAuth2 数据脱敏大批量数据同步使用MQ消息批处理非实时ESB在此场景无关紧要四、评分要点分值区间评分标准必须答出点4~5分优秀三维度全面对比有对比表选型理由链完整包含不适用风格理由微服务与SOA的边界条件、Database per Service的拆分步骤、同步异步混编通信设计3分良好有对比选型合理但缺少不适用风格理由或数据拆分不具体—1~2分及格能答出微服务拆分但笼统无细节无维度对比—0分答非所问如只答Spring Cloud配置不分析边界条件—加分项✅ 提到DDD限界上下文做服务拆分依据 → 1分✅ 提到CQRS 事件溯源解决跨服务查询 → 1分✅ 提到Seata AT模式 Saga编排模式做分层事务 → 1分✅ 给出具体的熔断阈值和限流数值 → 1分易扣分点❌ “微服务一定比SOA好”——没有说明边界条件❌ “所有服务都用自己数据库”——没说迁移步骤❌ “用ESB做微服务集成”——概念混淆ESB是SOA时代的产物❌ 每点只说名词不给具体参数或配置五、扩展知识点 知识串联一微服务 vs SOA 对照表来自易混淆对照表维度SOA微服务服务粒度粗粒度业务模块级如交易服务细粒度单一职责如订单服务“支付服务”通信ESB总线SOAP/WS-*REST、gRPC、MQ去中心化数据治理全局数据模式常有企业级数据仓库每个服务独立数据库部署常捆绑部署如EAR包独立容器化DockerK8s组织团队对应业务线大团队小团队2个披萨团队适用场景企业异构系统集成互联网产品快速迭代 知识串联二质量属性战术场景性能场景——当前系统50万QPS刺激源双11期间5000万并发消费者 刺激同时提交订单请求 环境系统高峰期50万QPS 制品订单服务集群 响应成功下单并返回订单号 度量99%请求在200ms内完成99.99%在500ms内完成对应战术资源需求战术 →限流Sentinel缓存多级CaffeineRedis资源管理战术 →水平扩展K8s HPA自动伸缩多副本每个服务≥3副本可修改性场景——快速迭代需求刺激源产品经理 刺激要求在支付流程中新增分期支付功能 环境系统已上线运行 制品支付服务 响应新增独立的分期微服务不修改现有支付服务 度量2人天内完成开发灰度上线0停机对应战术局部化修改 →微服务限界上下文隔离防止连锁反应 →API版本控制v1/v2防腐层ACL 知识串联三必背金句关联“采用DDD限界上下文进行服务拆分每个服务对应一个业务能力单元遵循高内聚低耦合原则。”— 这条金句直接回答服务怎么切“分布式事务中核心链路使用Seata AT模式保证强一致性非核心使用TCC或消息表实现最终一致性。”— 回答数据拆分后一致性问题怎么解决“通过引入消息队列实现异步削峰填谷将瞬时写入洪峰转化为稳定的流式处理。”— 回答50万QPS怎么抗 知识串联四必背公式卡Service拆分后的计算50万QPS下单场景若订单服务部署8个Pod每Pod处理6万QPS → 总吞吐48万加上缓存和非核心降级 → 50万QPS可达熔断阈值500ms超时 → 需确保平均RT300ms六、今日金句“微服务和SOA的本质区别不在于技术栈而在于粒度与治理边界SOA以服务复用为中心通过ESB集成异构系统微服务以独立交付为中心通过API Gateway统一管控每个服务做到数据自治、独立部署、独立伸缩——选择哪条路线取决于系统是’需要连接多个异构系统’还是’需要快速独立迭代部署’。”背诵要点一句话概括了SOA复用ESB和微服务独立API Gateway的核心区别以及选型依据。考场上直接默写第一句再结合案例展开。