L4.15.5chained systems break duty at joins设计研究
多个系统串联时责任链会断在接口处,各段边界须事先划定
别名: 责任断在接口 · interface accountability · 串联要先划界
概念解释
代理调检索,检索调内部服务,服务再调支付或邮箱。出错时每一段都可以说「我按上游给的做」。责任链断在接口(chained systems break duty at joins):没有事先划定「谁对这一跳的对象和动词负责」,复盘会停在段与段之间的空地上。边界要在串联之前写清,不是在出事之后争。
三联记录若只存在于某一段内部,调查者走到接口就断。
机制
每一跳都替换或封装对象。上游的「客户 A」到下游可能变成一串 ID,再下一跳变成另一家供应商的订单号。段内追溯只能看到自己那一截。接口若没有共同的对象标识、没有「这一跳谁是差因」的约定,各段的完整日志拼不出一条因果。组织上这表现为互相甩:模型说工具错,工具说邮箱接口错,邮箱说内容是上游给的。
划界要同时划权限和责:谁有权发这一跳、这一跳失败记谁、调查时谁有义务交出三联。寿命若各段自己定,最短的那段会把整条链掐断。
怎么研究
搭一条至少三段的链,在中段或接口植入错误。让调查者只用各段自己的日志。因变量:能否指出差因所在段、是否停在接口、跨段对象能否对上。自变量:是否有共同对象 ID、是否预先写了段责、日志寿命是否对齐。
停在接口上说「两边都看起来对」,就是链断了。
边界
单系统内的模块边界也有接口问题,但通常还有一个主人能下令对上 ID。跨组织供应商更硬,划界必须写进合同,不能只写在内部 wiki。人知不知道当前档,是单段内的意识;链断是段间的结构。合理转责的拒绝条件要在每一段对人的那一跳上分别满足,不能由链的末端一签了事。
怎么落地
- 串联之前画一张跳表:每一跳的对象标识如何对齐、谁是差因、谁交出三联、寿命下限。缺一跳不准接生产。
- 对外那一跳的三联必须含上游传入的对象原名,不能只含下游 ID。
- 验证:在中段改掉对象再发出。调查者应能从对外结果走回中段改动,而不停在「邮箱说内容是接口给的」。走不回,就还没划界。把共同 ID 拿掉再走一次——若立刻断在接口,就证明划界靠的是那张跳表,不是各段日志自己会说话。