揭露:這篇文章包含附屬連結;如果您透過本文中提供的不同連結購買產品或服務,我可能會獲得補償。

系統設計面試的 5 大快取策略

image_credit - ByteByteGo

朋友們大家好,在系統設計中,效率和速度是最重要的,為了增強效能和減少回應時間,快取扮演著重要的角色。如果您不知道什麼是快取?讓我先給你一個簡短的概述

快取是一種技術,涉及將經常存取的資料的副本儲存在允許更快檢索的位置。

例如,您可以將網站存取量最大的頁面緩存在 CDN(內容交付網路)內,或者類似地,交易引擎可以在處理訂單時緩存符號表。

過去,我分享過幾篇系統設計面試文章,例如API 網關與負載平衡器正向代理與反向代理以及常見的系統設計問題,在本文中,我們將探討系統設計中快取的基礎知識,並深入研究不同的快取策略這些都是技術面試的必備知識。

它也是程式設計師必須了解的基本系統設計主題或概念之一。

順便說一句,如果您正在準備系統設計面試並想深入學習系統設計,那麼您還可以查看ByteByteGoDesign GuruExponentEducativeUdemy等網站,它們有許多很棒的系統設計課程

如何回答系統設計問題

PS 繼續閱讀直到最後。我有一份免費獎金給你。


軟體設計中的快取是什麼?

從本質上講,快取是一種將資料副本儲存在比原始來源更快存取的位置的機制。

透過保持經常存取的資訊隨時可用,系統可以更快地回應使用者請求,從而提高整體效能和使用者體驗。

在系統設計的背景下,快取可以發生在各個級別,包括:

  1. 客戶端緩存

客戶端(使用者的裝置)在本機上儲存資源的副本,例如映像或腳本,以減少向伺服器重複請求的需要。

  1. 伺服器端緩存

伺服器儲存請求回應的副本,以便在再次發出相同請求時可以快速提供相同的回應。

  1. 資料庫快取

經常查詢的資料庫結果儲存在記憶體中,以便更快地檢索,從而減少重複執行相同資料庫查詢的需要。

下圖顯示了客戶端和伺服器端快取:

系統設計中的伺服器端與客戶端緩存


系統設計面試的 9 種快取策略

了解不同的快取策略對於在技術面試中取得好成績至關重要,尤其是對於涉及設計可擴展和高效能係統的角色。以下是一些需要了解的關鍵快取策略:

1.最近最少使用(LRU)

這種類型的快取用於首先刪除最近最少使用的專案。您可以透過追蹤每個專案的使用情況並逐出最長時間未使用的專案來輕鬆實現這種快取。

如果面試中問到,可以使用雙向鍊錶來實現這種緩存,如下圖所示。

不過,在現實世界中,您不需要建立自己的緩存,您可以使用現有的資料結構(例如 Java 中的 ConcurrentHashMap)進行快取或使用其他開源快取解決方案(例如 EhCache)。

最近最少使用 (LRU) 快取策略


2. 最近使用的 (MRU)

在這種類型的快取中,首先刪除最近使用的專案。與 LRU 快取類似,它需要追蹤每一項的使用情況並逐出最近使用過的一項。


3. 先進先出(FIFO)

這種類型的快取首先驅逐最舊的專案。如果在面試期間詢問,您可以使用佇列資料結構來維護將專案新增至快取的順序。

先進先出 (FIFO)


4. 隨機更換

這種類型的快取會隨機選擇一個專案進行驅逐。雖然這種類型的快取實現起來更簡單,但可能並非在所有場景下都是最佳的。


5. 直寫式緩存

在這種類型的快取中,資料同時寫入快取和底層儲存。這種類型的快取的優點之一是它可以確保快取始終是最新的。

另一方面,由於雙重寫入,寫入延遲會增加。

直寫式快取


6. 後寫式快取(Write-Back)

在這種類型的快取中,資料會立即寫入緩存,而底層儲存的更新則被推遲。

這也減少了寫入延遲,但如果系統在更新寫入儲存之前發生故障,則會降低資料遺失的風險。

下面是它的工作原理:

後寫式快取(Write-Back)快取工作


7. Cache-Aside(延遲載入)

這意味著應用程式程式碼負責將資料載入到快取中。它提供對快取資料的控制,但另一方面,它還需要額外的邏輯來管理快取填充。

快取旁路(延遲載入)工作


緩存失效

除了快取和不同的快取策略之外,這是軟體工程師應該了解的另一個重要概念。

當底層儲存中的對應資料發生變更時,快取失效會刪除或更新快取條目。

快取失效的最大好處是確保快取資料保持準確,但同時也帶來了管理快取一致性的複雜性。

而且,這是來自DeisgnGuru.io的一個很好的圖表,它解釋了系統設計面試的各種快取失效策略

前 3 種快取失效策略


全域緩存與本地緩存

在全域快取中,單一快取在多個實例之間共用。在本地快取中,每個實例都有自己的快取。全域快取的優點之一是它可以提高資料一致性,而本地快取可以減少爭用並提高效能。

全域緩存與本地緩存


系統設計訪談資源:

而且,這裡列出了最佳系統設計書籍、線上課程和練習網站,您可以查看這些內容,以便更好地為系統設計面試做好準備。這些課程中的大多數也回答了我在這裡分享的問題。

  1. DesignGuru 的 Grokking 系統設計課程:一個互動式學習平台,提供實作練習和真實場景,以增強您的系統設計技能。

  2. Alex Xu 的《系統設計面試》 :本書深入探討了系統設計概念、策略和麵試準備技巧。

  3. Martin Kleppmann 的「設計資料密集型應用程式」 :綜合指南,涵蓋了設計可擴展且可靠的系統的原則和實踐。

  4. LeetCode 系統設計 標籤:LeetCode 是一個受歡迎的技術面試準備平台。 LeetCode 上的系統設計標籤包含各種練習問題。

  5. GitHub 上的「系統設計入門」 :精選的資源列表,包括文章、書籍和影片,可幫助您準備系統設計面試。

  6. Educative 的系統設計課程:一個互動式學習平台,提供實作練習和真實場景,以增強您的系統設計技能。

  7. 高可擴展性部落格:該部落格包含有關高流量網站和可擴展系統架構的文章和案例研究。

  8. YouTube 頻道:請參閱「Gaurav Sen」和「Tech Dummies」等頻道,以取得有關係統設計概念和麵試準備的富有洞察力的影片。

  9. ByteByteGo :Alex Xu 的一本現場書籍和課程,用於系統設計面試準備。它包含《系統設計訪談》第一捲和第二卷的所有內容,並將隨即將推出的第三卷進行更新。

  10. Exponent :一個專為面試準備的網站,特別是針對亞馬遜和谷歌等 FAANG 公司,他們還有很棒的系統設計課程和許多其他材料,可以幫助您破解 FAANG 面試。

如何為系統設計做準備

image_credit - ByteByteGo

結論:

這就是軟體工程師應該了解的有關快取和不同類型快取的全部內容。正如我所說,快取是系統設計中的一個基本概念,對快取策略的深入理解對於技術面試的成功至關重要。

無論您是要優化速度、最大限度地減少延遲還是確保資料一致性,選擇正確的快取策略都取決於您正在設計的系統的特定要求。

當您準備技術面試時,請深入研究這些快取策略,了解它們的權衡,並準備好將這些知識應用到現實場景中。

獎金

正如承諾的,這是給你的獎金,一本免費的書。我剛剛找到一本新的免費書籍來學習分散式系統設計,您也可以在 Microsoft 上閱讀它 --- https://info.microsoft.com/rs/157-GQE-382/images/EN-CNTNT -eBook-設計分散式系統.pdf


原文出處:https://dev.to/somadevtoo/9-caching-strategies-for-system-design-interviews-369g


共有 0 則留言