一、总体架构设计(解决 show run 卡顿的核心)
设计目标
-
show run 不再访问 driver → SDK → 芯片
-
查询操作毫秒级返回
-
配置实时同步,保证一致性
-
大规模设备也不再卡顿
整体架构图
cpp
┌──────────────────┐
│ 用户/界面 │
└───────▲──────────┘
│ show run
┌───────┴──────────┐
│ 网管 NMS/Controller
│ (维护 Shadow Config)
└───────▲──────────┘
│ sync + set
┌───────┴──────────┐
│ 设备 Agent/CLI │ ← 只在少数情况访问
└───────▲──────────┘
│
┌───────┴──────────┐
│ driver → SDK → HW│
└──────────────────┘
二、VLAN Shadow 数据结构设计
以下结构可以满足几乎所有厂商的 VLAN 功能:
cpp
{
"vlans": {
"10": {
"exist": true,
"name": "sales",
"ports": {
"ge0/1": "untagged",
"ge0/2": "tagged"
},
"svi": {
"enable": true,
"ip": "192.168.10.1/24"
},
"qinq": {
"mode": "none"
}
},
"20": {
"exist": true,
"ports": {
"ge0/3": "untagged"
}
}
},
"meta": {
"last_sync_time": "2025-11-24 13:00:00",
"device_reboot_flag": false
}
}
关键字段:
-
exist: VLAN 是否存在
-
ports: 每个端口的 tagged/untagged
-
svi: 三层接口存在与否
-
qinq: 描述双 VLAN 业务
-
meta: 同步信息
三、核心流程:SET / GET / Sync
➤ 1. 配置下发(SET)
当 NMS 下发 VLAN 配置时:
cpp
发送配置到设备 → 设备返回成功 → NMS 写入 shadow
示例:
cpp
add vlan 10 tagged ge0/1, ge0/2
更新 shadow:
cpp
shadow.vlans[10].exist = true
shadow.vlans[10].ports["ge0/1"] = "tagged"
shadow.vlans[10].ports["ge0/2"] = "tagged"
➤ 2. show run(GET)
不再访问 driver,不再访问设备!
流程:
cpp
NMS 直接读取 shadow 的 JSON → 格式化 → 返回
时间:通常 < 2ms。
彻底解决"show run vlan 卡顿"问题。
➤ 3. 同步机制(Sync)
为了解决"设备被别的系统改配置"等情况,需要同步:
同步触发场景
-
设备重启 → 自动同步一次
-
每 10 分钟后台同步一次(不影响前端 show)
-
配置失败事件 → 修正节点
-
管理员人工点击"同步设备实际配置"
同步方式
cpp
设备一次性捞 driver → 返回当前 VLAN 配置 → NMS 更新 shadow
相比每次 show 都捞,压力低 100 倍。
四、实际落地示例(伪代码)
1. SET(配置下发)
cpp
def set_vlan_config(device, vlan_id, port, mode):
rsp = device.send("set vlan {} {} {}".format(vlan_id, port, mode))
if rsp.success:
shadow.vlans[vlan_id]["exist"] = True
shadow.vlans[vlan_id]["ports"][port] = mode
save_shadow()
2. GET(show run)
cpp
def show_vlan():
return render_shadow(shadow.vlans)
3. SYNC(校准)
cpp
def sync_from_device():
data = device.send("dump vlan all") # 只在同步时访问底层
shadow = parse(data)
save_shadow()
五、时间性能对比
| 操作方式 | 每次 show run 耗时 | 多 VLAN 情况 | 设备压力 |
|---|---|---|---|
| 旧:直接捞 driver | 100ms--3000ms | VLAN 越多越卡 | 高 |
| 新:shadow 机制 | < 2ms | VLAN 再多也不变 | 极低 |
"解决 show run 卡的问题"完全可以达到。