微服务架构实战 Java+MySQL实现多校区食堂订餐系统
·
微服务架构设计
采用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模式解决分布式事务问题:
- 订单服务创建订单状态为"处理中"
- 并行调用支付服务和库存服务
- 任何服务失败时触发补偿事务
// 分布式事务示例
@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的安全方案:
- 用户通过密码模式获取token
- 网关层统一鉴权(JWT验证)
- 敏感数据使用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"]
更多推荐
所有评论(0)