详解:全球最大正版流媒体音乐服务平台Spotify是如何管理服务器的( 二 )


服务器录入
在我们小组负责相关任务的时候,成为了受支持的网络服务 。通过对数据中心团队手工整理的CSV文件进行分析,它记录下了数百个服务器,这些文件包含有类似机架位置、MAC地址之类的信息,如果让技术人员来查看,很容易错读;而且我们还用女性名为每个服务器分配了唯一静态标识符,上千台服务器占用了大量的命名空间 。
我们的目标就是为了让录入过程完全自动化,不再需要人类介入 。我们将网络引导基础设施从切换到iPXE,后者可以根据服务器的状态来决定如何引导:将“使用中”的服务器引导到生产OS,将“安装中”及未知的服务器引导到Duck所创建的微型Linux环境(我们称之为),然后通过一系列脚本执行安装或录入 。
为了让服务器在不需人类介入的情况下完成录入,我们放弃了以女性名命名服务器的做法,而是采用了各机器唯一、程序可发现的序列号 。在未知服务器上运行侦查脚本来确定序列号、硬件类型、网络接口等信息,并自动在上执行注册 。
配置请求
简单来讲就是鸟枪()换炮() 。早期我们通过脚本来自动读取JIRA上的“配置请求”事件,并发送能满足相应资源请求的必需命令 。配置请求包括:位置、角色、硬件规格以及服务器数量等信息,例如“在伦敦安装10台高IO的服务器,角色设定为”,则会在中找到合适的服务器,为它们安排域名,然后通过来请求安装 。
通过来调用,并引导目标服务器通过网络引导启动到来执行安装 。在安装完毕并重启新的OS之后,会根据服务器的角色做进一步配置 。
我们最开始提出了一系列问题,包括“能否将放在cron循环中”,就像解决DNS推送那样?不幸的是,不够智能,无法判断所运行的命令是如何运作的,我们担心这中间反反复复的工作反而会增加工作量 。
最后,我们采用了新的解决方案:,它实际上是版的,通过监控所有的安装进程以确保安装能够成功执行 。同时,对指数退避而导致失败的安装进程执行重试,替换那些一直无法安装的机器 。同时配置,以每天2次重复执行配置请求 。

详解:全球最大正版流媒体音乐服务平台Spotify是如何管理服务器的

文章插图
影响
经过我们的努力,这时候DNS改变、机器录入和配置请求都已经自动化了,从而将资源处理的等待时间从数周减少到了数小时 。我们不再需要执行DNS更新了,从而将运营小组从无聊、易出错的工作中解放出来,将精力集中到进一步改善同事们的周转时间和体验上 。
2014年中期——喘息空间
在最初的权宜解决方案部署之后的几个月里,整个小组都风平浪静 。的老员工都很高兴整个周转周期缩短了,但用惯了AWS和类似平台的新员工却不太满意还要等上几个小时 。由于整体基础设施可靠性不足,我们只让安装过程实现了自动化,而控制故障机器以及将多余服务器“回收”到可用池中这些工作,仍需要我们读取JIRA列表并运行脚本,因此是时候实现我们的宏伟愿景——为的工程师们实现自助服务平台与API,根据需求管理机器 。
Neep
我们以原堆栈为基础开始建立服务,这个服务就叫做Neep,负责协调机器的安装、回收及重启工作 。在每个数据中心都有特定的机器运行Neep,并以带外数据(OOB)的方式来管理网络 。由于吃过了的亏,我们将Neep打造成了基于RQ的轻量级REST API,也就是一个基于Redis的简单任务队列 。出于务实考虑,我们选用了作为web框架;并将继承为服务,希望能轻装上阵 。
{"status": "finished","result": null,"params": {},"target": "hardwarename=C0MPUT3","requester": "negz","action": "install","ended_at": "2015-07-31 17:45:53","created_at": "2015-07-31 17:36:31","id": "13fd7feb-69d7-4a25-821d-9520518a31d6","user": "negz"}