触发点

触发点是我想出来的一个词,用来表达系统被“触动”的事件。可以这样想象,一个系统就像一个物件,只有有人去碰一下它,它才会做出反应,那这个去碰一下的动作就叫“触发点”。

定义了“触发点”之后,再来看一个系统中有哪些触发点。

  • 用户的操作,用户的任何操作都可以看做是系统的触发点
  • 系统内部的定时任务,这些定时任务可以不断得调用系统的接口以改变系统
  • 系统外部的非人为事件,例如断电重启、拔插设备等
  • 系统被外部系统调用或接收外部消息队列

综上,重要且有效的“触发点”可以认为只有2个:用户操作和定时任务。

自愈系统

我认为有自愈能力的系统要做的事情就是要能修复自身的不可用、不一致状态。这个修复动作只能依靠自身来,所以它应该由触发点来完成,这个触发点就是定时任务。

因此定时任务是自愈系统的必要条件。

考虑下面这个场景:

我把家里的垃圾打包丢到楼梯口的垃圾桶,有人回来拿走垃圾。如果是定时任务,那么我们约定每天上午或晚上一天N次定时来取垃圾就可以了,我仍完垃圾就没有我的事了,即便垃圾没人来清理也不是我的事;如果是事件触发,那就要求我在每次丢垃圾时,打个电话叫人来拿走垃圾,好处是实时,缺点则很多,首先我要记得打一次电话,打电话费钱费力,打电话是否成功还依赖于我的电话是否正常,如果我打电话失败了(包括忘打了)直接将导致垃圾没有清理。如果我今天打电话失败会影响明天打电话的成功率,那么收垃圾的“自我修复”功能也没有了。

通过这个场景可以得出,如果要保证垃圾在限定时间内被收走,那么定时任务是必须的,不能只依赖于用户触发。

文档更新时间: 2020-08-03 10:16   作者:nick