1 有来有回
有正向就有逆向。例如在处理交易链路时,仅仅考虑正向链路是不够的。逆向链路是指如果用户发起售后应当如何处理,否则业务不闭环。
2 有正有负
有正常就有异常。例如在处理交易链路时,假设需要经过10个业务节点,如果这些节点都不发生异常自然是好的。
但是架构设计必须考虑异常情况,例如第5个节点是扣减优惠券,但是扣减失败,那么前4个节点应该如何处理,这是必须回答的问题。
3 有始有终
有开始就有结束,这里有两个维度需要考虑:
-
第一是一个完整链路,业务状态必须流转到最终态,不能是一个未决状态
-
第二是功能上线不是结束而是开始。上线之后不是万事大吉,不仅需要关注功能正确性与稳定性,还需要关注业务数据指标有没有达到预期
4 有前有后
系统间依赖关系必须梳理清楚,这里有两个维度需要考虑:
- 第一是系统依赖哪些系统,如果被依赖系统能力缺乏,需要对方设计并提供能力
- 第二是系统被哪些系统依赖。例如商品系统至少有订单和营销系统两大消费者。这时需要考虑:两大消费者需要商品提供什么能力?两大消费者流量有多大,如果商品扛不住有什么应对策略
5 有急有缓
功能分清轻重缓急。大而全和小而精是两种设计思路,如果需求紧急或者需要快速试错,可以前期做出最小可用品,后期随着业务开展再进行迭代,逐步进行演进。
6 有问有答
出现问题必须有出口。即使系统再优秀,也很难不出现任何问题。这里有两个维度需要考虑:
- 第一是业务问题,用户使用和操作上出现问题,这时需要设计帮助手册或者客服
- 第二是技术问题,出现问题必有手段感知,感知到后必有人跟进,先止血后解决
7 有备无患
《反脆弱》一直在告诉我们:极端意外情况无法预测,虽然风险概率小但破坏力极大。我们无法预测会发生什么极端故障以及什么时候发生。
但面对不确定性我们不会束手就擒,至少可以把系统保护好。为了保证系统高可用性需要采取高可用核心策略:
- 冗余策略
- 降级策略
- 延时策略
- 隔离策略
8 有迹可循
业务核心操作必须记录操作流水,这里有三个维度需要考虑:
- 第一个是安全:任任何敏感操作必须留痕,明确谁在什么时间做了什么事情
- 第二个是追溯:例如资金操作每一笔都必须记录,否则出现问题不可追溯
- 第三个是历史:例如营销规则每一次修改必须保留上一次快照和版本号,营销活动绑定规则时还需要绑定规则版本号