第412章 请勿打扰!

    第412章 请勿打扰! (第2/3页)

调。

    第三周的邮件不一样了。

    "遇到的问题"那栏只有一句话:"核心引擎的时序逻辑存在根本性矛盾,正在评估解决方案。"

    根本性矛盾。

    林彻看到这四个字的时候是晚上九点多。

    他在七楼办公室里看邮件,窗外的杭州已经全黑了,远处的灯光像一片安静的星海。

    他打了个电话给老周。

    老周接的时候背景噪音很大,有人在说话,键盘在敲,像是整个实验室都在运转。

    "邮件我看了,什么矛盾?"

    老周的声音有点哑,应该是说了一天话的缘故。

    "央行的清算系统是同步的,强一致性,每一笔交易必须在账本上实时确认了才算完成,我们的可编程逻辑层是异步的,规则执行完了通过回调通知清算系统,问题出在这两个系统对接的地方。"

    "具体呢?"

    "假设一笔100块的定向消费券支付,我们的逻辑层先执行规则:检查商户是否在指定名单里,检查有效期,检查品类限制,规则执行完了,确认可以支付,通过回调通知央行的清算系统扣款,但在我们的逻辑层确认和清算系统实际扣款之间,有一个时间差,这个时间差里如果消费者的账户发生了其他变动,比如同时发起了另一笔支付,就会出现一致性问题。"

    "两笔支付争同一笔钱。"

    "对,双花问题,在同步系统里不存在这个问题,因为每一笔交易都是锁定了再确认的,一笔没完另一笔就排队,在异步系统里,锁定和确认之间有间隔,间隔里什么都可能发生,这个间隔越短问题越小,但完全消除不了,只要是异步的,这个间隔就一定存在。"

    "这个问题在设计阶段没有预见到?"

    "预见到了。"老周的声音比平时低,他说话的时候背景里有人在讨论什么,声音模糊地传过来。

    "我在架构设计阶段就知道会遇到这个问题,但当时的判断是可以通过技术手段把间隔压缩到足够小,小到在实际场景中不会被触发,理论上是对的,实际跑出来发现,压缩间隔的代价是延迟上升,间隔越小,延迟越高,两头不能兼得。"

    林彻没说话。

    "方远这三天一直在想解决方案,"老周说,"他试了两种思路,第一种是在逻辑层加一个预锁定机制,规则执行前先向清算系统申请锁定这笔钱,但这样等于把异步变回了半同步,失去了异步架构的优势,第二种是在逻辑层本地维护一份余额镜像,先在镜

    (本章未完,请点击下一页继续阅读)