微服务架构设计

采用Spring Cloud Alibaba作为微服务框架,包含以下核心模块:

  • 用户服务(uaa-service):负责认证授权
  • 订单服务(order-service):处理订餐业务流程
  • 支付服务(payment-service):对接支付渠道
  • 校区服务(campus-service):管理校区/食堂数据
  • 通知服务(notification-service):处理短信/邮件通知
// 服务注册示例
@SpringBootApplication
@EnableDiscoveryClient
public class OrderServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }
}

数据库分库设计

按校区ID进行水平分片,采用ShardingSphere实现:

  • 主库:user_db(用户基础数据)
  • 分片1:campus1_order_db(校区1订单数据)
  • 分片2:campus2_order_db(校区2订单数据)
-- 订单表结构示例
CREATE TABLE `t_order` (
  `order_id` varchar(32) NOT NULL COMMENT '雪花算法ID',
  `campus_id` int NOT NULL COMMENT '校区标识',
  `user_id` varchar(32) NOT NULL,
  `total_amount` decimal(10,2) DEFAULT NULL,
  `status` tinyint DEFAULT '0' COMMENT '0未支付 1已支付',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

跨校区事务处理

采用Seata的SAGA模式解决分布式事务问题:

  1. 订单服务创建订单状态为"处理中"
  2. 并行调用支付服务和库存服务
  3. 任何服务失败时触发补偿事务
// 分布式事务示例
@GlobalTransactional
public void createOrder(OrderDTO orderDTO) {
    orderService.create(orderDTO);
    stockService.deduct(orderDTO.getItems());
    paymentService.process(orderDTO.getPayment());
}

高并发解决方案

针对订餐高峰期的技术处理:

  • 使用Redis缓存食堂菜单数据
  • 订单创建采用RabbitMQ削峰填谷
  • 支付结果回调使用RocketMQ保证最终一致性
# Redis配置示例
spring:
  redis:
    cluster:
      nodes:
        - 192.168.1.101:6379
        - 192.168.1.102:6379
    lettuce:
      pool:
        max-active: 20

安全控制实现

基于OAuth2的安全方案:

  1. 用户通过密码模式获取token
  2. 网关层统一鉴权(JWT验证)
  3. 敏感数据使用SM4加密存储
// 安全配置示例
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/api/v1/order/**").hasAuthority('USER')
            .anyRequest().authenticated();
    }
}

监控运维方案

通过Prometheus+Granfana实现监控:

  • 各服务暴露Actuator端点
  • 日志统一收集到ELK
  • 关键业务指标埋点
# Prometheus配置示例
management.endpoints.web.exposure.include=*
management.metrics.tags.application=${spring.application.name}

容器化部署

采用Docker Compose编排服务:

  • 每个微服务独立容器
  • MySQL集群采用主从复制
  • Redis哨兵模式保证高可用
# Dockerfile示例
FROM openjdk:11-jre
COPY target/order-service-1.0.0.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

更多推荐