揭露:這篇文章包含附屬連結;如果您透過本文中提供的不同連結購買產品或服務,我可能會獲得補償。
image_credit - ByteByteGo
朋友們大家好,如果您正在準備系統設計面試,那麼準備微服務設計模式也是有意義的,不僅是為了在面試中取得好成績或使您的架構更加健壯,而且還可以了解現有專案。
Cicuit Breaker、API Gateway、Saga、Event Sourcing 等微服務模式是常見微服務問題的經過嘗試和測試的解決方案。
這些模式解決了微服務架構中的常見挑戰,例如可擴展性、容錯性和資料一致性。
過去,我討論過常見的系統設計問題,例如API 網關與負載平衡器、水平與垂直擴展、 正向代理與反向代理以及常見的系統設計問題,在本文中,我將分享24 個關鍵的微服務設計模式是技術面試的必備知識。
它們也是面試必備的系統設計主題之一,一定要做好準備。
許多公司都使用微服務,因此了解這些模式表明您了解當前的趨勢。了解何時以及如何應用這些模式還可以證明您解決複雜分散式系統問題的能力。
這些模式通常涉及權衡,使您能夠展示您的分析思維,面試官通常會提出這些模式是相關解決方案的場景。
順便說一句,如果您正在準備系統設計面試並想深入學習系統設計,那麼您還可以查看ByteByteGo 、 Design Guru 、 Exponent 、 Educative和Udemy等網站,這些網站有許多很棒的系統設計課程和系統設計面試模板像這樣你可以用它來回答任何系統設計問題。
如果您需要更多選擇,您還可以查看最佳系統設計課程、 書籍和網站的列表
PS 繼續閱讀直到最後。我有一份免費獎金給你。
那麼,還在等什麼,讓我們立即開始吧
微服務架構是一種將應用程式建構成鬆散耦合服務集合的設計方法。
為了建立可擴展、可維護和有彈性的基於微服務的系統,出現了各種模式。
以下是您可以在專案中使用的基本微服務模式,也可以在系統設計面試中記住。
由於微服務架構中有很多微服務,它們需要相互發現和通訊。
服務註冊表(例如 Netflix Eureka 或 Consul)充當集中式目錄,服務可以在其中註冊自身並發現其他服務。
它是這樣的:
API 閘道充當客戶端應用程式的單一入口點,將多個微服務聚合到一個統一的 API 中。
它處理請求,將它們路由到適當的服務,並且可以執行身份驗證、授權和負載平衡等任務。
API 閘道如下所示:
受電路斷路器的啟發,這種模式可以防止微服務故障級聯到其他服務。 斷路器模式監視故障,如果超過閾值,它會打開電路,阻止進一步的請求。
這有助於優雅降級和容錯,並且在微服務架構中絕對必須這樣做,以防止服務完全關閉。
以下是 Netflix Hysrix 作為斷路器的範例:
在微服務系統中,隔離故障至關重要。 Bulkhead 模式涉及分離元件或服務以包含故障。
例如,可以使用針對不同服務的執行緒池或單獨的資料庫來防止系統某一部分的故障影響其他部分。
下圖顯示了微服務架構中的隔板模式:
此模式用於管理分散式事務。 Saga 模式將長期運作的業務事務分解為一系列較小的獨立事務。
傳奇中涉及的每個微服務處理自己的事務並發布事件以觸發後續操作。
以下是Saga 模式的實際效果:
這是另一種流行的模式,在高頻率低延遲應用程式中大量使用。
在此模式中, 事件溯源不是僅儲存當前狀態,而是涉及儲存導致當前狀態的一系列事件。
這種模式提供了可靠的審計跟踪,並允許在任何時間點重建系統狀態。
以下是事件溯源的實際效果:
CQRS 模式將應用程式的讀取端和寫入端分開。它使用不同的模型來更新資訊(命令)和讀取資訊(查詢)。
這種模式可以提高可擴展性,因為讀取和寫入操作具有不同的最佳化要求。
這是一個很好的圖表,顯示了 CQRS 模式:
資料庫共享模式用於分配資料庫負載並避免瓶頸,資料分片涉及跨多個資料庫或資料庫執行個體對資料進行分區。
在此模式中,每個微服務可以處理資料子集或特定類型的請求。
這是資料庫分片的樣子,圖片來源: Design Guru
不同的微服務可能有不同的資料儲存需求。多語言持久性允許根據每個微服務的要求使用多種資料庫技術,優化資料儲存、檢索和查詢功能。
這是一個很好的圖表,顯示了 Azure 中的多語言持久性:
在微服務架構中,當發生暫時性故障時,重試模式涉及重試操作而不是立即失敗。
它可以應用於各個級別,例如服務到服務通訊或資料庫互動。
這是ByteByteGo 的一個很好的圖表,這是系統設計學習的好地方,它展示了微服務中的重試模式:
Sidecar 模式涉及將輔助服務(sidecar)附加到主微服務以提供附加功能,例如日誌記錄、安全性或與外部服務的通訊。
這使得主要服務能夠專注於其核心功能。
Sidecar 模式如下所示:
此模式也稱為 BFF,在處理多種用戶端類型(例如 Web、行動裝置)時非常有用,BFF 模式涉及建立為每種類型的用戶端量身定制的單獨後端服務。
這允許為每個客戶端提供最佳化且專門的 API。
以下是前端後端 (BFF) 模式的外觀:
影子部署模式涉及將生產流量的副本(影子)路由到新的微服務版本,而不影響實際的使用者體驗。
這是流行的部署策略之一,它有助於驗證新版本的效能和正確性。
這是影子部署的樣子
在微服務生態系中,多個服務經常相互互動。消費者驅動的合約模式涉及消費者指定他們對生產者的期望,從而允許更穩健和協調的變化。
這是一個很好的圖表,解釋了消費者驅動的合約
這種模式主張將業務邏輯放置在微服務(智慧端點)中,而不是依賴複雜的中間件。通訊基礎設施(管道)應該很簡單並且僅處理訊息路由。
這是另一種流行的微服務模式,其中每個微服務都有自己的資料庫,並且服務透過定義良好的 API 進行通訊。
每個服務資料庫模式提供隔離,但也需要仔細考慮資料一致性和完整性。
該模式如下所示:
非同步訊息傳遞模式不是使用微服務之間的同步通信,而是使用訊息佇列來促進非同步通訊。這可以提高系統響應能力和可擴展性。
這是一個很好的圖表,顯示了同步和非同步訊息傳遞之間的區別
將微服務設計為無狀態可以簡化可擴展性和彈性。每個服務獨立處理請求,不依賴儲存的狀態,從而更容易水平擴展。
這是一個很好的圖表,顯示了無狀態服務和有狀態服務的差異
而且,這是我精選的最佳系統設計書籍、線上課程和練習網站的列表,您可以查看它們,以便更好地為系統設計面試做好準備。這些課程中的大多數也回答了我在這裡分享的問題。
DesignGuru 的 Grokking 系統設計課程:一個互動式學習平台,提供實作練習和真實場景,以增強您的系統設計技能。
Alex Xu 的《系統設計面試》 :本書深入探討了系統設計概念、策略和麵試準備技巧。
Martin Kleppmann 的「設計資料密集型應用程式」 :綜合指南,涵蓋了設計可擴展且可靠的系統的原則和實踐。
LeetCode 系統設計 標籤:LeetCode 是一個受歡迎的技術面試準備平台。 LeetCode 上的系統設計標籤包含各種練習問題。
GitHub 上的「系統設計入門」 :精選的資源列表,包括文章、書籍和影片,可幫助您準備系統設計面試。
Educative 的系統設計課程:一個互動式學習平台,提供實作練習和真實場景,可增強您的系統設計技能。
高可擴展性部落格:該部落格包含有關高流量網站和可擴展系統架構的文章和案例研究。
YouTube 頻道:請參閱「Gaurav Sen」和「Tech Dummies」等頻道,以取得有關係統設計概念和麵試準備的富有洞察力的影片。
ByteByteGo :Alex Xu 的一本現場書籍和課程,用於系統設計面試準備。它包含《系統設計訪談》第一捲和第二卷的所有內容,並將隨即將推出的第三卷進行更新。
Exponent :一個專為面試準備的網站,特別是針對亞馬遜和谷歌等 FAANG 公司,他們還有很棒的系統設計課程和許多其他材料,可以幫助您破解 FAANG 面試。
image_credit - ByteByteGo
這就是開發人員應該了解的所有常見微服務模式和概念。這些微服務模式有助於解決與建置和維護分散式系統相關的各種挑戰,提供通訊、容錯、資料管理和可擴展性的解決方案。
在設計微服務架構時,明智地組合這些模式可以形成一個健壯且有彈性的系統。
這些額外的微服務模式如果經過深思熟慮地應用,將有助於建立有彈性、可擴展且可維護的分散式系統。
模式的選擇取決於微服務架構設計和實現過程中面臨的具體需求和挑戰。
正如承諾的,這是給你的獎金,一本免費的書。我剛剛找到一本新的免費書籍來學習分散式系統設計,您也可以在 Microsoft 上閱讀它 --- https://info.microsoft.com/rs/157-GQE-382/images/EN-CNTNT -eBook-設計分散式系統.pdf
謝謝
原文出處:https://dev.to/somadevtoo/19-microservices-patterns-for-system-design-interviews-3o39