值得注意的是以上三种事件都采用死信队列的方式存放,即只有当事件被处理乐成才会将事件从队列移除,社区最初这么计划是希望在某些情况下由于基础办法故障,例如 db 抖动等不会影响到事件的处理,但现实上有很多其他的意外情况会导致事件处理失败,例如数据库存在非正常数据,事件发送过程中出现乱序等。
我们以为对于引擎来说,必要避免由于某一个工作流事件处理出现题目,从而影响到引擎的稳定性。因此,我们移除了这里的死信队列,当事件处理失败的时候,会直接抛弃事件,并将工作流快速置为失败,由上层进行重试,并联合 Metrics 监控各类事件的处理情况。修复后,Master CPU 保持稳定,服务日志也不再出现不停重复处理某个事件。
为了确保体系稳定运行,我们不但设置了大量告警,还定期进行日常、周、月巡检。通过巡检,我们能够提前发现潜在题目,不断的美满自动化运维流程。我们现在发现的大多数题目都是通过巡检提前发现,避免了对业务造成现实影响。
同时,巡检也帮助我们不断优化我们的监控大盘和告警项。现在我们从集群、项目、WorkerGroup 和 Pod 等维度搭建了监控面板和告警,以辅助巡检工作。