2022年3月8日,Spotify面临停工,Spotify瘫痪了2个小时。让我们看看发生了什么,以及我们可以从这次中断中学习什么概念:
-
Spotify的架构是建立在很多不同的微服务上。这些微服务是为了不同的目的。一个用于艺术家的微服务。另一个微服务是为歌曲服务的。
-
这些微服务中的每一个都可以部署在不同的机器上,甚至是同一台机器上的两个微服务。现在,这些微服务是如何相互作用的?
-
一种互动方式可以是使用服务的DNS地址进行互动。确切地说,我们与网站互动的方式是在地址栏中输入一个地址,如 "www.spotify.com"。在DNS解析之后,我们会得到一个IP地址,我们可以用它来调用所需的API。
-
但是,如果一个操作需要从内部不同的微服务中调用多个API,这需要大量的时间。例如,为了显示一首歌的细节,Spotify必须调用图像服务来获得歌曲图像,调用艺术家服务来获得艺术家的细节,然后调用歌曲服务来获得歌曲的细节。
-
现在,如果我们走DNS路线,这将需要大量的时间。为了防止这种情况的发生,有一种叫做服务网的技术,它利用了sidecar模式,允许微服务之间直接连接,而不需要编写任何额外的代码。
-
每个微服务旁边都有一个sidecar实例,它包含其他微服务的地址映射,允许当前的微服务与其他微服务连接。这个sidecar容器是可重复使用的,所以在加入一个新的微服务时不需要新的代码。
-
所有这些容器都连接到控制平面,控制平面管理所有的映射,并在有一些变化时更新所有的sidecar。
-
现在,在Spotify的案例中,这个控制平面发生故障,导致微服务无法相互连接。
作为一个解决方案,Spotify通过基于DNS的方法来切换微服务通信的连接。