《互联网产品的客户端架构·交易、增长与平台化》5.3 回调、轮询与端上确认的时序竞争
同一笔支付的结果会从回调、服务端推送、轮询和回跳四个方向同时到达,端上收到的顺序与事实发生的顺序无关。本节把事件写成带服务端序号的不可变记录,用去重、序号比较、来源强弱与成功吸收五条规则裁决竞争,并给出可在进程内确定性验证的 TypeScript 实现与真实测试输出。
tag
同一笔支付的结果会从回调、服务端推送、轮询和回跳四个方向同时到达,端上收到的顺序与事实发生的顺序无关。本节把事件写成带服务端序号的不可变记录,用去重、序号比较、来源强弱与成功吸收五条规则裁决竞争,并给出可在进程内确定性验证的 TypeScript 实现与真实测试输出。
在五维路由之上实现可测试的候选筛选与排序:按能力、区域、上下文、输出上限和延迟先排除,再按档位优先级与加权分数排序,并用熔断状态处理健康回退与冷却后的半开再进入,最终给出确定性的 TypeScript 路由器、可审计的拒绝原因与六组完整测试。
支付结果不是成功与失败两态:超时、回跳丢失与查询未决都会落入 unknown。本节用一个五态状态机表达 pending、unknown、succeeded、failed、cancelled,规定 unknown 的进入与退出、查询结果的序号与同序号优先级、成功吸收与重试条件,并附可运行的 TypeScript 模块与真实测试输出。
支付编排不是把用户送去渠道就结束:拉起成功只说明参数被接收,回跳参数只是一句口信,真正结果必须由服务端查询确认。本节把支付单号、幂等键、回跳解析、指数退避轮询与页面可见性处理写成一个可假时钟验证的 TypeScript 模块,并复盘一次把回跳当成功导致的重复扣款。
从「回声」的三类 AI 调用出发,把多模型路由拆成任务、租户、区域、成本与健康五个维度,说明哪些事实该由业务侧声明、哪些必须由网关实时掌握,并用可运行的 TypeScript 规划器与审计函数把维度主权固定下来,最后复盘一次便宜模型把长文摘要截断的事故。
待支付倒计时不该由本地时长递减,而要以服务端 expiresAt 为准,并用服务端时间校正本地时钟。本节讨论切后台、改系统时间、临期取消与支付回调竞争,给出一个可用假时钟验证的 TypeScript 倒计时模块、竞争裁决函数与真实测试运行输出。
服务端订单状态有八种,端上却要面对按钮、倒计时、浮层与列表刷新四类副作用。本节把状态映射写成纯函数,用未知状态的前向兼容、取消与支付的竞争分支、迁移副作用的去重,说明端上如何只做翻译而不发明状态,并附一组 L1 纯函数测试与完整真实运行输出。
用 node:http 从零实现一个可运行的模型网关:POST /v1/chat 同时支持非流式 JSON 与 SSE 流式,认证、校验、执行由阶段组合器串联,测试在 127.0.0.1:0 上真实监听端口,并断言 HTTP 状态、响应体与每一帧事件。
下单提交超时后,端上把「未知」当成「失败」就会诱导用户重复下单。本节用进入确认页生成的幂等键、五个内部状态与三种按钮出口,把双击、重试和返回重进收敛到同一个键上,并给出一个可用假时钟验证的 TypeScript 提交控制器与真实测试运行输出。
购物车的全选、半选、失效商品与限购,最终都会落到一个数字上:结算金额。本节把勾选状态建模成可售行的三态汇总,明确失效项不可选、限购按上限截断、服务端拒绝后只回退被拒绝的行,并用可运行代码验证勾选与金额联动,附真实测试输出、一次典型复盘与边界清单。
业务方不该为每家模型提供方写一套错误处理。本节把网关对外的请求、响应与错误收敛成一套契约,逐字段说明能力、预算、用量与降级,解释提供方错误码为什么必须留在网关内部,并给出按契约实现、可确定性测试的 mock provider,作为 3.3 实验的提供方基座。
价格明细不是五个孤立的数字,而是一份必须同版本的结算快照。本节拆开商品小计、优惠、运费、税费与实付五段,说明端上只能做展示层分摊与预演、不能产出最终金额,用最大余数法把优惠分摊到整数分,并用版本号拒绝过期明细,附可运行代码、测试输出与复盘推演。
游客购物车与服务端购物车合并,是交易端最容易被低估的一次状态冲突。本节把同 SKU 的数量策略、下架与删除的处理、时间戳与多端并发写成可测试的纯函数,验证合并顺序、上限截断与本地未同步修改的保留,并复盘一次登录合并把失效商品带进结算的事故。
「回声」同时服务主站与两个合作方后,密钥、配额、重试与审计散落在业务代码里。本节给出模型网关的职责判据,区分必须收进来的公共策略与必须留在业务层的语义,并用可运行的阶段组合器把认证、配额、执行与收尾串成一条可观测链路,同时说明哪些逻辑一旦放进来就会形成新的耦合源。
库存展示的核心不是「有货/无货」两个状态,而是可售、锁定、预售、区域限制与数据降级五件事。本节把端上的库存判断写成纯函数,明确它只能决定「是否允许尝试」、不能承诺有货,说明取不到库存时如何安全降级,并复盘一次把区域不可售误显示成售罄的展示问题。
规格选择看起来只是几个按钮,实际是一组组合约束:哪些组合存在、哪些组合缺货、切换一个维度后哪些已选值必须失效。本节把规格目录、可选值、默认选中、价格库存联动与提交前校验写成可测试的纯函数,并复盘一次「切换颜色后仍带着旧尺码下单」的典型问题。
多模型并存不是架构失败,而是能力覆盖、质量分层、区域合规与供应关系共同作用的常态。以「回声」的三个模型与四个能力为例,说明能力覆盖矩阵、冗余度与单提供方风险如何计算,给出缺口分析的 TypeScript 实现与测试,并讨论组合治理节奏与降级路径。
商详页的价格、库存、时效常来自三个接口、三种新鲜度,端上拼页面时很容易拼出一个「不存在的商品」。本节用字段级来源标记、年龄标注、版本一致性与库存时效校验,给出一个可运行的合并视图与下单闸门,并复盘一次价格和库存来自不同快照的典型接口与展示问题。
交易端的测试最容易「全绿但线上出错」,因为很多问题只在进程边界与真实回调里出现。本节把 trade-lab 的验证分成 L1 纯计算、L2 进程内下单、L3 真实支付回调三级,给出每级的判定条件、命令与证据要求,并用一个可运行的分类函数把「这条逻辑该在哪一级验证」变成可执行的规则。
解释模型榜单为什么不能直接决定选型,并以「回声」的智能回复、内容审核与搜索重排为例,给出硬约束过滤、加权评分与并列处理的 TypeScript 实现,划分离线评测集与在线 A/B 各自负责的问题,附可运行测试与矩阵维护方法,说明选型结论何时会过期。