1. 5G漫游计费的背景与挑战
记得第一次接触5G漫游计费项目时,我被复杂的流程搞得晕头转向。当时有个用户投诉国际漫游流量费异常,我们团队花了三天时间才定位到是归属地OCS与漫游地CHF之间的时区转换出了问题。这种看似简单的技术细节,在实际业务中往往就是"爆雷点"。
5G漫游计费与传统4G最大的不同,在于它采用了服务化架构。简单来说,就像把原来的"固定电话网"改造成了"微信通话"——所有计费交互都通过Nchf这样的服务化接口完成。这种变化带来的直接好处是计费响应速度提升3-5倍,但同时也引入了新的复杂度。
在漫游场景下,有三个关键难题:
- 计费一致性:用户在上海使用北京号码上网,产生的费用要实时同步到归属地系统
- 结算准确性:不同运营商之间的费用分摊要精确到字节级
- 异常处理:当网络延迟或系统故障时,如何保证不重复计费也不漏计
中国移动在3GPP标准基础上做了个聪明的改动——把OCS(在线计费系统)从核心网剥离出来,直接放到账务域。这就好比把收银台从商场内部搬到了门口,顾客消费时能立即完成扣款。实测数据显示,这种架构使漫游场景下的计费延迟从平均800ms降到了200ms以内。
2. 3GPP标准下的漫游计费框架
2.1 核心组件协作机制
3GPP的漫游计费架构就像个精密运转的钟表,每个齿轮都有明确职责。让我们用快递系统做个类比:
- **SMF(会话管理功能)**相当于快递员,负责收集用户的上网"包裹"信息
- **CHF(计费功能)**是转运中心,对包裹进行分类处理
- OCS则是财务部,决定这个包裹该收多少钱
具体到漫游场景,当北京用户在上海刷视频时:
- 上海SMF通过Nchf接口发送计费请求
- 上海CHF检查用户归属地(发现是北京用户)
- 通过NRF(网络仓库功能)查找北京OCS地址
- 将计费请求转发到北京OCS进行实时扣费
这个过程涉及两个关键接口:
- Nchf_ConvergedCharging_Create:开始计费会话
- Nchf_ConvergedCharging_Update:周期性更新用量
2.2 话单生成与传递
离线计费的话单流转就像传统邮政系统。CHF生成的CDR(呼叫详单)会通过CGF(计费网关功能)进行"分拣",最终以文件形式传到账务域。这里有个容易出问题的环节——话单去重。我们曾遇到过一个案例:由于网络抖动导致同一话单被传输两次,幸亏CGF有MD5校验机制才避免重复计费。
在线计费则更讲究实时性,典型流程是:
1. SMF → CHF : Nchf_Create(SUPI=13800138000,流量=100MB) 2. CHF → OCS : 查询用户余额 3. OCS → CHF : 返回可用额度(剩余50元) 4. CHF → SMF : 授权使用50MB流量每用完一定额度(比如50%),就会触发Nchf_Update进行额度更新。这种"预付费+分段授权"的机制,既防止用户透支,又避免频繁交互带来的网络负担。
3. 中国移动的架构创新
3.1 省际漫游路由方案
中国移动的省际漫游设计就像高铁售票系统——不管你在哪个车站买票,最终结算都要回到你的身份证归属地。具体实现上有三个关键技术点:
Nchf'接口转发:这是中移动自研的"计费专线",相比标准Nchf接口增加了路由标签。就像快递单上的"加急"标记,确保漫游计费请求优先处理。
归属地OCS寻址:采用三级寻址策略:
- 第一层:根据SUPI前7位确定省份
- 第二层:通过NRF动态查询OCS实例
- 第三层:负载均衡选择具体服务器
异常话单处理:当主用通道故障时,CHF会生成异常话单文件,通过内容计费系统进行补单。这就好比高速公路堵车时启用应急车道。
3.2 双通道保障机制
中移动最精妙的设计是消息+文件双通道的冗余方案。正常情况走服务化接口实时交互;异常情况下自动降级为文件传输。我们在2022年某次核心网升级时,这个机制成功避免了全国范围计费中断。
具体实现上:
- 消息通道:用于实时授权和扣费
- 文件通道:用于对账和稽核
- 同步机制:每小时执行一次消息与文件的交叉校验
下表对比了两种通道的特性:
| 特性 | 消息通道 | 文件通道 |
|---|---|---|
| 实时性 | 毫秒级 | 分钟级 |
| 可靠性 | 99.9% | 99.99% |
| 数据完整性 | 单次交互 | 多重校验 |
| 适用场景 | 在线计费 | 异常补单 |
4. 典型问题排查实战
4.1 计费不一致案例分析
去年处理过一个经典故障:某省用户漫游到外省后,话单中的地理位置信息出现偏差。根本原因是CHF没有正确处理NEF(网络开放功能)提供的GPSI映射关系。解决方法是在Nchf_Create消息中强制携带SUPI和GPSI的双重标识。
这类问题的排查可以遵循"三层验证法":
- 消息层:用Wireshark抓取Nchf接口消息
- 逻辑层:检查CHF的路由策略配置
- 数据层:核对UDR中的用户标识映射关系
4.2 结算稽核要点
漫游结算最怕遇到"糊涂账"。我们总结出三个关键检查点:
- 时间窗口对齐:确保所有系统使用统一的NTP时间源
- 流量单位统一:特别注意MB与MiB的换算(1MB=1000KB, 1MiB=1024KiB)
- 汇率转换基准:国际漫游要锁定当日央行汇率
有个实用技巧:在CHF配置中开启话单水印功能,给每张话单打上唯一序列号。这样在跨省结算时,就像给每个包裹贴上条形码,方便追踪溯源。
5. 深度优化建议
经过多个省市的部署实践,我总结出几个提升漫游计费性能的"土方子":
第一招:预热OCS连接池在节假日等高峰时段前,通过脚本模拟Nchf'接口调用,保持长连接活跃。某省实测显示,这能使峰值处理能力提升40%。
第二招:动态调整配额根据用户信用等级设置弹性额度:
- 普通用户:50MB/次授权
- VIP用户:200MB/次授权
- 欠费用户:触发离线计费模式
第三招:智能重试机制对失败的计费请求采用指数退避重试:
def smart_retry(max_attempts=3): base_delay = 0.5 for attempt in range(max_attempts): try: return send_request() except Exception as e: delay = base_delay * (2 ** attempt) time.sleep(delay) raise RetryFailedError()这些经验都是在实际踩坑中积累的。比如有次某明星用户在国外发微博导致瞬时高流量,由于固定配额设置过小,频繁的Nchf_Update交互反而拖垮了系统。后来改成动态配额才解决问题。
计费系统就像人体的神经系统,平时感觉不到它的存在,但一旦出问题就是大事。好的架构设计应该像中医讲的"治未病"——在问题发生前就做好预案。这也是为什么中国移动要在标准之外自主研发Nchf'接口和双通道机制,这些创新确实在实际业务中发挥了关键作用。