十二月了。
老周的第二版方案在十一月最后一天跑通了。
方远用了一周时间重写了余额镜像模块的核心逻辑,把镜像同步的频率从每笔交易实时同步改成了批量异步同步,每500毫秒同步一次。
这样做减少了单笔交易的等待时间,把延迟从最初的800多毫秒压到了一个相对稳定的区间。
相对稳定的区间是多少呢。
老周在邮件里附了一张测试报告。
单笔交易延迟:平均793毫秒,最低612毫秒,最高1247毫秒。
793毫秒。
央行的性能指标要求是500毫秒以内。
Demo里跑出来的37毫秒是纯逻辑层的数据,不含清算系统对接。
加上对接之后,延迟翻了二十多倍。
第二版比第一版好了一点,从"完全不能用"变成了"能用但不达标"。
差了将近300毫秒。
300毫秒听起来不多,0.3秒,一眨眼的功夫。
但在冬奥的场景里,这0.3秒可能是灾难性的。
冬奥期间数字人民币的核心支付场景是什么?
便利店、餐饮、纪念品商店、交通。
冬奥村的便利店在比赛日的高峰时段,一个小时可能有几百人排队结账。
每一笔支付如果多等0.3秒,几百笔就是几十秒到一两分钟的排队延长。
运动员和记者不会等。
他们会掏出信用卡,或者打开手机用微信支付宝。
数字人民币在冬奥的第一印象就是"慢"。
这不是技术问题。
这是政治问题。
冬奥是数字人民币面向全球的第一次亮相,亮相的第一印象是"慢",对整个DCEP项目的推广是毁灭性的。
央行不会允许这种事发生。
更糟糕的是,赵铭远的同步清算方案不存在这个问题。
同步架构的延迟完全取决于清算引擎本身的处理速度,工行的清算引擎经过了几十年的优化,单笔交易确认时间在200毫秒以内。
如果央行看到的测试数据是微光610毫秒对工行200毫秒,结论不需要讨论。
793毫秒,不达标,而且对手在达标。
…………
十二月第一周,老周的团队开始了密集的优化迭代。
方向有三个。
第一个是压缩镜像同步的批量间隔,从500毫秒试着压到300毫秒。
压下去了,但延迟只降了40毫秒左右,从793降到了大约750。
第二个方向是优化回调通信的协议,减少每次回调的数据包大小和握手次数。
这个方向有效果,延迟又降了大概60毫秒,到了690左右。
第三个方向是方远提出的,在逻辑层和清算系统之间加一个缓冲队列,把回调请求排队处理,减少并发冲突。
这个方向花了三天写代码,跑出来的结果是延迟降了30毫秒,代价是在高并发场景下缓冲队列会堆积,堆积到一定程度延迟反而会飙升。
三个方向加起来,延迟从793降到了大约660。
还是超标,超了160毫秒。
…………
十二月第二周,又试了两个方向。
一个是把逻辑层的规则引擎从解释执行改成预编译执行,把规则在第一次加载的时候就编译成机器码,后续执行的时候不再需要实时解析。
这个改动很大,方远带着两个人花了五天重写了规则编译器。
跑出来的效果:延迟降了大约50毫秒,到了610左右。
另一个是老周自己想的,把清算系统的模拟环境从单机改成了分布式集群,更接近真实的央行架构。
改完之后重新跑测试,延迟反而上升了,因为分布式集群的网络延迟比单机高。
这个结果说明之前的优化有一部分是建立在模拟环境不够真实的基础上的。
实际部署到真实环境里,延迟可能比测试数据更高。
老周把这个结论写在了白板上,红色马克笔,三个字:"不乐观。"
…………
两周过去了。
从十二月初到十二月中旬,十四天,七次测试迭代,延迟从793毫秒降到了610毫秒。
降了183毫秒,但还是超标110毫秒。
而且这110毫秒不是"再优化优化就能压下去"的那种差距。
方远在最后一次测试之后做了一个分析,把延迟拆成了五个环节:规则编译18毫秒,规则执行22毫秒,镜像同步310毫秒,回调通信195毫秒,清算确认65毫秒。
五个环节加起来61
>>>点击查看《阿里欠我的,我自己拿回来了》最新章节