Spotify是如何调整CDN服务来实现闪电般的快速流媒体体验
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服务来实现闪电般的快速流媒体体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频会议未来趋势不完全预测
- 下一篇: LiveVideoStack线上分享第五