微信号:infoqchina

介绍:有内容的技术社区媒体

Spotify为什么要使用一些“无聊”的技术?

2013-03-07 16:05 InfoQ

在Spotify的工程师看来,与其用Go和Node.js,还不如用Java和Python;用MongoDB或Riak,还不如用MySQL或PostgreSQL。


为什么选择这种老掉牙的“无聊”技术?


因为它们成熟。


什么是“成熟”?


“一项成熟技术的原则之一,就是对于你特定的使用案例,它在多大程度上能作为黑盒使用。如果你不时就得去捣腾下它的代码,就可以说这个项目对你来说还不够成熟。


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


Spotify大量使用DNS,他们将其用作分布式的复制数据库,可处理大量读负载。在具体用途上,他们用DNS解决服务发现问题。而且,他们使用的SRV记录。


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


他们开发了一些工具,比如让SRV查找变得更简单的命令行工具。


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


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


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


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

  • 部署新硬件时,管理DNS区域文件的开销过高。

  • DNS提供对于世界的静态视角(“这些是应该正在运行的服务器”),当服务器越来越多时,动态视角变得越来越重要和有用(“这些是目前真正在运行的服务器”)

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


在数据库方面,Spotify是PostgreSQL的重度用户。为了降低到PostgreSQL服务器的连接数,他们最近开始使用pgbouncer——这是一个连接池调度器。


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


点击“阅读原文”查看更多内容并吐槽吧。

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 成都下周全城整治清理“烈性犬” 小学生该不该带手机到学校? 好消息!“扫地娃”钟杰明日成都上学!
猜您喜欢 程序源,你想告别单身吗?想的就快来约这些女生 图解堆算法、链表、栈与队列 Android带你解析ScrollView--仿QQ空间标题栏渐变 KVM Network Bridging 【小数乱弹】十多年了,有人终于迎来了春天