Spotify:初升的音乐帝国是如何搭建的(详解)
每次徜徉在音乐的海洋里,我都会觉得身心特别的宁静轻松——因为它能使我暂时忘却喧嚣,享受片刻的原野,虫鸣。那么如今发展最快而且向用户收费很成功的
音乐流媒体服务Spotify到底是如何搭建自己的音乐帝国的呢?我们一起来跟随Spotify技术狂人 Gunnar Kreitz 和Fredrik Niemelä的文章看看其内部的秘密(由
pansentient总结)。
###独特的流媒体技术构架
Spotify不像传统的流媒体音乐服务那样都将担子往自己的服务器上挑,而是采取了一个最为聪明的方法——P2P。
1.你点击一首音乐
2.如果该音乐在本地缓存里,Spotify就从缓存里开始播放
3.如果该音乐不在缓存里,那么Spotify客户端会从自己的服务器上请求该音乐的前15秒钟数据,以便音乐可以立即开始播放
4.同时,客户端还会开始在P2P网络上搜索该音乐的后续部分
5.那么该音乐的后续部分便会有几个来源(包括:缓存,多个Peer以及Spotify服务器等)。很显然,一首音乐越受欢迎,那么它越可能直接通过P2P网络播放,从而避开Spotify自身的服务器。
6.当该音乐播放到只剩下30秒了,客户端便开始在P2P网络里搜索下一首音乐
7.如果该音乐只剩下10秒了,而客户端还没有在P2P网络里找到下一首要播放的音乐,那么它便会开始在Spotify的服务器端寻找
这样整个音乐播放的流程便走完了一圈。通过采用缓存和P2P网络分享,Spotify聪明的分流了负担,最大限度的降低了服务器成本。
那么采用这样的3方分流的方式,Spotify能够降低多少服务器负荷呢?以下是两位技术大佬在2010年初的某一周追踪到的数据。
仅仅8.8%的音乐播放来自于Spotify自身服务器。其余的来源分别是P2P网络(35.8%)和用户的本地缓存(55.4%)。不过Spotify手机客户端是一个例外,因为其音乐播放完全来自自身服务器端。
而如果要最大限度的协调这三方音乐来源,Spotify还要能做到对用户的播放习惯非常了解。他们在那一周获取的用户播放习惯数据如下:
1.61%的用户是按照专辑顺序来听的(这对Spotify来说很有利,因为其可以提前搜索音乐来源以便实现无缝播放下一首音乐)
2.39%的用户是随机播放的
3.提前搜索后,音乐的平均播放延迟仅265毫秒;而如果不进行提前搜索,那么平均延迟有390毫秒(1秒=1000毫秒)
4.仅有低于1%的播放行为会卡,而且大部分还可能是由于本地CPU问题所引起的
从以上数据我们可以看出,更好的协调不同来源的配合,提前请求索取对于音乐播放顺畅提高用户体验来说多么重要。
那么在那一周,Spotify上面的音乐播放情况是怎样的呢?
1.88%的用户播放行为都是针对Spotify上那12%最流行的歌曲去的
2.79%的服务器请求都是针对Spotify上那21%最流行的歌曲去的
3.60%的歌曲都有过至少一次播放
###以下还有一些有趣的数据:
Spotify的P2P网络
1.类似BitTorrentd的工作机制,不过是采用的专门为音乐流媒体设计的协议
2.该网络内暂时没有分“优先”Peer或者超级节点,不过接下来可能会利用到P2P重叠区
3.网络内Peer数的上限是60,一般会限制在50
4.客户端每次最多上传4个Peer数
5.使用服务器端的traker和网络请求来找到其他有你正在听的音乐的用户
6.采用TCP传输协议
存储机制
大多数用户都有一个巨大的缓存空间——56%的用户拥有5GB或者更多的缓存空间。这对于那些喜欢重复听相同音乐的用户很有帮助
而在Spotify的服务器端,有一个master存储为290TB;另外在伦敦和斯德哥尔摩分别还各有一个production存储90TB
应急机制
Spotify内部还构建了一个“应急机制”,即用户出现播放缓冲很慢的时候,客户端会自动停止上传P2P网络。
不知道大家看了以上的介绍以后,是不是有豁然开朗的感觉。如果还没有,那么你可以阅读
完整版的原文。不过对于Spotify利用P2P网络的方式,也有付费用户非常愤怒,他们表示自己为之付费的音乐不应该被分享给其他用户。
很显然,Spotify还仅仅是一个婴儿般的创业公司,它也在前不久才走出欧洲进入美国,并且取得了迅速的发展。它是不是能取得更大的成功走进盗版丛生的中国,这个我不知道。我只知道写完这篇文章,我可以好好放松,听一会儿音乐了。