程序的健壮性

80 阅读2分钟

好的架构应具备很强的健壮性。我们设计统如果在健壮性方面考虑不足,就会使服务质量大打折扣,轻则损害用户体验,重则可能导致系统崩溃、数据错乱。

健壮性体现在哪些方面?

1.用户输入错误,是否会导致程序崩溃?程序是否有将违法完整性约束的数据传输到存储层?

2.数据库层是否有必要的防御机制,数据订正是否会对系统产生严重的不可逆影响?

3.服务down机时,单应用是否会因事务处理不当而破坏原子性,系统间是否会因缺乏重试、补偿、分布式事务处理等原因而产生上下游不一致状态?

4.下游系统故障时,是否会因超时时间设置不合理、缺乏应急预案等原因,引发链式反应和雪崩效应,最终导致服务完全不可用或整个调用链上的服务群都受到严重影响?

5.是否所有三方组件都是强依赖的,当它们出问题时,能否最大限度的降低对用户的影响?

6.系统中存在一些由来已久的潜规则,但这些规则并非不可或缺,当外部条件变化导致规则不再满足条件时,是否因为系统对运行环境过于相信、缺乏必要的保护和校验机制,导致程序出现严重错误?

7.在系统正常升级或运维重启过程中,是否因为对新老实例并存态的兼容性缺乏考虑,导致程序出现异常?软件中是否存在有状态的模块,不能做到在任意时刻水平伸缩?

8.对于依赖时序的程序,是否有做严格的时间校验控制?例如有些定时任务可能被设计成只能每天触发一次,或只能在固定时间点执行,否则会出现严重的错误,这都是有问题的。

9.程序对运行环境有很强的依赖,例如依赖一些自定义的非标准环境变量或容器配置参数,当环境发生变化时,应用缺乏必要的自检和应对机制,导致程序出现异常?

程序健壮性的本质,是保持悲观主义,表现为对外部输入不信任、对程序内部组件和规则不信任、对外部输出调用不信任。