
简介《中国移动综合网络资源管理系统技术规范 通用功能分册》是一份面向通信运营商网络资源管理、运维支撑及系统建设人员的企标文档适合需要理解综合网管系统功能边界、开展资源模型设计与平台实施的技术人员参考。文档围绕系统定位、总体目标与建设原则展开重点说明资源模型管理、命名管理、数据质量管理、批量导入导出与系统管理工具等基础维护能力并覆盖空间、物理、逻辑、业务资源及资源拓扑的存量管理以及调配、分析、展现等应用功能和数据共享服务同时给出流程、接口、可用性等技术功能要求。压缩包内共1个doc文件约1.03MB目录层级完整便于按章节检索。已有306人学习可作为方案编制、需求梳理和系统设计时的对照材料。1. 资源管理系统的悖论调度算法不难难的是“数据敢不敢信”很多团队接到综合网络资源管理系统的建设任务第一反应是研究调度算法、拓扑寻路、GIS 渲染。真正上线后翻车的往往不是这些服务开通工单卡住查出来是两台设备在资源库里挂了同一个编码故障定位派错班组原因是机房和基站的从属关系在三个月前的一次割接里被改丢了。资源数据一旦成为服务开通、故障支撑、备品备件、资产管理的共享底座任何一处不一致都会被下游放大。这也是为什么一份通用功能分册会把大半篇幅压在资源模型、命名规则、数据质量、资源机历这些“不性感”的地基上——它们决定的是系统上限。把这几块机制吃透再看功能列表很多设计就顺了。2. 资源模型与命名为什么“先建模再入库”绕不过去2.1 资源模板把“类型”当成数据而不是代码通信资源的种类多到超出直觉。空间资源里有行政区划、局站、机房、基站、用户接入点物理资源里有网络设备、连接设备、无线设施、光缆、电缆、管道、杆路逻辑资源里有电路、时隙、逻辑端口、拓扑连接、码号与地址段业务资源还要跟产品、客户挂上关系。如果每一类资源建一张物理表、写一套增删改查表数量会迅速失控更麻烦的是新增一种资源类型就要改库表、改代码、发版建设周期根本扛不住。规范里给出的答案是“资源模板”把资源通用的规则、属性抽出来单独定义形成实体的模板事先定义好类型信息和实例之间的嵌套、连接配置规则入库时只做参数化配置就能批量形成资源实例。翻译成实现语言就是元模型驱动——类型、属性、关系本身都是数据实例只是按模板填参数。简化后的元模型一般长这样-- 资源类型定义描述“有哪几类资源”支持继承 CREATE TABLE res_type ( type_id VARCHAR(32) PRIMARY KEY, -- 类型编码如 PHYS_CABLE type_name VARCHAR(64) NOT NULL, -- 类型名称如 光缆段 parent_type VARCHAR(32), -- 父类型实现属性继承 is_abstract SMALLINT DEFAULT 0 -- 抽象类型不可直接实例化 ); -- 属性定义描述“这类资源有哪些字段” CREATE TABLE res_attr_def ( attr_id BIGINT PRIMARY KEY, type_id VARCHAR(32) NOT NULL, -- 归属类型 attr_code VARCHAR(64) NOT NULL, -- 属性编码 data_type VARCHAR(16) NOT NULL, -- STRING/NUMBER/DATE/ENUM is_required SMALLINT DEFAULT 0, -- 是否必填入库校验用 enum_source VARCHAR(128) -- 枚举值来源数据字典 );这两张表的意义在于新增“光缆段”这种资源不需要改表结构往res_type插一行、往res_attr_def插若干行属性定义即可实例数据落在统一的实例表里专有属性走扩展属性表或文档字段。is_abstract防止把“物理资源”这种抽象父类直接实例化parent_type让子类型自动继承父类型的公共属性避免每类资源重复定义“名称、编码、状态、所属区域”这些字段。常见的实现思路是“主表存公共属性、扩展表存专有属性”。主表字段固定、索引好建适合高频查询扩展表按(res_id, attr_code, attr_value)存灵活但查询要行转列。两条路都有代价后文会讲取舍。2.2 命名与编码唯一标识一旦漂移下游全断资源模型解决“长什么样”命名编码解决“怎么认”。跨系统共享时服务开通系统、故障支撑系统、备品备件系统都靠编码对齐同一个资源编码不统一共享服务就退化成人肉对账。规范把命名拆成“规则接收、名称生成、编码管理”几块。落到实现命名规则通常要同时满足四个约束全局唯一、可解析、稳定、可扩展。可解析意味着从编码能读出归属区域、专业、类型方便分库分表和权限隔离稳定意味着编码一旦生成不随资源改名、迁移、归属调整而变化可扩展意味着新专业、新类型加入时不会和存量编码冲突。常见的分段编码结构如下| 段名 | 长度 | 示例 | 说明 | | 区域码 | 6 | 310000 | 行政区划或管理区域 | | 专业码 | 2 | 01 | 传输、无线、数据等 | | 类型码 | 3 | 002 | 光缆、机房、设备等 | | 序列号 | 9 | 000012345 | 按类型递增 |这套结构可读性好但有个血泪经验行政区划调整、专业重组时区域码和专业码的语义会漂移如果下游把它当业务属性用就会出现“编码还指着旧区域”的尴尬。更稳的做法是双轨内部主键用无业务含义的全局 ID雪花 ID 或 UUID外部业务编码单独一列并加唯一约束共享接口只暴露业务编码内部关联走主键。这样即便编码规则升级历史关联也不会断。命名规则还要处理“重名”和“预留”。同一机房内两台设备名称相同是常态靠编码区分码号、地址段这类资源还要支持分段拆分合并编码生成时要检查父子段关系避免把已经分配出去的地址段再切一次。注意编码一旦发给下游系统使用就成了事实上的外部契约。改编码规则之前先跑一遍影响面比事后修数据便宜得多。3. 存量管理的四层结构空间、物理、逻辑、业务怎么拆3.1 分层依据按“承载关系”切而不是按“专业”切规范把资源分成空间、物理、逻辑、业务四层。这个分法容易被误解成“按专业分类”其实底层依据是承载关系业务资源承载在逻辑资源上逻辑资源承载在物理资源上物理资源安装在空间资源里。一条客户专线业务对应一条电路逻辑电路落在两端设备的端口和中间的传输系统上物理设备又装在机房空间。每层只关心自己这层的属性和上下层关系不把全部属性塞进一张大表。这样切的好处很直接新增一种无线设备只影响物理层的类型定义新增一种业务套餐只影响业务层空间层几乎不动。反过来如果按专业建表传输、无线、数据各搞一套跨专业的端到端路由查询就要写一堆适配代码。实例化路径是“模板 → 实例 → 关系”。以光缆段为例模板定义起点、终点、芯数、长度、敷设方式入库时填参数生成实例同时自动建立三类关系两端连接的空间资源局站/人井、两端连接的物理资源ODF 架/设备端口、以及它与父缆的从属关系。批量导入时按模板做字段校验和关系校验校验不过的行整批回滚避免半截数据入库。逻辑资源里有一类特殊的东西——码号与地址段。它们没有物理形态但有分配和回收的生命周期还要支持拆分合并。规范把码号/IP 地址管理放进资源应用层正是因为这类资源的“管理”更多是分配策略和冲突检测而不是简单的增删改查。3.2 拓扑与机历关系数据和时序数据是两个独立问题拓扑解决“谁连着谁”。资源之间的连接关系是多对多、有类型、有时效的塞进资源主表当外键会很难受。常见做法是独立的关系表至少包含源资源、目标资源、关系类型、方向、生效与失效时间。物理连接缆线两端、逻辑连接中继、传输电路、承载关系业务挂逻辑、逻辑挂物理都走这张表靠关系类型区分。CREATE TABLE res_relation ( rel_id BIGINT PRIMARY KEY, src_res_id VARCHAR(64) NOT NULL, -- 源资源 dst_res_id VARCHAR(64) NOT NULL, -- 目标资源 rel_type VARCHAR(32) NOT NULL, -- PHYS_LINK/LOGIC_LINK/BEAR/INSTALL direction SMALLINT DEFAULT 0, -- 0无向 1单向 valid_from TIMESTAMP, -- 生效时间 valid_to TIMESTAMP -- 失效时间NULL表示当前有效 );独立关系表的最大风险是悬空资源退网了关系还在拓扑图上就会出现指向空气的连线。所以退网建议走状态标记而不是物理删除同时定期跑关系完整性校验——两端资源必须存在且状态有效否则告警。这个校验看着笨却是拓扑可信度的底线。机历解决“怎么变成现在这样”。资源从入库、调整、割接到退网每一次变更都应该留痕。规范里叫资源机历卡支持记录、呈现、定制和清除。实现上一般是当前表加历史表或者事件溯源每次变更写一条事件记录变更类型、变更前后快照、关联工单号。CREATE TABLE res_history ( hist_id BIGINT PRIMARY KEY, res_id VARCHAR(64) NOT NULL, change_time TIMESTAMP NOT NULL, change_type VARCHAR(16) NOT NULL, -- CREATE/UPDATE/CUTOVER/DELETE before_json TEXT, -- 变更前快照便于回放 after_json TEXT, -- 变更后快照 order_id VARCHAR(64) -- 关联工单审计用 );before_json和after_json的价值在故障回溯三个月前某台设备的位置被改过导致派单派错机历一拉就能看到是谁、在哪个工单里改的。order_id把资源变更和流程绑定避免“数据变了但没人认账”。机历的代价是存储和写入放大所以常见策略是只对关键字段做快照非关键字段记变更摘要历史数据按时间分区超过保留期的归档。4. 资源应用层调度是一个状态机不是一次数据库更新4.1 配置与调度的状态流转资源应用层里最容易写歪的是调度。规范描述得很清楚针对客户业务、网络优化调整、网络建设、网络保障发起的资源请求完成从资源方案设计、施工任务指派、联调测试到资源报竣的业务实现过程。这句话的重点是“过程”——它不是一次把资源状态改成占用而是一串有先后依赖的状态迁移。典型状态机大致是请求受理 → 资源查勘 → 方案设计 → 方案审核 → 任务指派 → 施工中 → 联调 → 报竣 → 归档。每个状态下资源本身还有一套状态位空闲、预占、占用、故障、退网。方案审核通过时把资源置为预占施工完成报竣后置为占用退网工单走退网。| 当前状态 | 触发事件 | 下一状态 | 关键约束 | | 空闲 | 方案审核通过 | 预占 | 必须带过期时间 | | 预占 | 施工完成并报竣 | 占用 | 写机历、关联工单 | | 预占 | 超过 TTL 未施工 | 空闲 | 自动释放记异常 | | 占用 | 退网工单完成 | 退网 | 保留历史不物理删除 |预占必须带 TTL这是踩坑高发区。工单卡在某个环节没人处理资源一直预占别的工单查不到可用资源最后变成“系统里明明有空闲端口却分配不出去”的玄学。自动释放加异常记录比人工巡检靠谱。并发控制也要在这一层做。两个工单同时给同一个端口做方案都查到“空闲”都写预占后写的覆盖先写的。常见做法是资源状态位加版本号做乐观锁更新时带where statusIDLE and version?影响行数为零就重试或报冲突。4.2 割接与预警影响范围分析是图遍历封锁是原子操作割接是资源系统里风险最高的动作。规范把割接流程拆成待割接资源识别、影响范围分析、资源封锁、割接资料入库、数据发布、解封锁几个环节。影响范围分析的本质是沿拓扑做遍历从割接资源出发向下游找承载的业务资源向上游找依赖的客户和产品把受影响的清单拉出来。def impact_scope(res_id, graph, max_depth8): 沿承载关系向下游遍历收集受影响的业务资源。 graph: 邻接表key 为资源 IDvalue 为下游资源列表 max_depth: 限制深度防止超大网络遍历拖垮内存 visited, queue, affected {res_id}, [(res_id, 0)], [] while queue: cur, depth queue.pop(0) if depth max_depth: continue for nxt in graph.get(cur, []): if nxt in visited: continue # 防止环导致死循环 visited.add(nxt) if is_service_resource(nxt): affected.append(nxt) # 命中业务层即记录 else: queue.append((nxt, depth 1)) return affected这段遍历有几个参数值得说graph是关系表在内存里的邻接表投影只保留“承载”方向避免把上游容器也算进影响范围visited防环通信网络里环路不少max_depth是保护全图遍历在省级网络规模下可能几十万节点不限制深度容易把接口拖超时。真要做全量影响分析一般是离线跑批加缓存而不是在割接工单里同步算。封锁是另一个关键点。影响范围算出来后要把相关资源置为封锁态防止割接期间被调度工单抢走。封锁必须是原子操作批量置状态要么全成功要么全失败否则会出现“一半资源锁了、一半没锁”的中间态割接做到一半发现端口被占用。常见实现是数据库事务加状态前置校验失败回滚并给出冲突清单。预警则相对独立规则管理利用率、年限、故障率、性能阈值、数据监控、通知。它的技术难点不在规则本身而在数据时效——预警跑的是存量数据的聚合如果资源数据本身滞后预警就是马后炮。5. 常见排查资源数据不一致的五种现场5.1 批量导入成功但大量属性为空现象导入回执显示成功打开资源详情发现必填属性是空值或默认值。原因通常有两个导入模板版本和资源模型版本不一致模板里少了几列或者模型里字段被改成必填但导入校验没同步。解决思路是把模板和模型版本绑定导入前先做版本比对导入后跑一遍必填项校验报告校验不通过的行整批回滚不要留半截数据。5.2 同一台设备在不同系统编码对不上现象服务开通系统按编码查不到故障支撑系统里的同一台设备人工核对发现是同一台。原因多半是编码由各系统各自生成命名规则没统一或者规则升级后存量编码没迁移。解决思路是把编码生成收敛到单一命名服务下游只做映射不做生成存量数据做一次编码对齐和冲突清单人工确认后再合并。5.3 拓扑图上出现指向不存在资源的连线现象拓扑视图里一条链路的一端是空的点开报资源不存在。原因是资源退网时只删了主表记录关系表没级联清理或者关系表压根没有完整性约束。解决思路是退网走状态标记关系表加两端存在性校验定期跑完整性巡检把悬空关系挂出来修。5.4 同一批文件导入两次产生重复资源现象批量导入重跑了一次资源列表里出现两条同名同编码的记录。原因是没有幂等键导入逻辑是纯插入。解决思路是以业务编码加资源类型做唯一约束导入改成 upsert重复行不报错记进冲突报告让人工确认。导入工具还要支持“试运行”先出差异清单再落库。5.5 割接完成后系统里的路由和现网对不上现象割接施工完成了但资源系统里旧路由还在新路由没生效下游查询拿到的是过期数据。原因是割接流程没闭环报竣环节只改了工单状态没触发资源数据变更。解决思路是把资源报竣设为流程必经节点报竣时统一写资源变更和机历割接前后各跑一次数据比对差异超过阈值就阻断归档。6. 设计取舍模板化的灵活性和数据可信度怎么平衡资源管理系统做久了会发现所有设计最后都落在几个取舍上。第一个取舍是模板化与查询性能。元模型驱动让新增资源类型变成插数据扩展性很好代价是查询要拼扩展表或者解析文档字段复杂统计会慢。常见的折中是分层高频查询的核心资源机房、设备、端口、电路用宽表冗余关键属性长尾资源走扩展属性宽表由模板变更触发异步重建而不是每次写入都同步刷。第二个取舍是强一致与最终一致。两级三层部署下省级系统是资源数据的生产源头总部做汇聚和跨省共享。要求强一致跨层同步的代价会高到不可接受所以通常是省级为准、总部准实时汇聚共享服务在返回结果里标注数据时效。下游如果拿资源数据做自动化开通必须能接受分钟级延迟否则就要走实时查询接口而不是订阅。第三个取舍是全量共享与按需订阅。共享服务如果全量推送下游压力大、重复存储多按需订阅加变更通知更现实但要求上游能稳定产出变更事件。事件丢失或乱序下游数据就会漂——这又回到机历和变更序号的设计。验证这套东西是否可信我会盯几个指标资源编码合规率按规则可解析的比例、拓扑完整性悬空关系占比、机历覆盖率关键变更是否有记录、共享接口时延与变更通知到达率。抽样比对也少不了从现网挑一百条资源和系统里的属性、位置、连接关系逐项对比看报表管用。从那以后我每次接手资源类项目第一件事不是看功能清单而是先抽查一百条资源编码和拓扑关系再拉一份最近的机历看看变更有没有断档。地基不牢功能写得再花哨也是空中楼阁。希望帮到你。本文还有配套的精品资源点击获取