docs(ops): document location source arbitration

This commit is contained in:
lingniu
2026-07-16 11:24:08 +08:00
parent 8487783564
commit 7299f42b0e

View File

@@ -0,0 +1,88 @@
# 车辆定位源仲裁运维说明
## 目标
同一车辆可能同时接入 GB32960、宇通 MQTT、多个 JT808 终端。全局监控不能简单选择最后上报的数据,否则不同设备的定位误差会让车辆在地图上来回跳动。
当前生产规则如下:
- 跨协议默认优先级GB32960、YUTONG_MQTT、JT808候选数据在 10 分钟内有效。
- JT808 按终端保存独立快照,不再由同 VIN 的多个终端互相覆盖。
- JT808 默认优先级:直连终端 20、平台转发 30、未知来源 40数值越小越优先。
- 当前终端有 5 分的黏性权重,新终端连续 3 个有效点后才允许接管。
- 两个新鲜 JT808 来源相差超过 200 米时标记冲突并保持当前来源,避免自动跳点。
- 单终端相邻点超过 `max(500 米, 间隔秒数 × 70 米)` 时拒绝该点。
- 前端仅在定位来源未变化时执行平滑移动;来源切换时直接重置动画,避免绘制虚假轨迹。
## 数据表
- `vehicle_realtime_location_source`JT808 终端级实时位置和质量状态。
- `vehicle_location_source_policy`:车辆、协议、终端级启停和优先级。
- `vehicle_realtime_location`:仲裁后的协议级位置;`source_key` 表示当前终端,`location_conflict``location_conflict_distance_m` 表示冲突状态。
查看某辆车的 JT808 候选来源:
```sql
SELECT source_key, phone, device_id, source_kind, source_endpoint,
quality_status, quality_reason, consecutive_good_samples,
latitude, longitude, received_at
FROM vehicle_realtime_location_source
WHERE vin = ? AND protocol = 'JT808'
ORDER BY received_at DESC;
```
## 指定权威终端
先从候选表复制完整 `source_key`。将权威终端设置为较小优先级;建议保留其他终端作为备用,而不是直接禁用。
```sql
INSERT INTO vehicle_location_source_policy
(vin, protocol, source_key, enabled, priority, remark)
VALUES
(?, 'JT808', ?, 1, 1, '人工确认的权威定位终端')
ON DUPLICATE KEY UPDATE
enabled = VALUES(enabled),
priority = VALUES(priority),
remark = VALUES(remark);
```
禁用确认异常的终端:
```sql
INSERT INTO vehicle_location_source_policy
(vin, protocol, source_key, enabled, priority, remark)
VALUES
(?, 'JT808', ?, 0, 100, '异常终端,停止参与定位仲裁')
ON DUPLICATE KEY UPDATE
enabled = VALUES(enabled),
remark = VALUES(remark);
```
恢复默认策略时删除对应配置:
```sql
DELETE FROM vehicle_location_source_policy
WHERE vin = ? AND protocol = 'JT808' AND source_key = ?;
```
配置在下一条该车辆 JT808 定位消息到达时生效,不需要重启服务。
## 监控与排查
主要观察指标:
- `vehicle_realtime_store_updates_total{protocol="JT808",status="ok",store="mysql"}`
- `vehicle_realtime_store_update_duration_ms_histogram{protocol="JT808",status="ok",store="mysql"}`
- `vehicle_process_heap_alloc_bytes`
冲突车辆查询:
```sql
SELECT vin, source_key, location_conflict, location_conflict_distance_m,
latitude, longitude, received_at
FROM vehicle_realtime_location
WHERE protocol = 'JT808' AND location_conflict = 1
ORDER BY location_conflict_distance_m DESC;
```
冲突期间保留当前来源是预期行为。人工确认哪个终端可信后,再写入策略表;不要通过删除实时快照或修改业务资产数据解决定位冲突。