知识卡片

重新思考业务流程与用户体验:火车票同步预订案例

普通读书笔记卡

内容

架构已经在向分布式、异步、最终一致的方向演进,但作者观察到业务部门往往还没理解这背后带来的机会——为了不改变用户熟悉的体验,团队常常把长期运行的能力硬塞进一个同步facade里,[[同步facade背后的异步通信三种响应接收方式与优雅降级模式]]描述的技术手段固然可行,但作者真正想挑战的是”业务部门坚持要同步体验”这个前提本身。以订火车票为例:选路线、选座、选票种票价、填个人信息和支付信息、点结账、等一个转圈动画——这种全同步体验在现代分布式架构里其实很难真正实现(呼应第9章的一致性讨论)。业务方通常给出两个理由坚持同步:一是”预订出问题必须立刻告诉用户,只有同步返回才能做到”,二是”预订成功后要立刻生成PDF车票供打印”,作者都不认同。针对第一点:完全可以在流程的中间环节暂停并异步通知用户——给一个漂亮的状态页面代替干等的转圈动画,用一个唯一的长链接让用户随时能离开、之后回来还能看到最新进展,有需要用户关注的事情就发邮件或应用内通知;而且即便你坚持提供同步体验,这些问题依然绕不开——比如给用户占了一个座位、后台服务紧接着就崩了,你照样得给用户提供重新预订的方式,或者至少给这个占座加个超时;作者还举了一个现实中人人都遇到过的例子——预订航班时浏览器崩溃,第一次会话技术上并没有真正结束,但用户显然不可能指望自己选的座位还在,这说明”异步架构+同步用户体验”这种混合状态本身就已经在制造奇怪的现象,倒不如正面拥抱最终一致性,给客户一个明确的时间窗口去完成预订。针对第二点:现在还有多少人真的要打印车票?智能手机和应用早就改变了用户体验,为了保住这个边缘需求而坚持全同步、让整个预订流程”要么全成要么全崩”,用户显然不会更喜欢这种设计。放弃”必须同步”的执念还有一个附加好处:系统不用一直在同步和异步之间来回切换,实现会简单得多——真正需要的只是让业务人员从头重新思考客户体验,作者引用Eliyahu Goldratt的话总结这种常见失败:”你部署一项令人惊叹的技术,但由于没有改变工作方式,所以实际上并没有减少什么限制”。

参考来源

- 位置:《流程自动化实战:系统架构和软件开发视角》第13章《临别赠言》"13.2 重新思考业务流程和用户体验"(源文件:_epub-src/EPUB/xhtml/Section0001_0018.xhtml) - 结论依据:原文用火车票预订案例逐条反驳"必须同步返回故障通知""必须立即生成PDF车票"两个业务理由,并用浏览器崩溃后座位无法保留的真实现象说明同步用户体验与异步架构混用制造的奇怪问题,最后引用Goldratt的话总结"部署新技术却不改变工作方式"的失败模式,直接支撑本卡片结论。 - 原始内容:问题在于强烈希望拥有这种同步的用户体验……你可以在某个中间环节暂停这个流程并通知用户……为什么不正面解决这些最终的一致性问题,让客户有机会在一定时限内完成预订?……你部署一项令人惊叹的技术,但由于没有改变工作方式,所以实际上并没有减少什么限制。