Snapchat 在青少年中廣為人知。 如果您無法弄清楚它是如何工作的,那麼您可能已經超過 25 歲了。 Snapchat 是最受歡迎的社交媒體應用程序之一,它為兒童和青少年提供了他們想要的東西:一種簡單的方法來分享日常事件,同時讓它們看起來很酷。
與記錄和發布你所做的一切的 Facebook 和 Twitter 不同,Snapchat 使用的消息應該會消失(看看它們如何不會消失)。
關於 Snapchat 的內容有很多,如果您是開發人員,那就更多了。 因此,這篇文章將為您提供 Snapchat 的高級視圖 系統設計 以及更多的見解。
簡介
Snapchat 是一家總部位於美國的 社交 應用程序可讓用戶立即連接、共享圖像等。
- 消息和圖像(或快照)有 24 小時的時間限制。 鼓勵人們在小組中分享他們的故事。
- Snap Map 允許用戶在地圖上查看他們的朋友所在的位置。
- 回憶會提醒用戶一年後保存或分享的照片。
- Snapchat 非常受年輕一代,尤其是青少年的歡迎。 該應用程序有 319 億活躍用戶,每天發送 5.4 億條快照。
重要的設計術語
單體架構 – 獨立於其他應用程序運行的單層應用程序稱為整體架構(整體架構)。 整體架構旨在執行和處理完成任務所需的所有活動。 該應用程序從頭到尾執行所有功能。
微服務 – 它與巨石截然相反。 微服務 是一種將應用程序組織為服務集合的架構方法。 這些服務用於控制應用程序的許多方面。 顧客下單,服務員拿走並交付,廚師準備。 在此示例中,每個組件的功能獨立且獨立於其他組件; 沒有人確切知道其他人在做什麼,也沒有人可以訪問相同的信息。
JSON:它是一種基於文本的格式,可用於顯示 JavaScript 對象、文字、數組和數據。 這種基於文本的格式旨在易於閱讀和編寫,並且易於軟件理解。 JSON 通常用於在服務器和在線應用程序之間傳輸數據和信息。
編曲配置:自動化許多操作的技術稱為編排。 這些工作包括計算機系統和軟件配置、協調和管理。
代理:代理充當尋找資源的客戶端和提供資源的服務器之間的中間人。
網孔:服務網格是一種軟件架構模式,它在基礎設施層上添加了一層,以允許通過代理在服務之間進行受監管、可觀察和安全的通信。
高級設計
整體問題
Snapchat 最初是一個基於 Google App Engine 的雲整體應用。 然而,隨著該程序越來越受歡迎並獲得更多用戶和數據,可擴展性成為一個問題。
此外,由於巨石內的爆炸半徑巨大,更可能出現系統範圍內的干擾。 Snapchat 的問題之一被定義為“公地悲劇”,其中功能爭奪對資源的訪問權; 功能在應用程序啟動時加載,允許某些功能加載速度更快,但其他功能加載速度更慢。
工程師還從開發的角度尋求組件的清晰可見性、分離性和所有權,以便服務靈活高效。
轉型
隨著 Snapchat 的擴張,該公司意識到需要將其龐大的基礎設施分解為更小、更高效的部分。 為了減少延遲,該組織決定開發基於微服務的設計。
為了實現這些目標,Snapchat 選擇使用 Amazon DynamoDB(一種可擴展的 NoSQL 數據庫服務)更新其軟件。 經過努力,該公司能夠將中位延遲減少 20%。
該應用程序被公司重寫為許多較小的應用程序。 Snapchat 最初有眾多應用程序,包括相機、聊天、記憶、圖片編輯、內容消費和地圖。 儘管將這些程序集成到一個整體中對消費者來說很方便,但它在保持良好性能方面提出了嚴重的技術問題。
為了重寫,公司製定了許多基本規則。 不預加載; 每個功能都應該是自己的應用程序,並且速度應該很快。 Snapchat 停止了多個地方的修改以實現重寫,這使其成為嚴格的技術任務。
附加功能集成
Snapchat 的相機應用程序具有鏡頭、濾鏡、位莫吉符號以及添加增強現實動畫的功能等。 Snapchat 的聊天應用程序還允許用戶存儲照片、保存對話、添加表情符號等。
除其他功能外,Snapchat 的地圖還可以讓您根據好友的需要監控他們。 回憶、照片編輯和內容消費都是獨立的 Snapchat 應用程序,具有獨特的功能。
回憶允許您存儲或修改照片或視頻以供以後使用,以及上傳或發送它們。 用戶還可以利用圖片編輯來剪切影片、添加文本、添加貼紙等。
Snapchat 的外部內容消費是指它根據一系列參數向用戶展示的內容。
微服務
當時該程序廣泛依賴 JSON 來執行網絡查詢。 然而,解析 JSON 既耗時又低效。 Snapchat 使用集中式網絡管理 API 來掩蓋 JSON 的使用,將其作為實現細節來解決此問題。
微服務引入了應用程序狀態管理、服務通信和故障管理的挑戰。 Snapchat 使用 Temporal 等開源技術來克服編排困難,以構建強大且可靠的系統。
因此,該組織決定使用服務網格設計模式。 Snapchat 使用 Envoy(另一個充當代理的開源工具)來實現此模式。 Envoy 通過基礎設施管理服務流量,使開發人員能夠了解潛在的困難。
Snapchat 在服務網格內創建了一個名為 Switchboard 的內部應用程序。 Switchboard 充當 Snap 服務的控制面板,允許用戶轉移流量、管理服務依賴性(一種允許根據其他服務的狀況來管理一項服務的功能)以及排出區域。
為了簡化服務中潛在配置的複雜性,使用了 Switchboard,而不是公開整個 Envoy API。 得益於服務網格,Snap 的微服務擁有一個通用的內部和區域網絡。
同一區域內的服務可以在不使用公共互聯網的情況下相互連接,並且外部網絡流量無法與內部網絡部分進行通信。
出於安全原因,只有網關才被授權將自己暴露在互聯網上。 例如,API 網關可以輕鬆地充當前門,處理來自客戶端/用戶的請求並通過網絡路由它們。
網絡和API網關
來自 Snapchat 客戶端的所有查詢都通過 API Gateway 進行。 它使用相同的 Envoy 映像並連接到與我們的內部微服務相同的控制平面。 我們的控制平面允許我們啟用自定義 Envoy 過濾器。
Snapchat 的身份驗證系統以及我們的速率限制和負載卸載技術都是由這些過濾器處理的。 在過濾器鏈完成後,Envoy 使用 Service Mesh 將請求路由到相關的微服務。
結論
Snapchat 的 API 網關將外部流量路由到應用程序的許多功能。 用戶修改配置狀態的請求由服務器管理,然後服務器 提供數據 並將信息返回到應用程序的眾多服務。
總體而言,Snapchat 目前的設計可以與在單個操作系統上運行的多個程序進行比較,在本例中為 Snapchat 應用程序。 我非常努力地向您提供 Snapchat 系統設計的高級概述。 希望你覺得它有用。
發表評論