前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spotify是如何调整CDN服务来实现闪电般的快速流媒体体验

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

作者头像
LiveVideoStack
发布2020-03-12 19:03:40
1.3K0
发布2020-03-12 19:03:40
举报
文章被收录于专栏:音视频技术

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-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LiveVideoStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档