Spotify的业务建立在出色的的内容交付之上。经过十年的发展,我们使用了许多不同的CDN解决方案,这不但增加了我们平台架构的复杂性,同时也降低了研发组织的效率。

文 / Spotify Engineering

译 / 元宝

原文

https://labs.spotify.com/2020/02/24/how-spotify-aligned-cdn-services-for-a-lightning-fast-streaming-experience/

一个着眼于未来的企业

Spotify的业务建立在出色的的内容交付之上。我们的流媒体平台为全球月活跃超过2.3亿的用户提供超过5000万首歌曲(以及一系列图像等其他内容),这使得我们成为全球领先的流媒体服务提供商之一。我们的内容给人一种即时和身临其境的感觉,帮助我们的客户与他们最喜欢的艺术家一起获得最佳的体验。

在幕后,随着时间的推移,我们的技术不断发展,致力于实现尽可能出色的用户体验。经过十年的发展,我们使用了许多不同的CDN解决方案,这不但增加了我们平台架构的复杂性,同时也降低了研发组织的效率。Spotify的音频流多CDN策略是运行良好的。然而,为了提供其他类型的内容分发(如图像或客户端更新)服务,我们不得不组织了一个新的团队,他们的职责是专注于使用跨多个工程团队的Fastly edge云平台来让我们的CDN标准化,并提供自动化的协助、管理和支持服务。

团队自主权的挑战

我们的工程师文化提倡合作自主,我们的研发部门包含2000多名员工,他们被分组多个“团队”。在这种自主模式中,每个团队都有自己做决定的权利,包括决定哪些技术、工具和流程是最适合他们的。这能够有助于部门快速行动,但同时我们也要权衡可能存在的技术分歧风险。

太多的CDN,太少的监管

分片化中的一个较为困难的领域就是内容交付。Spotify使用的Akamai和AWS的CDN解决方案,并将其用于音频流等关键业务内容分发。它们的表现十分良好,并且在经过优化之后实现了低延迟和高带宽。但是,用于其他内容的CDN操作都变得低效,有些内容直接从AWS S3或谷歌云存储等存储桶中流式传输生成。开发人员只是简单地使得存储桶可读并将URI放入他们的代码中之后就可以继续了。其他团队使用了一些为特定用例而创建的服务,如为图像调整大小或添加水印,并将它们用在完全不同的地方。我们的新解决方案还解决了一些问题,比如一些小团队在不完全了解其配置的情况下就继承了CDN端点。

基于Fastly构建公司的CDN解决方案

作为迈向标准化的第一步,新的CDN团队创建了一个简单的工作流程,该工作流使得团队能够获得新的CDN服务并在Fastly上快速运行。我们已经多年成功地使用Fastly的edge云平台交付音频流,并也希望能使用Fastly来交付其他类型的内容。鉴于这一现状,CDN团队正面临着“自主一致”的组织挑战。

说服团队迁移

新的工作流程吸引了那些想要实施全新服务的团队。对于那些已经在运行不同CDN域的人来说,迁移到新系统似乎需要做很多的工作。为了说服其他团队,CDN团队传达给其他团队关于新系统的诸多特性,包括新系统有更快的性能以及在访问指标和交付日志记录等方面的优势。更好的是,CDN团队可实现在7*24小时全天候监控整个CDN请求路径。

易于运维的计划

除了故障排除之外,CDN团队还想要一个易于维护的系统。他们决定使用Fastly API来构建一个自动化系统,以便专注于为业务增加更多价值的项目。

将API和VCL整合在一起

我们的开发人员使用Fastly的可定制边缘计算语言VCL (Varnish配置语言)来执行智能缓存,将应用程序逻辑推送到网络边缘,并根据位置、语言和设备类型来定制用户的体验。基于Spotify的精神,我们需要定制CDN功能来处理错误和重定向以及令牌识别等任务。我们将FastlyAPI与VCL结合起来,并使用API来设置一些简单的操作,比如创建一个新服务、配置主机名、添加源或记录端点,以及处理VCL中的所有其他事情。

请求CDN审核的自助服务工具

我们开发了一个SquadCDN来提供内部部署前的审查服务,在这里就使用到了Fastly的API和VCL。任何Spotify团队都是可以访问该工具的,只需输入一个简单的YAML文件,在里面写好一些具体的信息即可,如域、源、存储区和配置标志。然后,该工具会发送一个拉取的请求,来供CDN团队审核和批准。有了这一点,CDN团队就实现了提供自动化的简单工作流的目标。

一路走来的教训

当CDN团队为Spotify研发开拓新的领域时,他们总结了许多帮助他们到达目标的技巧和最佳实践,比如:

  • 内部测试是关键。在将一些次要的服务转移到Fastly之后,该团队意识到他们需要首先转移关键的内容交付服务。这里包括任何面向公众的内容,如音频、视频、专辑封面和艺术家图像。他们检查并清理了所有的传输路径VCL,并修复了自动化流程中的潜在问题。

  • 保护安全内容。安全是Spotify最关心的问题,保护用户数据是建立信任不可或缺的前提。将日志中的密码等用户敏感数据删除是一项至关重要的举措。CDN小组使用Fastly的Edge字典来维护密钥存储值,这个值是无法直接人工读取的且仅在VCL中被引用。即使在管理工具中查看VCL,开发人员也只能看到变量而不是私有数据。

  • 注意API调用限制。即使有很高的限制,一次调用太多的API也会导致部署失败。仔细规划API调用将有助于确保一切服务顺利运行。

  • 验证所有的事情。当一个团队提交一个新服务时,CDN团队会验证一些可保持服务正常运行的关键细节。他们给团队提供了一个测试文件,这将帮助他们侦测与配置或存储同权限等相关的问题。

  • 禁止写入存储桶。还有很重要的一点就是,小团队不能允许别人向创建CDN端点发送put请求并覆盖文件,因为凭证是允许写入到存储桶的。(幸运的是,Spotify的所有服务都不需要写入原始信息。)

  • 进行灰度测试。部署后,CDN团队在internet上进行端到端测试,并传输他们知道应该存在的文件。自定义的VCL可确保文件不会被缓存,因此灰度测试路径允许它们到达源端并读取正确的信息。如果在部署后发现了问题,则可以自动将应用回滚到以前的版本并开始调试。

  • 实施良好实践。如果团队想要通过HTTP进行不间断的传送,那么他们需要提出请求。这使得CDN团队有机会讨论团队需求并确定合适的用例。他们也会要求其他团队给处理个人数据的服务贴上标签,以便他们可以更好地遵守GDPR,并促进他们对缓存与清除方面的默认设置进行合理调试。

  • 让别人容易做到。没有人会使用一个需要花大量精力维护的系统。我们认为,最好要做一些从长远来看可让每个人都能从中受益的工作。我们使用的一种策略是主动识别边缘的CDN端点并提供修改代码的服务,以便拥有这些端点的团队能够更容易地将它们的服务快速迁移到Fastly上。这使得整个组织的团队都能够以更快的速度和更敏捷的方式迁移服务。

成功的CDN阵营

在组成CDN团队一年半之后,我们的CDN环境已经得到了显著的改善

现在,超过60个小团队已经开始使用新配置下的系统,这占整个研发组织的20%以上。超过80个以上的服务现在通过使用CDN团队的模板化工具和简化工作流程实现更快、更有效地内容交付。最重要的是,我们的工程师都感到很高兴,因为他们不再需要担心CDN的细节并能更加专注于他们的核心任务。

LiveVideoStackCon 2020

上海/北京/旧金山 讲师招募

2020年LiveVideoStackCon将持续迭代,LiveVideoStackCon将分别在上海(6月13-14日),北京(9月11-12日)和旧金山(11月)举行。欢迎将你的技术实践、踩坑与填坑经历、技术与商业创业的思考分享出来,独乐不如众乐。请将个人资料和话题信息邮件到 speaker@livevideostack.com 或点击【阅读原文】了解成为LiveVideoStackCon讲师的权益与义务,我们会在48小时内回复。

Spotify是如何调整CDN服务来实现闪电般的快速流媒体体验相关推荐

  1. CDN服务品质协议1

    甲方: 乙方:XXXX 为规范乙方为甲方提供的CDN加速服务及相关的客户服务的质量,以保证甲方能获得良好的服务,甲乙双方经友好协商,特签订如下协议.本协议作为XXX合同(以下简称主合同)的补充,与主合 ...

  2. 直播技术:从性能参数到业务大数据,浅谈直播CDN服务监控

    线上服务的有效监控和数据收集,一直是后端服务离不开的话题.直播作为一种经典的分布式系统,监控以及数据收集更是必不可少的工作.如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优化服务 ...

  3. 从性能参数到业务大数据,浅谈直播CDN服务监控

    线上服务的有效监控和数据收集,一直是后端服务离不开的话题.直播cdn作为一种经典的分布式系统,监控以及数据收集更是必不可少的工作.如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优 ...

  4. 360网站卫士常用前端公共库CDN服务停掉了

    今天发现原先程序中调用的类似http://fonts.useso.com/css?family=Open+Sans:400,300,600,700&subset=all直接报502了,访问36 ...

  5. CDN服务技术架构图

    前言 在博文中 解读大型网站的演变过程  浅谈 举家搬迁静态文件到CDN 博文中都有涉及CDN,这次我们来详细讲解下CDN的架构 简介 CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器 ...

  6. html是用cdn资源,网站常用前端公共库CDN服务资源(百度+360)

    谷歌最近很不稳定,模板无忧原本使用的google cdn的Jquery库,因为google服务器问题,导致网站打开速度超慢. 严重影响了网站体验,特整理了本篇文章,分享一下国内的各类常用资源cdn公用 ...

  7. day08 系统篇端口扫描CDN服务负载均衡WAF防火墙

    前言 #知识点: 获取网络信息-服务厂商&网络架构 2.获取服务信息-应用协议&内网资产 3.获取阻碍信息-CDN&WAF&负载&防火墙 #详细点: CDN服务 ...

  8. 国内可用的css,js,图标字体,等常用前端公共库CDN服务

    CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节 ...

  9. 360网站卫士常用前端公共库CDN服务

    360网站卫士常用前端公共库CDN服务 360网站卫士常用前端公共库CDN服务 360网站卫士常用前端公共库CDN服务 posted on 2014-06-11 22:02 lexus 阅读(...) ...

最新文章

  1. 使用WinHttp接口实现HTTP协议Get、Post和文件上传功能
  2. python tablewidget综合实例_python – 仅通过单击行标题选择QTableWidget行
  3. 无法在流的结尾之外进行读取_IO流,字节流,字符流
  4. Spring jdbc的搭建
  5. 怎么改变光标Cursor(5种方法)
  6. vsFTPD编译安装使用实用手册
  7. 从架构设计、部署方式、使用方法、应用场景等方面,比较tfs、hdfs、fastdfs、Tachyon的异同
  8. 记自己在spring中使用redis遇到的两个坑
  9. Python 绘制热力图参数详解
  10. 阿里99大促 | 模型识别背后的样本生成
  11. 为OracleLinux配置FTP yum源
  12. C语言 FileStreaming fseek
  13. 开源图数据库项目 DGraph 的前世今生 | 技术头条
  14. Unity3D基础11:Rigidbody物理类组件
  15. 一款小清新版的java代码生成器,springboot脚手架
  16. JS数组方法最全最详细总结
  17. postgreSQL数据库的监控及数据维护
  18. 描述计算机内的存储单位及换算关系,计算机存储单位换算
  19. 什么是正态分布?二八法则又是什么?
  20. 论文阅读《Learning for Disparity Estimation through Feature Constancy》

热门文章

  1. android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码...
  2. VMware克隆centos系统后不能识别eth0
  3. SQL Server 2012笔记分享-6:理解内存管理
  4. 木糖醇、可口可乐零度:可怕的传闻
  5. 2021牛客多校7 - xay loves monotonicity(线段树区间合并)
  6. CodeForces - 1523D Love-Hate(随机数+状压dp)
  7. 中石油训练赛 - Get Strong(dfs双向搜索+二分)
  8. HDU - 5919 Sequence II(主席树+思维)
  9. 牛客 - 树上求和(贪心+树形dp)
  10. (转)Splay伸展树模板