一、发货软件到底在做什么:四项职责
发货软件其实是四个不同的产品,共用同一个登录入口。它们共享订单上下文,但行为方式完全不同,失败方式也完全不同。
用Shipping API 技术总览明确各系统负责的执行步骤,再按发货数据模型指南核对嵌入式与独立系统之间的实体和标识关系。
- 运费(Rates):以读取为主、对延迟敏感。需要产品尺寸、发货地与目的地、承运商合同和服务选项。一次报价查询的失败代价很低,所以它容忍缓存和重查。
- 面单(Labels):只写一次、必须可靠。需要承运商凭证、地址校验和合规字段。面单可以重试,但只有几分钟的窗口;过了窗口,货物就在物理上延误了。
- 跟踪(Tracking):长期存活、只追加。事件流、异常处理和面向客户的状态展示。跟踪事件必须被持久捕获,即使没人看着它,因为这些事件是下游一切纠纷的证据。
- 计费与对账(Billing and reconciliation):发票匹配、成本分摊和客户结算。这是系统记录(system of record),必须精确。一次报价错了可以纠正;一笔计费差错会直接损失真金白银,而且要用几个月才能解开。
这些失败模式解释了很多架构选择。运费故障损失的是报价和结账体验;面单故障让发货完全停摆;跟踪故障侵蚀信任;计费差错损失真金白银。所以四项职责对「尽力而为」的容忍度完全不同:运费可以缓存,面单只能重试几分钟,跟踪必须持久捕获,计费必须精确。
隐藏的耦合才是难点:四项职责共享同一批承运商合同、同一份包裹数据和同一个订单上下文。当运费、面单、跟踪和计费住在不同系统时,你维护的不是四个功能,而是同一份承运商合同的四个副本、对同一票货的四种解读。这份共享状态才是真正的架构问题,也是「选哪个工具」这个问题总是卷土重来的原因。






