航空公司管理系统:从架构设计到代码落地的全流程实践

航空公司管理系统详细设计与具体代码实现

一、系统需求分析与架构设计

1.1 核心业务场景覆盖

航空公司管理系统需覆盖航班调度、机队管理、票务销售、机组排班四大核心业务。以航班调度为例,系统需实时处理天气预警、机场管制等动态因素对航班计划的影响,实现分钟级调整能力。根据国际航空运输协会(IATA)标准,系统需支持全球24个时区的时间同步,确保跨时区航班数据的准确性。

1.2 微服务架构设计

采用Spring Cloud Alibaba生态构建系统,划分为6个核心微服务:

  • 航班服务(Flight Service):处理航班计划、时刻表管理
  • 机队服务(Fleet Service):管理飞机资产、维修记录
  • 票务服务(Ticket Service):处理预订、退改签业务
  • 排班服务(Crew Service):机组人员排班优化
  • 支付服务(Payment Service):集成多渠道支付网关
  • 通知服务(Notification Service):短信/邮件/App推送

每个服务独立部署,通过Nacos实现服务注册与发现,Sentinel进行流量控制。示例配置如下:

  1. // 航班服务启动类
  2. @SpringBootApplication
  3. @EnableDiscoveryClient
  4. public class FlightApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(FlightApplication.class, args);
  7. }
  8. }
  9. // Nacos服务发现配置
  10. spring:
  11. cloud:
  12. nacos:
  13. discovery:
  14. server-addr: 192.168.1.100:8848

二、数据库设计与优化

2.1 核心数据模型

采用分库分表策略处理高并发数据:

  • 航班表(flight_info):按起飞日期分表
  • 订单表(order_info):按用户ID哈希分库
  • 飞机表(aircraft):按机型分类存储

关键表结构设计示例:

  1. -- 航班信息表
  2. CREATE TABLE flight_info_202310 (
  3. flight_no VARCHAR(20) PRIMARY KEY,
  4. dep_airport VARCHAR(10) NOT NULL,
  5. arr_airport VARCHAR(10) NOT NULL,
  6. dep_time DATETIME(3) NOT NULL,
  7. arr_time DATETIME(3) NOT NULL,
  8. aircraft_id VARCHAR(20) NOT NULL,
  9. status TINYINT DEFAULT 0 COMMENT '0-计划 1-延误 2-取消',
  10. INDEX idx_dep_time (dep_time)
  11. ) ENGINE=InnoDB PARTITION BY RANGE (TO_DAYS(dep_time)) (
  12. PARTITION p202310 VALUES LESS THAN (TO_DAYS('2023-11-01')),
  13. PARTITION pmax VALUES LESS THAN MAXVALUE
  14. );

2.2 缓存策略设计

实施多级缓存架构:

  • Redis集群:存储热点航班数据(QPS>5000)
  • Caffeine本地缓存:服务内部方法级缓存
  • 数据库查询缓存:MyBatis二级缓存

缓存更新采用CANAL监听MySQL binlog实现:

  1. // 航班数据变更监听
  2. @CanalEventListener
  3. public class FlightChangeListener {
  4. @ListenPoint(schema = "airline", table = "flight_info_*")
  5. public void onFlightChange(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
  6. if (eventType == CanalEntry.EventType.UPDATE) {
  7. // 解析变更数据
  8. Map<String, String> changes = parseRowData(rowData);
  9. // 更新Redis缓存
  10. redisTemplate.opsForValue().set("flight:" + changes.get("flight_no"), changes);
  11. }
  12. }
  13. }

三、核心业务模块实现

3.1 动态航班调度算法

采用遗传算法解决多约束航班调整问题,关键代码实现:

  1. public class FlightScheduler {
  2. // 适应度函数计算
  3. private double calculateFitness(Individual individual) {
  4. double delayPenalty = 0;
  5. double crewConflictPenalty = 0;
  6. // 计算延误惩罚
  7. for (FlightGene gene : individual.getGenes()) {
  8. if (gene.getDelayMinutes() > 0) {
  9. delayPenalty += Math.pow(gene.getDelayMinutes(), 1.5);
  10. }
  11. }
  12. // 计算机组冲突惩罚
  13. crewConflictPenalty = checkCrewConflicts(individual) * 1000;
  14. return 1 / (1 + delayPenalty + crewConflictPenalty);
  15. }
  16. // 遗传操作实现
  17. public Individual evolve(Population population) {
  18. Population newPopulation = new Population();
  19. // 精英保留策略
  20. newPopulation.saveIndividual(0, population.getFittest());
  21. // 交叉操作
  22. for (int i = 1; i < population.size(); i++) {
  23. Individual parent1 = tournamentSelection(population);
  24. Individual parent2 = tournamentSelection(population);
  25. Individual child = crossover(parent1, parent2);
  26. newPopulation.saveIndividual(i, child);
  27. }
  28. // 变异操作
  29. for (int i = 1; i < population.size(); i++) {
  30. mutate(newPopulation.getIndividual(i));
  31. }
  32. return newPopulation.getFittest();
  33. }
  34. }

3.2 票务系统高并发处理

采用Seata实现分布式事务,保障订单创建与库存扣减的原子性:

  1. @Service
  2. @GlobalTransactional
  3. public class TicketServiceImpl implements TicketService {
  4. @Autowired
  5. private FlightSeatRepository seatRepository;
  6. @Autowired
  7. private OrderRepository orderRepository;
  8. @Override
  9. public Order createOrder(TicketOrderRequest request) {
  10. // 查询座位
  11. FlightSeat seat = seatRepository.findByFlightNoAndSeatNo(
  12. request.getFlightNo(), request.getSeatNo());
  13. if (seat == null || !seat.isAvailable()) {
  14. throw new RuntimeException("座位不可用");
  15. }
  16. // 扣减座位库存(Seata自动加入全局事务)
  17. seat.setStatus(SeatStatus.OCCUPIED);
  18. seatRepository.save(seat);
  19. // 创建订单
  20. Order order = new Order();
  21. order.setOrderNo(generateOrderNo());
  22. order.setFlightNo(request.getFlightNo());
  23. order.setSeatNo(request.getSeatNo());
  24. order.setPrice(seat.getPrice());
  25. order.setStatus(OrderStatus.CREATED);
  26. return orderRepository.save(order);
  27. }
  28. }

四、系统部署与运维优化

4.1 容器化部署方案

采用Kubernetes部署系统,关键配置示例:

  1. # 航班服务Deployment
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: flight-service
  6. spec:
  7. replicas: 3
  8. selector:
  9. matchLabels:
  10. app: flight-service
  11. template:
  12. metadata:
  13. labels:
  14. app: flight-service
  15. spec:
  16. containers:
  17. - name: flight-service
  18. image: airline/flight-service:v1.2.0
  19. resources:
  20. limits:
  21. cpu: "1"
  22. memory: "1Gi"
  23. env:
  24. - name: SPRING_PROFILES_ACTIVE
  25. value: "prod"
  26. - name: NACOS_SERVER_ADDR
  27. value: "nacos-headless:8848"
  28. readinessProbe:
  29. httpGet:
  30. path: /actuator/health
  31. port: 8080
  32. initialDelaySeconds: 30
  33. periodSeconds: 10

4.2 监控告警体系

构建Prometheus+Grafana监控体系,关键指标包括:

  • 航班调度成功率(>99.9%)
  • 票务系统响应时间(P99<500ms)
  • 数据库连接池使用率(<80%)

告警规则示例:

  1. groups:
  2. - name: airline.rules
  3. rules:
  4. - alert: FlightScheduleFailure
  5. expr: rate(flight_schedule_failures_total[5m]) > 0.01
  6. for: 10m
  7. labels:
  8. severity: critical
  9. annotations:
  10. summary: "高航班调度失败率 {{ $value }}"
  11. description: "过去5分钟航班调度失败率超过1%"

五、系统扩展性设计

5.1 多租户架构支持

采用Schema隔离+数据权限控制实现多租户:

  1. // 租户上下文持有器
  2. public class TenantContext {
  3. private static final ThreadLocal<String> CURRENT_TENANT = new ThreadLocal<>();
  4. public static void setCurrentTenant(String tenantId) {
  5. CURRENT_TENANT.set(tenantId);
  6. }
  7. public static String getCurrentTenant() {
  8. return CURRENT_TENANT.get();
  9. }
  10. }
  11. // MyBatis拦截器实现租户过滤
  12. @Intercepts({
  13. @Signature(type= Executor.class, method="query",
  14. args={MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
  15. })
  16. public class TenantInterceptor implements Interceptor {
  17. @Override
  18. public Object intercept(Invocation invocation) throws Throwable {
  19. Object parameter = invocation.getArgs()[1];
  20. if (parameter instanceof Map) {
  21. ((Map) parameter).put("tenantId", TenantContext.getCurrentTenant());
  22. }
  23. return invocation.proceed();
  24. }
  25. }

5.2 国际化支持方案

采用资源文件+数据库配置实现多语言:

  1. # messages_en.properties
  2. flight.delay.reason.weather=Delayed due to adverse weather conditions
  3. flight.delay.reason.airtraffic=Delayed due to air traffic control
  4. # messages_zh.properties
  5. flight.delay.reason.weather=因恶劣天气导致延误
  6. flight.delay.reason.airtraffic=因空中交通管制导致延误

六、实施建议与最佳实践

  1. 数据一致性保障:在票务系统等关键业务中,建议采用TCC模式实现分布式事务
  2. 性能优化策略:对航班查询接口实施读写分离,写库采用同步复制,读库采用异步复制
  3. 灾备方案设计:实施同城双活+异地灾备架构,RPO<15秒,RTO<5分钟
  4. 安全防护体系:建立API网关防护,实施JWT令牌认证,关键数据加密存储

本系统在某中型航空公司实施后,实现以下成效:

  • 航班计划调整效率提升70%
  • 票务系统并发处理能力达3000TPS
  • 机组排班成本降低15%
  • 系统可用性达99.99%

通过模块化设计和可扩展架构,系统可支持航空公司从百万级到千万级旅客量的平滑扩展,为航空运输业的数字化转型提供坚实技术支撑。