@lsmn
2017-11-09T18:57:07.000000Z
字数 950
阅读 2369
微服务
Kubernetes
linkerd
AWS
Monzo是英国的一家仅提供移动端服务的数字银行。近日,该银行的活期账户支付和预付信用卡系统出现了服务中断。Monzo工程部门负责人Oliver Beattie交由Monzo社区论坛来提供服务中断的事后分析。在本文中,我们将介绍他们的架构、服务中断的根本原因以及从中可以汲取的教训。
Monzo是英国的一家仅提供移动端服务的数字银行。近日,该银行的活期账户支付和预付信用卡系统出现了服务中断。Monzo工程部门负责人Oliver Beattie交由Monzo社区论坛来提供服务中断的事后分析。
在最初架构设计的时候,Monzo就将在全球范围内提供服务作为核心前提之一。久而久之,这使得他们开发了数以百计的微服务。
这些微服务被打包进Docker容器,使用Kubernetes部署到AWS上。服务的编排是由etcd完成的,kubernetes就是用它来识别服务的部署位置以及每个服务的状态。服务间的路由和负载均衡是使用linkerd实现的。
服务中断既影响了预付信用卡,又影响了活期账户持有者。造成此次服务中断的原因有多个。
首先,Kubernetes的一个Bug会导致请求在集群重新配置后超时。在服务实际中断导致这些超时出现之前一周,他们进行了集群重新配置,使linkerd接收不到Kubernetes的更新。
再者,当服务中断发生时,他们的一个直接反应是重启所有的linkerd实例,这暴露出了一个问题,Monzo使用的Kubernetes和linkerd版本不兼容,情况变得更加糟糕,从服务中断变成了整个平台的故障。Monzo社区论坛的相关主题里也列出了事件的完整时间表。
从这样一次服务中断里可以汲取一些有价值的教训。除了修复Bug、检查不同库的版本兼容性及其他问题外,Monzo认识到了改进内部或外部通信中断的处理措施的必要性。
此外,另一个教训是认识到了报警、控制面板、对应用程序的每一层进行健康检查从而及早发现人为错误及其他错误的重要性。总而言之,重要的是,以后要采取一切措施防止服务中断,既能解决问题,又能就正在发生的事清晰地沟通,这样,将来就可以构建起更好的保障措施。
查看英文原文:Monzo Outage Post Mortem