
目录一、分布式设计1. 微服务拆分2. 分布式事务3. 分布式定时任务4. 分布式长连接WebSocket5. 分布式 ID6. 分布式链路追踪二、三高设计高并发、高可用、高性能高并发高可用高性能三、缓存设计 Redis1. 缓存内容2. 缓存策略3. 注意点四、AI 模块设计Spring‑AI 集成1. RAG 知识库2. Agent Function Calling3. AI 异常分析4. 约束五、大数据量设计1. 数据分层2. 分库分表 Sharding‑JDBC3. 上报时序海量测点数据处理4. Canal 数据同步5. 报表统计大数据计算6. 查询兼容六、核心风险汇总业务背景面向充电桩场站、车主用户、运营管理端核心业务包含设备长连接上报充电数据、订单创建、峰谷分时计价、异常订单处理、订单结算、设备监控、报表统计。 技术栈SpringCloud Alibaba (Nacos、Sentinel、Gateway、Feign、Seata)、RocketMQ、Redis、Canal、Elasticsearch、Sharding‑JDBC、Spring‑AI、XXL‑Job、WebSocket、SkyWalking、MySQL。 下面从分布式、三高、缓存、AI、大数据量五个维度展开设计附带业务落地、技术选型、风险点与关键实现思路。一、分布式设计1. 微服务拆分服务模块职责网关服务 Gateway统一入口、鉴权、限流、路由、请求日志用户服务车主账号、场站管理员、权限设备服务充电桩设备管理、设备状态、WebSocket 长连接管理订单服务充电订单创建、状态流转、异常订单修复、结算计价服务峰谷电价、服务费计算、跨时段充电价格拆分BigDecimal 高精度计价账单结算服务账单生成、对账、资金流水告警监控服务设备故障、充电异常、阈值告警推送统计报表服务场站运营、充电量、营收统计注册配置中心Nacos服务注册发现 动态配置电价规则、告警阈值动态下发无需重启服务。2. 分布式事务充电业务设备上报开始充电 → 创建订单 → 扣预授权充电结束 → 计算费用 → 生成账单。核心场景订单、账单、资金流水跨库操作使用Seata AT 模式非强一致场景设备状态更新、日志RocketMQ 最终一致性避免大事务锁表。防悬挂、空回滚配置开启事务超时时间根据充电业务设置充电可能持续数小时长流程不使用 Seata 长事务拆成本地事务 消息补偿。3. 分布式定时任务使用 XXL‑Job异常订单扫描修复处理充电桩离线、上报断连导致订单状态僵死过期预授权释放统计报表离线计算分布式防重任务内置分片 DB 锁避免多实例重复执行。4. 分布式长连接WebSocket充电桩设备通过 WebSocket 上报实时充电电压电流、电量。问题多实例部署设备连接落在某一个网关 / 设备服务实例其他实例拿不到该设备连接推送消息错位。方案Redis 记录设备 ID 与服务实例地址映射需要下发指令时先查 Redis 路由到对应实例心跳保活设备离线主动清理映射消息可靠性上报数据落 MQ 做兜底不依赖长连接可靠性。5. 分布式 ID订单号、流水号雪花算法保证多实例全局唯一。6. 分布式链路追踪SkyWalking全链路埋点设备上报 → MQ 消费 → 订单创建 → 计价便于排查线上充电数据丢失、计价错误问题。二、三高设计高并发、高可用、高性能高并发流量来源大量充电桩设备并发上报、小程序车主查询订单、场站后台查询。Spring‑Gateway 做网关层限流Sentinel 服务层限流区分设备上报流量、用户请求流量充电桩上报不直接写 DB先入 RocketMQ 异步消费削峰核心接口获取场站列表、订单列表做读写分离。热点流量场站高峰期多桩同时充电大量消息涌入 MQ。RocketMQ 分区扩容消费端多线程消费按设备 ID 做消息分区保证同一个充电桩消息顺序消费保证充电时序不乱。高可用服务全部多实例部署Nacos 健康检查自动剔除故障节点。MQ 集群RocketMQ 主从消息刷盘策略消息重试、死信队列。消费失败DB 抖动进入死信后台告警人工 定时任务补偿。MySQL 主从Redis 集群模式ES 集群多副本。降级熔断Sentinel。例如报表统计服务不可用时返回缓存最近报表不阻断充电核心链路。充电流程优先保障非统计功能可降级。故障隔离设备上报异常不能影响车主下单链路MQ 消费失败不打垮数据库。高性能核心充电链路尽量同步逻辑轻量化重逻辑统计、日志、推送全部异步化。Feign 调优连接池、超时时间适配充电业务JVM 调优线上避免频繁 FullGCjstat/jstack 做线上排查预案。DB 慢 SQL 治理索引优化大查询禁止走主库走从库 / ES。压测参考指标场站高峰期支持千级充电桩并发上报网关 QPS 几千级别订单创建响应控制在 100ms 以内。三、缓存设计 Redis分层缓存本地 Caffeine Redis 集群。1. 缓存内容基础字典缓存电价规则、场站基础信息变化频率低。电价规则变更频率不高使用 Canal 监听计价规则表变更自动刷新缓存不必每次查 DB热点数据缓存场站信息、用户最近订单分布式锁创建订单锁设备 ID防止同一充电桩重复生成订单WebSocket 路由映射设备 ID‑服务实例地址计数统计实时充电量、场站在线桩数实时指标放 Redis定时落地 DB防重幂等设备上报消息携带 requestIdRedis 做幂等避免重复消费产生重复订单。2. 缓存策略缓存更新策略Canal 监听 MySQL 变更更新 Redis缓存穿透空值缓存缓存击穿互斥锁缓存雪崩TTL 加随机偏移冷热区分实时热点放 Redis历史订单不常驻缓存。3. 注意点充电计价核心数据不能完全依赖缓存计价计算以 MySQL 库表为准缓存只做查询加速。四、AI 模块设计Spring‑AI 集成把 AI 作为辅助能力不侵入充电核心交易链路只做辅助能力。1. RAG 知识库知识库内容设备故障手册、业务操作手册、运营 FAQ、充电业务常见问题。场景 1运营客服问答。场站管理员、客服查询设备报错码、故障排查方案场景 2车主端智能问答充电失败、扣费疑问。实现Spring‑AI 向量数据库文档预处理分块、向量入库RAG 检索知识库生成回答。2. Agent Function CallingAgent 可以调用后端工具函数查询指定充电桩状态查询订单详情查询场站运营数据示例管理员提问 “A 场站今天有多少异常订单”Agent 调用后端业务接口拿到数据再整理自然语言返回。3. AI 异常分析设备上报大量故障码大模型做故障语义聚合把一堆原始故障码归类故障根因给出运维建议。4. 约束AI 输出结果仅供参考涉及金额、订单状态必须以业务数据库为准AI 不能修改订单、计价数据。五、大数据量设计业务产生海量数据充电桩上报时序点数据、海量充电订单、设备日志、告警记录。1. 数据分层MySQL存放热数据近期订单、基础业务数据Elasticsearch存放海量上报时序数据、历史订单、设备日志用于查询上报轨迹、日志检索冷数据历史几年订单归档迁移归档库或者归档至对象存储。2. 分库分表 Sharding‑JDBC订单表按时间分片按月分表充电订单随时间持续暴涨按月分表热表为当月、上月订单更早为冷表。读写分离Sharding‑JDBC 配置主从写走主库查询走从库冷热分离 热数据近 2 个月订单MySQL 冷历史订单迁移归档库同时同步 ES 用于查询线上业务库不保留全量历史。3. 上报时序海量测点数据处理充电桩每秒 / 每几秒上报电压、电流、电量直接写 MySQL 会压垮库。 方案设备上报→RocketMQ消费聚合批量写入 Elasticsearch 保存时序轨迹MySQL 只存订单关键快照不存每一条细粒度测点需要看充电过程曲线从 ES 查询。4. Canal 数据同步MySQL 订单、设备表变更Canal 同步到 ES解决 MySQL 分表后复杂条件查询慢问题注意计价规则表更新频次不高如果缓存刷新需求简单也可以不用 Canal采用 Nacos 配置或者程序主动更新缓存。5. 报表统计大数据计算实时指标Redis 做实时计数T1 离线统计XXL‑Job 定时任务读取 ES/MySQL计算场站营收、充电量统计结果落业务报表表避免前台直接跑大聚合 SQL。禁止业务页面直接做千万级表聚合计算。6. 查询兼容用户查近期订单走 MySQL用户查询历史很久订单路由查询归档库 ES前端做提示历史数据查询响应会较慢。六、核心风险汇总设备长连接不可靠不依赖 WebSocket 保证数据可靠MQ 做兜底同桩消息顺序消费保证充电时序。计价精度全部使用 BigDecimal浮点数禁用跨峰谷时段充电时间切片计算价格。大表膨胀订单按月分表冷热分离避免单表无限膨胀。AI 边界AI 只做辅助交易链路完全隔离大模型防止 AI 错误干预业务。MQ 消息堆积监控 RocketMQ 堆积告警消费逻辑不要写过重。