微服务架构
总体分层
资源接入层
场站管理 / 充电桩台账 / 容量与基线口径
|
v
业务编排层
需求响应事件 -> 申报 -> 调度分配 -> 执行监测
|
v
经营核算层
效果评估 -> 结算分账 -> 我的收益
|
v
展示应用层
仪表盘 / 事件中心 / 调度工作台 / 运行监控大屏
架构原则
- 一条事件主线:申报、分配、执行、评估、结算全部挂在事件上,任何环节都能从事件详情下钻到底。
- 口径先行:可调容量、基线功率、响应电量、分账比例在数据模型层定义一次,页面与报表共用。
- 状态自动流转:事件状态由定时任务按时间推进,减少人工改状态造成的口径混乱。
- 角色视图复用:平台、运营商、场站复用同一套页面,由后端按角色收窄数据,不做三套界面。
- 失败显式化:申报拒绝、分配超容量、评估不合格都是正常业务状态,页面直接呈现而不是静默跳过。
微服务拓扑

flowchart LR
UI[pc_web 管理端/大屏] --> GW[vpp-gateway 48080]
GW --> AUTH[vpp-auth 39200]
GW --> SYS[vpp-system 39201]
GW --> EVT[vpp-event-service 39310]
GW --> DSP[vpp-dispatch-service 39320]
EVT --> MYSQL[(MySQL witos_platform)]
DSP --> MYSQL
SYS --> MYSQL
GW --> NACOS[Nacos 注册/配置中心]
EVT --> NACOS
DSP --> NACOS
AUTH --> REDIS[(Redis 令牌/缓存)]
SYS --> REDIS
网关与认证层
vpp-gateway 负责统一路由、登录态校验、跨域与限流,业务路由按前缀拆分:/vpp-event/** 转发到事件服务,/vpp-dispatch/** 转发到调度服务,均去掉一级前缀后进入后端控制器。vpp-auth 负责登录签发与刷新。
事件服务(vpp-event-service)
覆盖资源域与事件域:场站管理、充电桩台账、资源统计、需求响应事件、申报确认与仪表盘指标。事件状态自动流转与功率/容量模拟数据任务也在该服务内。
调度服务(vpp-dispatch-service)
覆盖调度域与经营域:调度分配与下发、执行监测与偏差分析、效果评估、结算分账与收益统计。
支撑模块
vpp-system 提供用户、角色、菜单、租户与字典;vpp-job 提供分布式定时任务调度;vpp-file 提供导入导出文件服务;vpp-monitor 提供服务运行监控面板。
核心设计
1. 事件驱动的状态机
事件创建后为“待响应”,每分钟一次的定时任务扫描所有未结束事件:到达 start_time 置为“响应中”,到达 end_time 置为“已结束”。申报服务在同一事务边界内校验事件状态——事件进入响应中后拒绝新申报,保证执行期间容量口径稳定。
事件:0 待响应 -> 1 响应中 -> 2 已结束(定时任务每分钟推进)
申报:0 待确认 -> 1 已确认 / 2 已拒绝
分配:0 待确认 -> 1 已确认 -> 2 已下发
结算:0 未结算 -> 1 已结算(记录确认时间/打款时间)
2. 两级调度确认
调度分配先在桩级生成目标功率方案,再经过运营商分配视图按运营商维度确认,最后下发。两级确认保证了平台与运营商之间的责任边界:平台负责事件与总量,运营商负责旗下场站的组织落实。
3. 多租户与角色收窄
请求经网关携带租户与用户身份,后端按“租户 → 场站 → 桩”的范围二次校验。平台侧租户(9999)拥有全局视角;运营商租户自动过滤到旗下场站;场站角色(由场站记录关联的账号识别)只看到本场站数据。列表、详情、统计、导出接口使用同一套范围规则。
4. 定时任务与数据自供给
当前版本以内置定时任务维持数据链路运转,保证演示与试点环境无需外部采集系统也能完整跑通业务:
| 任务 | 周期 | 职责 |
|---|---|---|
| 事件状态流转 | 每分钟 | 按起止时间推进事件状态 |
| 执行监测刷新 | 每分钟 | 生成目标与实际功率的对比记录 |
| 分钟功率模拟 | 每 15 分钟 + 每日 00:20 补算 | 写入桩级分钟功率数据 |
| 日功率回填 | 每日 00:10 + 启动补算 | 汇总 7 日基线功率与日功率 |
| 容量快照 | 每小时过 5 分 + 重启补写 | 记录聚合可调容量快照 |
| 桩状态刷新 | 每小时整点 | 按资源与小时数确定性抽签更新在线/离线/故障 |
桩状态抽签以“资源 ID + 小时”为随机种子,同一小时内重复查询结果稳定,避免页面刷新时状态抖动。
领域边界
| 领域 | 核心职责 | 主要数据 |
|---|---|---|
| 组织权限 | 租户、用户、角色、菜单、数据范围 | sys_user、sys_role、sys_tenant |
| 站点资产 | 场站、容量、分成比例、场站方账号 | dr_station |
| 资源台账 | 充电桩、额定/可调功率、基线、参与状态 | dr_resource、dr_resource_power_daily、dr_resource_power_minute |
| 事件申报 | 需求响应事件、申报与确认 | dr_event、dr_apply |
| 调度执行 | 桩级分配、运营商分配、执行监测 | dr_dispatch、dr_operator_dispatch、dr_execute |
| 经营结算 | 效果评估、结算分账、收益统计 | dr_assess、dr_settlement |
跨域引用以事件 ID、场站 ID、桩编号为联结键。例如评估生成时按事件回读分配与执行记录,结算生成时按事件回读评估电量,不允许绕过事件直接拼装数字。
一致性策略
业务库事务
申报确认、分配下发、评估与结算生成等强一致操作使用本地事务。删除统一使用逻辑删除标志,历史业务数据可追溯。
数据自供给幂等
模拟与回填任务按“资源 + 时间点”作为幂等键,重复执行只更新不重复插入;服务重启时检测缺口并补写,保证曲线连续。
缓存策略
Redis 承载登录令牌、权限信息与短期缓存。业务主数据以 MySQL 为准,缓存失效时回源读取,不影响业务正确性。
请求链路
sequenceDiagram
actor User as 调度员
participant GW as vpp-gateway
participant EVT as vpp-event-service
participant DSP as vpp-dispatch-service
participant DB as MySQL
User->>GW: POST /vpp-dispatch/dispatch/allocate/{eventId}
GW->>GW: 令牌校验/限流/路由
GW->>DSP: 转发(去掉 /vpp-dispatch 前缀)
DSP->>DB: 读取事件/申报/桩台账
DSP->>DSP: 按可调容量生成桩级目标
DSP->>DB: 写入分配记录(待确认)
DSP-->>User: 返回分配方案
高可用与降级
| 依赖故障 | 影响 | 降级策略 |
|---|---|---|
| Nacos 不可用 | 服务发现与配置读取失败 | 已启动实例按本地缓存继续服务,禁止滚动重启 |
| MySQL 不可用 | 全部业务写入中断 | 网关快速失败,页面提示稍后重试,不做假数据 |
| Redis 不可用 | 新登录失败 | 已登录用户在令牌有效期内可继续访问 |
| 单服务异常 | 对应业务域不可用 | 网关路由隔离,另一服务不受影响 |
| 模拟任务失败 | 曲线与基线数据滞后 | 任务幂等重跑,启动时自动补算缺口 |
可观测性
平台通过 vpp-monitor 查看各服务运行状态;业务侧关键观测点包括:事件状态流转是否按时推进、容量快照是否连续、分配总量是否超过申报容量、评估合格率异常波动、结算金额与响应电量的比例是否匹配单价。所有写操作记录创建人与创建时间,状态变更记录更新人与更新时间。
技术组件
| 组件 | 用途 |
|---|---|
| Spring Cloud Gateway | 统一路由、鉴权、跨域与限流 |
| Nacos(命名空间 vpp) | 服务注册发现与配置管理 |
| Spring Security + OAuth2 令牌 | 登录认证与接口权限 |
| MySQL 5.7 | 系统库与业务库(witos_platform) |
| Redis | 令牌、权限缓存与短期缓存 |
| MyBatis-Plus | 数据访问与逻辑删除 |
| Vue2 + Element UI + ECharts | 管理端页面与大屏可视化 |
可扩展性设计
- 资源类型扩展:当前以充电桩为最小调度对象,资源模型保留类型与系数维度,接入储能、空调等负荷只需扩展台账字段与口径参数。
- 事件类型扩展:事件类型以枚举字典维护,削峰/填谷之外新增类型不需要改动状态机。
- 采集链路替换:功率与状态当前由内置模拟任务供给,替换为真实采集通道时只需替换数据写入来源,业务模型不变。
- 分账规则扩展:分账比例在场站与结算单两级维护,可平滑演进为按合同、按时段的多级分账。
技术决策记录
重要架构变更应形成记录,至少包括背景、选择、替代方案与影响。当前已沉淀的关键决策:
- 基线功率采用 7 日平均功率而不是事件前一日功率,降低单日波动对评估的干扰。
- 事件状态由定时任务推进而不是请求触发,避免无人访问时状态停滞。
- 调度分配到桩级而不是场站级,保证执行监测与偏差分析可定位。
- 结算单在评估之后生成,电量未经评估不进入结算。
