揭露:這篇文章包含附屬連結;如果您透過本文中提供的不同連結購買產品或服務,我可能會獲得補償。
信用 - ByteByteGo
開發者們大家好,自從大型科技公司更加關注系統設計以來,每個人都開始學習現有系統的架構,這很好,因為沒有比研究現有的現實世界的大型應用程式(例如Netflix)更好的學習方法了。
上個月,微軟和Crowtstrike的全球宕機影響了超過900 萬台設備,這也顯示我們的世界現在是多麼互聯,一個更新可能會導致數千次航班延誤,並給數百萬人帶來麻煩。
擁有 2.47 億訂閱用戶的 Netflix 展示了卓越的系統架構,可確保無縫串流媒體和卓越的用戶體驗,但它是如何做到的呢?
我在這方面花了很多時間,我將在本文中分享我的學習成果。
但如果您正在準備系統設計面試,那麼了解像 Netflix 這樣的分散式系統是系統設計面試的重要主題。
除了準備常見的系統設計問題(例如API 閘道與負載平衡器、正向代理與反向代理以及常見的系統設計問題)之外,了解大型科技公司如何解決系統設計問題也很有意義。
順便說一句,如果您正在準備系統設計面試並想深入學習系統設計,那麼您還可以查看ByteByteGo 、 Design Guru 、 Exponent 、 Educative 、 Codemia.io和Udemy等網站,它們有許多很棒的系統設計課程
此外,對各種架構模式(例如點對點模式和 API 網關)的紮實了解對於設計能夠經受生產時間考驗的系統大有幫助,就此而言,這是來自DesignGuru.io的關於微服務的漂亮圖表建築學:
我三週前開始學習 Netflix 架構,我的第一站是 YouTube,我看到了許多 Netflix 架構影片,我將在本文中分享這些影片以及我學到的經驗教訓。
我觀看的第一個影片是關於如何從Exponent設計 Netflix,如果你正在準備系統設計面試,這是我最喜歡的頻道之一
我觀看了這個影片來了解問題和我的解決方案,然後才看到 Netflix 是如何解決這些問題的。
如果您想更好地學習Netflix 架構,您應該首先觀看此影片,因為它會激發您的思維來解決這些軟體設計問題,您很可能會因自己有限的知識而苦苦掙扎,但這也為更好地學習奠定了基礎。
我觀看的下一個影片是BytBytGo的 Netflix API 架構影片的演變,BytBytGo 是我最喜歡的YouTube 系統設計頻道之一。
影片展示了 Netflix API 架構如何從整體發展到直接存取網關聚合層,再到現在的聯合網關。
嗯,其中許多術語聽起來很陌生,因為它們是非常先進的技術,但簡而言之,它們只是解決大規模的問題。您應該觀看影片以更好地理解它們。
我觀看的第三個影片來自 InfoQ,另一個著名的 YouTube 科技頻道,其中討論了 Netflix 上微服務的使用
另一個引起我注意的關於 Netflix 架構的影片是 Netflix 如何為全球數百萬客戶提供服務
我還花時間閱讀Netflix 技術博客,這也是您可以閱讀的有關係統設計的優秀軟體工程博客之一
在花了這麼多時間之後,我對 Netflix 架構有了一些了解,並且學到了一些經驗教訓,我將在本文中與您分享這些經驗教訓。
以下是從 Netflix 架構中收集到的十個系統設計課程,可以幫助您了解建立可擴展、可靠和高效系統的複雜性。
Netflix 的架構分為三個主要元件:用戶端、後端和內容傳遞網路 (CDN) 。
客戶端可以是行動應用程式、網頁瀏覽器或智慧電視應用程式。
後端在 AWS 上執行,處理內容個人化和支付處理等任務。
CDN,特別是Netflix 的客製化 Open Connect Appliance (OCA),用於儲存和串流影片。
*教訓:**客戶端、後端和 CDN 元件之間的明確職責分離可確保高效處理任務和可擴展性。*
Netflix 在AWS上執行其後端以利用彈性,使其能夠在高峰時段加入伺服器並在非高峰時段減少伺服器。
這種現收現付模式具有成本效益且靈活。
教訓: AWS 等雲端服務提供了有效處理不同負載所需的可擴充性和靈活性。
Netflix 使用 DynamoDB 和 Cassandra 等資料庫營運約700 個微服務。這種微服務架構實現了模組化、易於維護和獨立的可擴展性。
*教訓:**微服務架構增強了可擴展性、故障隔離和開發敏捷性。*
順便說一句,如果您想知道 Netflix 使用什麼技術堆棧,這裡有一個很好的圖表,描述了來自ByteByteGo的 Netflix 技術堆疊
Netflix 跨多個可用區和 AWS 區域執行其後端服務,確保高可用性和容錯能力。
這對於確保當其中一個 AWS 資料中心因自然災害而停電或關閉時 Netflix 不會宕機非常重要。
*教訓:**地理冗餘可以增強系統可靠性並最大限度地減少區域故障的影響。*
Netflix 的客製化 CDN OCA 採用專為傳輸大檔案而優化的商用硬體建置。
OCA 安裝在 ISP 處,以使它們靠近用戶,減少延遲並提高串流品質。
*教訓:**根據特定需求量身訂製的 CDN 可以勝過通用解決方案,提供更好的控制和效率。*
當au ser按下播放鍵時,Netflix用戶端會根據網路狀況連接到最近的OCA ,以確保最佳的串流媒體效能。
如果發生網路擁塞或故障,OCA 會自動切換。
*教訓:**適應網路條件的智慧內容傳遞機制可增強使用者體驗並確保可靠性。*
Netflix 支援 2200 種不同的設備,每種設備都需要特定的視訊格式。
視訊被轉碼為各種格式並分成區塊以支援自適應位元率流,根據網路條件調整視訊品質。
*經驗教訓:**高效的轉碼和自適應位元率串流媒體可確保在不同裝置和不同網路條件下實現高品質播放。*
Netflix 預測用戶可能在非高峰時段觀看的影片並將其緩存在 OCA 中,從而減少頻寬使用並提高串流速度。
*教訓:**預測性[快取策略](https://medium.com/javarevisited/what-is-caching-in-system-design-type-of-caching-strategies-you-should-learn-8ad18799196c)可以顯著減少載入時間和頻寬成本,從而增強使用者體驗。*
Netflix 在影片檔案中加入 DRM 來加密內容並防止盜版,確保優質內容的安全交付。
*教訓:**實施 DRM 可保護智慧財產權並確保遵守內容授權協議。*
Netflix 的後端會根據使用者的 IP 位址提供 10 個最佳 OCA 的 URL。客戶端測試網路連線品質並選擇最佳的 OCA 進行串流傳輸。
*課程:**自適應網路處理和智慧型伺服器選擇可優化串流媒體效能和彈性。*
這是Muhammad Saddam製作的精美動畫圖,它對 Netflix 架構進行了高級概述:
而且,這裡列出了最好的系統設計書籍、線上課程和練習網站,您可以查看這些書籍,以便更好地為系統設計面試做好準備。這些課程中的大多數也回答了我在這裡分享的問題。
DesignGuru 的 Grokking 系統設計課程:一個互動式學習平台,提供實作練習和真實場景,以增強您的系統設計技能。
Codemia.io :這是另一個練習面試系統設計問題的好平台。它有超過 120 多個系統設計問題,其中許多是免費的,而且它還有一個適當的結構來解決這些問題。
Alex Xu 的《系統設計面試》 :本書深入探討了系統設計概念、策略和麵試準備技巧。
Martin Kleppmann 的「設計資料密集型應用程式」 :綜合指南,涵蓋了設計可擴展且可靠的系統的原則和實踐。
LeetCode 系統設計 標籤:LeetCode 是一個受歡迎的技術面試準備平台。 LeetCode 上的系統設計標籤包含各種練習問題。
GitHub 上的「系統設計入門」 :精選的資源列表,包括文章、書籍和影片,可幫助您準備系統設計面試。
Educative 的系統設計課程:一個互動式學習平台,提供實作練習和真實場景,可增強您的系統設計技能。
高可擴展性部落格:該部落格包含有關高流量網站和可擴展系統架構的文章和案例研究。
YouTube 頻道:請參閱「Gaurav Sen」和「Tech Dummies」等頻道,以取得有關係統設計概念和麵試準備的富有洞察力的影片。
ByteByteGo :Alex Xu 的一本現場書籍和課程,用於系統設計面試準備。它包含《系統設計訪談》第 1 捲和第 2 卷的所有內容,並將隨即將推出的第 3 卷進行更新。
Exponent :一個專為面試準備的網站,特別是針對亞馬遜和谷歌等 MAANG 公司,他們還有很棒的系統設計課程和許多其他材料,可以幫助您破解 FAANG 面試。
image_credit - ByteByteGo
您還應該透過參與實際專案和參加模擬面試,將理論知識與實際應用結合。不斷的練習和學習無疑會提高你在系統設計面試中的熟練程度。
這就是您可以從 Netflix 架構中學到的所有系統設計課程。 Netflix 的架構體現了深思熟慮的系統設計如何能夠處理大規模並提供無縫的使用者體驗。
透過利用雲端服務、微服務架構、客製化 CDN 解決方案和智慧內容交付策略,Netflix 確保了高效能、可靠性和可擴展性。
這些來自 Netflix 架構的經驗教訓為任何想要建立和擴展強大系統的人提供了寶貴的見解。
如需進一步閱讀和了解有關 Netflix 架構的更多詳細訊息,您可以觀看我分享的 YouTube 影片,並查看下面的參考資料。如果您發現本文有用,請考慮與對系統設計有興趣的人分享。
參考:
原文出處:https://dev.to/somadevtoo/10-things-you-can-learn-from-netflixs-architecture-1bnn