Skype CIO谈Skype服务故障背后的原因

在1600 GMT时间12月22日,Skype服务开始无法访问,一开始是一小部分用户无法访问,后来受影响的用户越来越多,最后网络在24小时内干脆就无法访问了。一周后,Skype CIO Lars Rabbe谈到了这背后的原因。

Skype的核心依赖于第三代的P2P网络,它拥有大量的对等节点和超级节点,一个超级节点对应于成百上千个节点。由于Skype并没有中央目录来支持彼此通信的 两个或多个节点之间的路由,因此虚拟网络将超级节点作为目录。当某个客户端连接到Skype后,它会将自身注册到一个超级节点上,超级节点会为该客户端分 配一个IP地址,这样想要与其建立连接的其他客户端就能找到它了。当某个用户想要启动IM或是向另一个客户端发起音频/视频会话后就会询问超级节点,然后就会获得目标IP,这样就会建立起这两个客户端之间直接的通信链接。超级节点是Skype网络的重要元素。

Skype还运行着大量的支撑服务器,他们负责发送离线消息。由于突然有大量未发送的消息,因此这些服务器会延迟发送这些消息。Window版本的 Skype v5.0.0.152有一个Bug,它会导致应用在接收这些延迟发送的消息时崩溃。最新的Skype v5.0.0.156和Windows下的其他版本以及非Windows系统的所有其他版本则不受该Bug影响,但问题在于有50%的用户在使用这个有 Bug的版本,而它正是Skype 5的首个发布版。大约40%的Skype用户都是在线崩溃的,这影响到30%左右的超级节点。

客户端还需要继续运行,重启应用的客户端会导致网络继续搜索仍旧运行着的超级节点,这导致了超级节点的过载。由于Skype在超级节点过载时会启动保护措施,因此这并不会消耗客户端系统过多的资源,超级节点会一个接一个地自动关闭,这会导致整个网络出现故障。

没有超级节点,Skype就将无法运作,因此公司一开始启动了上百个,然后是上千个超级节点,希望能够恢复服务。他们并没有指明使用了哪些系统,或许是 他们自己的,也可能是Amazon EC2上的。网络开始基于这些超级节点来构建自身,服务在24小时后恢复了。他们说停止了大多数超级节点,留下了一些来处理各种突发状况,因为圣诞节 Skype的使用量会很大。

我们从中学到的经验则是:除非必要,很多用户并不会更新自己的软件。Skype已经有更新的版本了,但如果没有遇到Bug,大多数用户是不会更新的。Skype打算重新检查自动更新过程,或许像Google Chrome那样做:

我们会重新检查向用户提供的“自动”更新过程,这样我们就能让每个人都使用最新版的Skype了。我们相信这些举措会降低这类故障发生的概率。

另一个问题是我们应该尽最大努力来保证软件是经过充分测试过的,Skype决定重新检查“测试过程来确定更好的检测手段以避免会影响到系统的Bug出现”。

最后要说的就是Skype服务器支撑网络的能力,比如用于处理离线IM的服务器,Rabbe说他们“会经常性地检查支持Skype用户的核心系统的能力,并继续在这些系统的能力和弹性上投入”。