美国36%流量背后 Netflix CDN分发算法优化
文 / Mohit Vora, Andrew Berglund, Videsh Sadafal, David Pfitzner, and Ellen Livengood
譯 / Ant,趙軍?
技術審校 / 扶凱
CDN的原理就是將用戶想要的內容放在距他盡可能近的地方,以最低的成本獲取。當面對海量的內容和用戶時,情況就變得很復雜。同時,任何設備都可能出現故障而失效,系統能夠面對任何一個設備失效被替換的情況,同時保證從集群到服務器各個硬件單元之間保持負載均衡。根據您2015年的統計,Netflix占據了美國36%的流量。本文將揭示Netflix如何應對如此巨大的流量,通過不斷改進的算法快速分配熱門內容,并保證整個CDN網絡平穩運行。
LiveVideoStack對本文進行的翻譯,感謝英特爾資深軟件開發工程師趙軍和云帆加速聯合創始人&CTO扶凱協助完成翻譯和審校。
之前我們曾經討論過內容的流行度,通過計算、預測以及使用內容的流行度來最大化的發揮Open Connect(Netflix發起的開放CDN平臺)的硬件基礎設施的能力,同時我們也討論了這一領域的一些其他數據科學的挑戰。我們還在最近的文章討論了如何提升服務器的吞吐量(throughput)的問題。本文,我們將深入討論如何在Open Connect服務器(有時也稱作 Open Connect Appliances 或者 OCAs)上分配內容,包括我們的哈希策略以及如何處理異構服務器集群。這個工作是Nexflix的Open Connect團隊與Science & Analytics 團隊一起合作的一個成果。
內容(文件)放置策略與目標
文件的放置策略涉及到決定把哪些文件內容放署在哪些集群的哪個服務器上(更多內容可以參考早期文章,它綜述了為什么這些決定是非常重要的)。一般而言,為了讓集群的流量最大化,應該把最流行(熱門)的內容放在當前集群中;并保證集群中的每臺服務器上是負載均衡。其次,要保證集群長期的穩定,尤其是在增加或移除服務器過程中保持穩定(不能讓熱點失效)。最后,這個分配文件內容放置策略與目錄算法必須在有限時間就要計算出來的(時間過久會影響分發效率)。
統一的一致性哈希(Uniform Consistent Hashing)
我們使用一致性哈希在多個服務器中分發內容。想象一個圓環,從0一直到N(見圖1)。服務器ID從S1到Sn哈希后分布在這個圓環中,每個服務器ID的哈希值h(Si)之前的空間為他自己所有(在圖2中被涂上了一種顏色)。內容ID從C1到Cm哈希后也在同樣的圓環中。于是,每個內容ID的哈希Ci落在了服務器ID哈希Si的空間中。
圖1,圖2,圖3
另外,我們把每個服務器ID(S1到Sn)哈希了1000次以使得內容(content)合理的均勻分布,且當集群服務器發生增減時,為了促進公平再次進行哈希。通過使用統一的一致性哈希,我們為每個服務器分配了一個相同的權重,最終我們發現盡可能多的需要被替換的特定內容。
采用這種技術,對服務器的擾動做到最小。當增加或刪除文件內容時,服務器只需要對這些變動的文件內容的切片進行下載或刪除操作。當集群增加服務器時,當有1000個新的切片過來時, 會分布在整個哈希的圓環中,新的服務器所要處理的切片數量與其他服務器差不多。類似的,當服務器從集群移除時,他自己的1000個切片也會刪除,他所管理的內容會在服務器移除后重新平均哈希到到集群中的其他服務器。
異構集群分配
服務器異構
對于Netflix而言,當引入一組異構服務器會導致額外的復雜性,一致性哈希是次優的方法(對同一集群非常有效)。我們的服務器主要分為兩類,即磁盤存儲和SSD存儲。磁盤存儲服務器大部分由機械磁盤組成,提供最高200TB空間,大約40Gbps的吞吐率。SSD服務器完全由SSD磁盤組成,提供最大100Gbps的吞吐率,最大支持18TB空間。在一些中小型的ISP服務商,我們只托管磁盤存儲服務器。在我們的IX和大型的ISP服務商中,會托管兩種服務器,SSD服務器處理大部分流量,磁盤服務器負責存儲所有的目錄文件。
我們的硬件團隊,建立了一套新的服務器以應對日益增長的容量需求。為了最大的彈性,我們需要讓新的服務器與老服務器并肩戰斗,而無需在資源利用上進行妥協。另外,任何一個磁盤都可能壞掉,我們要自動的將損壞的磁盤屏蔽掉,這會導致即使是相同的服務器,其磁盤空間也不盡相同。總而言之,這些復雜性意味著,集群中的服務器有著不同級別的存儲量和吞吐量。
當服務器時同構時,一致性哈希工作非常不錯;但在服務器異構情況下,整個系統趨于資源的過載或低載。
不同的存儲空間:由于集群中的服務器容量不同(比如,4個100TB的服務器和1個50TB的服務器組成一個集群),還使用一致性哈希會產生1/5的空洞內容(從第250TB的標記到500TB的標記之間), 因些我們會在存儲的熱門文件中創建一個間隔(我們稱之為“內容洞”)。在某些情況下,“內容洞”會導致文件內容不可用。
不同的吞吐量:在2016年,我們構造的服務器在18TB容量(SSD)下支持100Gbps的吞吐量;而我們大部分產品化部署的SSD服務器吞吐量為40Gbps,12TB容量。因為服務器的流量正比于存儲空間3:2 (18T:12T),但目標流量比例應該接近于 5:2(100Gbps : 40Gbps),此時一致性哈希不能把這兩種服務器放到一個集群中。
如何應對這一狀況呢?我們開發了新的算法稱之為異構集群分配(HCA,Heterogeneous Cluster Allocation)。通過智能的分配內容,HCA算法可以更好的發揮基礎設施的性能。
HCA通過調整分配協議來解決上述問題。基本的原理很簡單——保留了一致性哈希,但通過一個模型來調整不同服務器上的內容權重。權重的調整是通過改變每個服務器在一致性哈希圓環上的哈希片段的數量來實現的。
算法
我們有兩個條件需要被滿足:
內容分布正比于每個服務器的存儲能力,且不引起內容洞
根據每個服務器的吞吐量分布熱數據和冷數據
一個簡單的加權一致性哈希算法——給每臺服務器分配不同的權重,可以滿足上述兩個條件中的之一,但不能同時支持。如果要同時支持兩個條件,我們需要兩個不同分配權重的集合---- 一個是為流行的內容,另一個為非流行內容。
HCA算法分兩個階段分配內容,每個階段都有自己的加權一致哈希環。要配置它,我們必須為每個階段的每臺服務器指定權重,以及一個目錄深度D(截點)用于從階段1切換到階段2。給定每個服務器的存儲和吞吐量規格,區域和候選截點D,我們制定和解決一個優化問題,其解要么是產生滿足上述兩個條件的分配權重集合, 要么就確定截點D是不可行的(沒有配置滿足約束條件)。?
雖然可能存在沒有HCA配置滿足某些集群和流行度曲線組合的情況,但是我們發現,在實踐中通常存在大范圍的可行截止D。對于最終的HCA配置,我們選擇導致跨過截斷點的內容的最小擾動的截止D *。例如,如果截止點在目錄深度D處,并且特定可下載內容的流行度排名在第一晚和下一晚由于受歡迎程度的變化,它會在連續的時間點分配在不同的環,并可能搬移到不同的服務器。我們選擇其搬移概率最小的截斷點。
我們還需要處理群集配置發生變化的情況 - 例如,在群集中添加或刪除OCA時,如果HCA的重新配置改變截止D *或令牌數量,這種情況也可能導致擾動。為了緩解這種影響,我們可以放大或縮小每個區域的令牌數量(只有它們的比例重要,而非絕對數量)以在重新配置之間產生較小的擾動。
結果
使用HCA算法在OCA的服務器上分發數據是很有價值的,并伴隨著內容洞減小,以及負載均衡能力提升。
?
LiveVideoStack招募全職技術編輯和社區編輯
LiveVideoStack是專注在音視頻、多媒體開發的技術社區,通過傳播最新技術探索與應用實踐,幫助技術人員成長,解決企業應用場景中的技術難題。如果你有意為音視頻、多媒體開發領域發展做出貢獻,歡迎成為LiveVideoStack社區編輯的一員。你可以翻譯、投稿、采訪、提供內容線索等。
通過contribute@livevideostack.com聯系,或在LiveVideoStack公眾號回復『技術編輯』或『社區編輯』了解詳情。
總結
以上是生活随笔為你收集整理的美国36%流量背后 Netflix CDN分发算法优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷沉沉:专注视频技术十几年
- 下一篇: 苹果加入AOM联盟 AV1获全主流生态平