上门做饭系统架构设计:基于Spring Cloud的微服务实践与源码解析
一、系统架构总览与业务背景1.1 上门做饭系统业务场景分析上门做饭系统是一种创新的O2O生活服务平台连接专业厨师与有烹饪需求的用户。系统核心业务包括用户端App下单、支付、评价、厨师端App接单、路线规划、服务管理、后台管理系统订单监控、厨师管理、数据分析三大模块。1.2 微服务架构选型依据面对高并发订单、实时地理位置服务、多角色协同等复杂需求传统单体架构难以应对。我们选择Spring Cloud Alibaba生态体系原因如下服务治理Nacos同时支持服务注册发现与配置中心流量控制Sentinel在高并发订单场景下的熔断降级分布式事务Seata保证订单-支付-库存数据一致性网关路由Spring Cloud Gateway实现动态路由与权限过滤二、核心微服务模块拆分与设计2.1 服务拆分策略领域驱动设计// 领域服务划分示例 Service Slf4j public class OrderDomainService { // 订单核心领域服务 } // 微服务模块划分 - user-service: 用户管理、会员体系 (端口: 8001) - chef-service: 厨师管理、资质审核 (端口: 8002) - order-service: 订单生命周期管理 (端口: 8003) - payment-service: 支付、退款、对账 (端口: 8004) - scheduling-service: 智能调度、路径规划 (端口: 8005) - evaluation-service: 评价、评分、投诉 (端口: 8006) - notification-service: 消息推送、短信、站内信 (端口: 8007)2.2 服务间通信设计// 使用OpenFeign声明式服务调用 FeignClient(name scheduling-service, fallback SchedulingServiceFallback.class) public interface SchedulingServiceClient { PostMapping(/api/scheduling/assign) ResponseDataChefAssignVO assignChef(RequestBody OrderAssignDTO dto); GetMapping(/api/scheduling/chef/{chefId}/status) ResponseDataChefStatusVO getChefStatus(PathVariable Long chefId); } // 集成Ribbon负载均衡 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule ConnectTimeout: 2000 ReadTimeout: 5000三、关键技术实现与源码解析3.1 基于Nacos的服务注册与发现// 服务注册配置 Configuration EnableDiscoveryClient public class NacosConfig { Bean LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } } // application.yml配置 spring: application: name: order-service cloud: nacos: discovery: server-addr: ${NACOS_HOST:localhost}:8848 namespace: ${NAMESPACE:dev} group: COOKING_GROUP config: file-extension: yaml refresh-enabled: true3.2 订单状态机设计与实现// 订单状态枚举定义 public enum OrderStatus { PENDING_PAYMENT(1, 待支付), PAID(2, 已支付), ASSIGNING_CHEF(3, 分配厨师中), CHEF_ACCEPTED(4, 厨师已接单), CHEF_ON_THE_WAY(5, 厨师前往中), COOKING(6, 烹饪中), DELIVERING(7, 送餐中), COMPLETED(8, 已完成), CANCELLED(9, 已取消); // 状态流转校验逻辑 public boolean canTransferTo(OrderStatus targetStatus) { MapOrderStatus, ListOrderStatus transferRules new HashMap(); transferRules.put(PENDING_PAYMENT, Arrays.asList(PAID, CANCELLED)); transferRules.put(PAID, Arrays.asList(ASSIGNING_CHEF, CANCELLED)); // ... 其他状态流转规则 return transferRules.getOrDefault(this, Collections.emptyList()) .contains(targetStatus); } } // 状态机服务实现 Service public class OrderStateMachine { Autowired private OrderRepository orderRepository; Transactional(rollbackFor Exception.class) public Order transferStatus(Long orderId, OrderStatus newStatus, String operator, String remark) { Order order orderRepository.findByIdWithLock(orderId); if (!order.getStatus().canTransferTo(newStatus)) { throw new BusinessException(状态流转不合法); } // 记录状态变更日志 OrderStatusLog log new OrderStatusLog(); log.setOrderId(orderId); log.setFromStatus(order.getStatus()); log.setToStatus(newStatus); log.setOperator(operator); log.setRemark(remark); orderStatusLogRepository.save(log); // 更新订单状态 order.setStatus(newStatus); order.setUpdateTime(new Date()); // 发布状态变更事件 applicationContext.publishEvent( new OrderStatusChangedEvent(this, order, newStatus)); return orderRepository.save(order); } }3.3 分布式事务解决方案Seata应用// 订单创建-支付分布式事务 Service Slf4j public class OrderCreateService { GlobalTransactional(name createOrderAndPay, timeoutMills 60000, rollbackFor Exception.class) public OrderVO createOrder(OrderCreateDTO dto) { // 1. 创建订单本地事务 Order order orderService.createOrder(dto); // 2. 扣减库存远程调用 inventoryServiceClient.deduct(dto.getItems()); // 3. 创建支付单远程调用 PaymentDTO paymentDTO buildPaymentDTO(order); paymentServiceClient.createPayment(paymentDTO); // 4. 发送创建成功消息 messageService.sendOrderCreatedMessage(order); return convertToVO(order); } // TCC模式补偿方法 Transactional public boolean compensateCreateOrder(Long orderId) { log.info(开始补偿订单创建流程订单ID: {}, orderId); // 回滚订单、恢复库存、取消支付单 return orderService.cancelOrder(orderId) inventoryServiceClient.restore(orderId) paymentServiceClient.cancel(orderId); } }四、软件设计图五、总结与优化方向7.1 系统性能优化数据库层面读写分离、分库分表策略按订单日期水平分表缓存策略多级缓存Redis Caffeine、热点数据预加载异步处理非核心业务异步化评价、消息推送7.2 未来扩展规划智能推荐基于用户行为的个性化厨师推荐动态定价基于供需关系的智能定价模型AI质检基于计算机视觉的菜品质量检测物联网集成智能厨电设备联动控制