Spotify工程师讲述如何使用“无聊”技术完成服务发掘和数据库服务

标签: spotify 工程师 讲述 | 发表时间:2013-03-06 21:32 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

Björn Edström是互联网音乐服务Spotify的工程师,在Spotify的官方博客中,他讲述了 Spotify为什么要使用一些“无聊”技术的原因。

Björn指出:

在Spotify的后端服务和架构中,我们使用了这些成熟和经过验证的技术,我会说明如何实现,以及这样做的原因。此外,我们还会试图说明Spotify何时不会使用某些经过验证的技术,背后的原因以及它们的问题。

如今,更多时候,完成工作的合适工具,最好是使用已经存在了一段时间的软件,而且是有成功案例的。举个后端服务的例子,用Java或是Python,而不是Go或者Node.js。另一个例子,数据存储,用MySQL或PostgreSQL,而不是MongoDB或是Riak。

对于“成熟”的定义,Björn这样理解:

一项成熟技术的原则之一,就是对于你特定的使用案例,它在多大程度上能作为黑盒使用。如果你不时就得去捣腾下它的代码,就可以说这个项目对你来说还不够成熟,否则你就基本上不用,或者很少需要去给软件打补丁。

这很重要,因为“完成工作的正确工具”有成本方面和临时性的效应。比如,考虑到配置和调优,一种存储解决方案对于你目前的负载和资源是有意义的,如果用户量和负载上来了,另一种方案就更有意义。

接下来,Björn先介绍了他们的DNS和绑定解决方案。

Spotify大量使用DNS,他们将其用作分布式的复制数据库,可处理大量读负载。在具体用途上,他们用DNS解决服务发现问题。而且,他们使用的SRV记录。DNS SRV记录是一种规范化名称,形式为: name.protocal.site,映射到一个主机名列表上,带有权重、优先级和端口号。

举个例子,当Spotify的客户端连接到接入点AP(就是客户端到Spotify后端的连接)时,它会寻找SRV记录 spotify-client.tcp.spotify.com。接入点为要发送请求的每个后台服务做如下事情:

$ dig +short _spotify-client._tcp.spotify.com SRV

10 12 4070 A1.spotify.com.

10 12 4070 A2.spotify.com.

10 12 4070 A3.spotify.com.

10 12 4070 A4.spotify.com.

上面的字段按顺序为:优先级、权重、端口号和主机。服务的一个用户可以根据权重比和优先级选择服务器。只有当所有服务器都宕机时,请求才能发送到低优先级的服务器上。上例中,所有四个主机名都有同样优先级(10)和同样权重(12),因此,在正确配置的环境中,它们会各自处理25%的流量。

支持Spotify的所有后端服务,都可以通过询问正确的SRV记录发现,服务之间也是这样彼此发现的。对于不适用DNS的,比如外部可见的web服务,他们在DNS前开发了HTTP外观。比如,某些客户端会发送HTTP请求,找出应该连接哪个接入点。

在某些情况下,Spotify使用CNAME和PTR记录来补充SRV记录,这主要针对某个服务器有特定目的的情况。

他们开发了一些工具,比如让SRV查找变得更简单的命令行工具,作为DNS缓存的 web服务等等,其中包括反向查找(将主机名映射到服务名)等特别功能。

他们还用DNS存储服务配置数据,比如在TXT记录中存储DHT环信息,并以此信息作为定位多个复制数据库的辅助。

在基础设施和系统管理方面,为了支持DNS,他们使用了一些有特色的开源项目,比如 dnspythondnsjavac-ares,这些分别是用Python、Java和C开发的DNS解析器。

Spotify的DNS服务器上运行Bind,很多后端服务运行Unbound,这也是DNS服务器,用来改善性能,并降低主DNS服务器的负载。他们在自己的git库中维护DNS区域文件,并在DNS主服务器上运行一个小Makefile文件,从git库中部署变更,推送到不同数据中心的DNS从服务器上。

从2007年启动beta版本开始,这种方案就基本上没有变过,而且扩展性特别好,处理了数千台服务器、几十个服务器和几千万用户。

不过最近,他们在考虑逐步放弃DNS,原因有:

  • 部署新硬件时,管理DNS区域文件的开销过高。
  • DNS提供对于世界的静态视角(“这些是应该正在运行的服务器”),当服务器越来越多时,动态视角变得越来越重要和有用(“这些是目前真正在运行的服务器”)

截止2013年1月,他们尚未开始执行替代方案,但是已经开始调研Zookeeper。

在数据库方面,Spotify是PostgreSQL的重度用户。后端第一个版本就是用它。

Björn认为:

PostgreSQL是高度成熟技术的上佳例子。除非用得太多,它“非常到位”,不用去折腾、甚至不用理解源码。PostgreSQL手册也是世界上开源项目中的最佳文档之一。

在Spotify的开始阶段,负载较低时,PostgreSQL绝对是“完成工作的正确工具”。

他们开始用PostgreSQL 8,并使用其中的复制特性。PostgreSQL 9出来后,他们在存储用户身份验证信息的集群中使用了9,一台主数据库服务器负责写,多台热备份服务器处理所有的读。

他们还开发了与基础设施相关的库,以相对智能方式判定使用哪个从数据库,基础设施库中跟踪节点健康状况,会从DNS中选取新节点,并停止向DNS记录中已经删除记录的服务器(或健康程度过低的服务器)发送请求。

选择成熟的技术还有一个好处,相关技术也相对成熟。Spotify大量使用Python的 psycopg2库,他们曾有一些服务使用 sqlalchemy和类似项目,但很快开始编写自己的SQL到psycopg2中,这样可以深入控制和了解他们的环境。

为了降低到PostgreSQL服务器的连接数,他们最近开始使用 pgbouncer——这是一个连接池调度器。PostgreSQL的架构决定了PostgreSQL会为每个连接启动新进程,有连接池调度器有助于降低服务器资源使用率。

不过到了2009年,Spotify不断发展,服务器负载成为越来越大的问题。后来,他们选择了Cassandra:

这不是因为Cassandra是热门的新技术,而是因为它对我们来说是正确的工具,从经济角度和短期策略角度都是如此。

他们有一个专人的人,全天候扑在Cassandra上面,因为它不像PostgreSQL那么成熟,也不完全是个黑盒子。他们从中得到的收获,是一种特定设置,对于特定情形很有用,这对于他们部署到更多数据中心和服务器上十分重要。

  • 正确管理的Cassandra集群有更好的复制特性(特别是针对写操作)。
  • 正确管理的Cassandra集群可以更好地应对网络问题和失败,比如分区或是间歇性小故障。
  • 总得来说,从运维角度看,Cassandra在特定的失败情况下表现很好,比如服务器宕机、网络中断等,比PostgreSQL好。

不过要注意,对Spotify来说这些是相对较新的问题,其中很多在几年前还没有。如果当时就用Cassandra,那就不是“完成工作的正确工具”了。

郑柯 郑柯,实用的理想主义者,相信:每天改变一点点,这个世界会更好。

您可能也会喜欢

相关 [spotify 工程师 讲述] 推荐:

Spotify工程师讲述如何使用“无聊”技术完成服务发掘和数据库服务

- - InfoQ cn
Björn Edström是互联网音乐服务Spotify的工程师,在Spotify的官方博客中,他讲述了 Spotify为什么要使用一些“无聊”技术的原因. 在Spotify的后端服务和架构中,我们使用了这些成熟和经过验证的技术,我会说明如何实现,以及这样做的原因. 此外,我们还会试图说明Spotify何时不会使用某些经过验证的技术,背后的原因以及它们的问题.

美女工程师密照:讲述苦逼挨踢女生的故事

- 亮亮 - FeedzShare
来自: 驱动之家新闻 - FeedzShare  . 发布时间:2011年10月19日,  已有 2 人推荐. “挨踢”并不是男生的专利,在圈子里,还活跃着这么一批“挨踢”女生. 与IT男一样,IT女每天也要面对各种加班各种无奈各种苦逼. 她们没有浪漫的烛光晚餐,只有加班的快餐饭盒;没有精雕细琢的美丽,只有被压力挤出来的色斑暗斑;没有悠闲的假日,只有永远加不完的班.

Playlist 和 App,Spotify 改变了什么?

- - 爱范儿 · Beats of Bits
作为一名国内用户,我首先想到的云音乐服务是 虾米. 事实上,在经历了 Last.FM 的缓慢载入速度,诸多播放限制和 Pandora 的拒绝国内用户访问后,我就开始投身于这个国内云音乐服务. 从 2009年7月开始我养成了在浏览器里听歌的习惯,我最喜欢的收听方式去拜访各种不同的 精选集 (以某个特定主题展开的音乐拼盘).

Spotify 将征战网页播放市场

- - 爱范儿 · Beats of Bits
作为一款在线音乐电台,Spotify 在知识产权受法律严格保护的欧美国家非常受欢迎. Spotify 自 2008 年推向市场,2010 得到 Sean Park 投资,2011 年与 Facebook 进行整合,今年它又将目光投向了网页播放市场. Spotify 的经营模式很有自己的特色. 作为音乐电台,Spotify 得到了华纳音乐、索尼、百代等全球几大唱片公司的支持,其所提供的音乐都是正版的.

Spotify推荐引擎Discover Weekly的故事

- - Solidot
Spotify的软件工程师Edward Newett说,赋权自下而上的创新,奇迹将会发生. 他在上周举行的@Scale 会议上分享了开发Discover Weekly推荐引擎的故事. Discover Weekly设计帮助用户发现他们从未听过的新音乐,于一年前上线,至今已积累了4000多万的用户. Newett最初的工作是开发个性化网页,其中包含了向用户推荐他们可能感兴趣的专辑的系统.

免费模式与免费音乐服务 Spotify

- guangtao - 爱范儿 · Beats of Bits
在互联网中,提供免费服务并从中盈利,是个非常重要的模式. 在今年四月,Businiess Insider 总结这个模式的特点与利弊:. 免费意味着为数众多的用户免费使用你的产品,而且只有极少数付费使用. 比如 Dropbox,96% 的用户免费使用,意味着付费用户仅占 4%. 免费模式的优势: 对营销有利.

[转]采用深度学习算法为Spotify做基于内容的音乐推荐

- - Soul Joy Hub
摘要:本文概述了作者在Spotify的机器学习实践经验,解释了使用卷积神经网络(CNN)做基于音频的音乐推荐的方法,并提出了有关该卷积网络的实际学习效果的心得. 采用了GTX 780Ti GPU,Theano软件框架,小批量梯度下降法. 【编者按】本文是比利时根特大学(Ghent University)的Reservoir Lab实验室博士研究生Sander Dieleman所撰写的博客文章,他的研究方向是音乐音频信号分类和推荐的层次表征学习,专攻深度学习和特征学习.

特征向量内存快速查找库 GitHub - spotify/annoy: Approximate Nearest Neighbors in C++/Python optimized for memory usage and loading/saving to disk

- -
还有一些其他库可以进行最近邻搜索. Annoy几乎和最快的库一样快(见下文),但实际上还有另一个功能让Annoy与众不同:它能够将静态文件用作索引. 特别是,这意味着您可以跨进程共享索引. Annoy还将创建索引与加载它们分离,因此您可以将索引作为文件传递并快速映射到内存中. Annoy的另一个好处是它试图最小化内存占用,因此索引非常小.