揭露:這篇文章包含附屬連結;如果您透過本文中提供的不同連結購買產品或服務,我可能會獲得補償。
image_credit - ByteByteGo
朋友們大家好,在現代軟體開發中,分散式系統非常流行,但架構師和開發人員面臨著設計系統的挑戰,如何有效地管理資料並促進各個元件之間的無縫通訊。
架構模式為分散式系統中遇到的常見問題提供了經過驗證的解決方案,確保可靠性、可擴展性和可維護性。
在這些模式中,有些模式是有效管理資料和通訊流的基礎,我們將在本文中看到。
這些也是系統設計面試的重要主題,了解這些模式對於解決系統設計問題和給面試官留下深刻印像大有幫助。
除了準備常見的系統設計問題(例如API 閘道與負載平衡器、正向代理與反向代理以及常見的系統設計問題)之外,了解這些模式也很有意義。
讓我們詳細了解這些模式,以了解它們的原理和應用。
順便說一句,如果您正在準備系統設計面試並想深入學習系統設計,那麼您還可以查看ByteByteGo 、 Design Guru 、 Exponent 、 Educative和Udemy等網站,它們有許多很棒的系統設計課程
此外,對各種架構模式(例如點對點模式)的紮實了解,API 網關在設計能夠經受生產時間考驗的系統方面大有幫助,就此而言,這裡是DesignGuru.io關於微服務架構的漂亮圖表:
過去,您已經了解了基本的微服務設計模式,例如事件來源、 SAGA 、 每個微服務的資料庫、 API 閘道、 斷路器,並且還分享了設計微服務的最佳實踐,現在是時候了解常見架構模式的簡要概述了。
對等模式促進兩個或多個元件之間的直接通信,而不需要中央協調器。
在這種去中心化模型中,網路中的每個節點都可以充當客戶端和伺服器,從而實現高效的資源共享和協作。
P2P 架構通常用於檔案共享系統、去中心化應用程式 (DApp) 和區塊鏈網絡,其中彈性和可擴展性至關重要。
P2P 架構如下:
API 閘道可作為用戶端請求存取應用程式內後端服務的統一入口點。
透過將多個 API 整合到一個介面中,它簡化了客戶端-伺服器互動並強制執行安全性、身份驗證和速率限制策略。
API 閘道是 微服務架構中的重要元件, 可實現服務發現、負載平衡和協定轉換,同時抽象化後端系統的複雜性。
它看起來是這樣的:
如果您喜歡觀看,這裡有來自ByteByteGo的另一個精彩影片,其中解釋了 API 網關
Pub-Sub 模式透過訊息代理程式或事件匯流排(如Kafka 、Solace、 RabbitMQ或 ActiveMQ)將訊息生產者(發布者)與消費者(訂閱者)解耦。
發布者將訊息廣播到預先定義的主題或頻道,而訂閱者表達對特定主題的興趣並非同步接收相關訊息。
Pub-Sub 架構有利於鬆散耦合、可擴展性和容錯性,使其成為即時訊息系統、 事件驅動的微服務和物聯網平台的理想選擇。
發布-訂閱模式如下所示:
請求-回應模式代表了分散式系統中的基本互動模型,其中客戶端向伺服器發送請求並等待相應的回應。
這種同步通訊範例在 Web 應用程式、RESTful API 和 RPC(遠端過程呼叫)框架中普遍存在。
請求-回應互動確保可預測的行為並啟用錯誤處理,使其適合事務工作流程和麵向使用者的介面。
以下是請求-回應模型的實際效果:
事件溯源是一種分散式系統模式,用於將應用程式的狀態持久保存為一系列不可變事件。
不是直接儲存當前狀態,而是儲存並重播表示狀態轉換的事件,以便在需要時重建應用程式狀態。
事件溯源支援可審核性、時間查詢和可重播性,非常適合歷史資料至關重要的金融系統、協作編輯工具和領域驅動設計。
事件溯源模式如下圖所示:
而且,如果您喜歡觀看,這裡有一個關於事件溯源的精彩影片,值得觀看:
ETL 是一種資料整合模式,用於從多個來源提取資料,將其轉換為標準化格式,並將其載入到目標資料庫或資料倉儲中。
此模式對於商業智慧、 資料分析和資料倉儲專案中的資料遷移、同步和整合任務至關重要。
ETL 管道可自動化資料工作流程、處理資料品質問題並支援大型資料集的批次處理。
以下是 ETL 實際執行時的樣子:
批次處理涉及在一段時間內累積資料或直到達到某個閾值,然後再將其作為單一單元進行處理。
透過將多個操作聚合為更大的批次,可以減少開銷並提高資料處理管道的效率。
批次處理通常用於資料攝取、ETL 流程和分散式運算框架,以優化資源利用率並最大限度地減少延遲。
批次模式如下所示:
流處理可以即時連續攝取、處理和分析資料流。與在靜態資料集上執行的批次不同,流系統以低延遲和高吞吐量處理無限資料流。
串流架構支援事件驅動處理、複雜事件處理 (CEP) 以及金融、 物聯網和網路安全等領域的即時分析應用程式。
這是Hazlecast的一個漂亮圖表,顯示了流處理的實際情況:
編排涉及中央協調器(編排器),管理分散式元件或服務之間的互動以執行工作流程或業務流程。
透過協調任務執行、處理異常和強制依賴關係,編排可確保跨多個系統的複雜工作流程的有序執行。
編排引擎用於工作流程自動化、業務流程管理 (BPM) 和微服務編排,以簡化操作並提高敏捷性。
這是使用Saga Orchestrator 模式的外觀
而且,這是ByteByteGo的一個很好的圖表,它以更直觀的方式解釋了所有這些架構風格
這就是9 個基本軟體架構模式的全部內容。這些模式中的大多數也適用於分散式系統,它們對於系統設計面試也非常重要。
簡而言之,資料和通訊流的有效管理對於建立健壯且可擴展的分散式系統至關重要。
對等、 API 閘道、發布-訂閱、請求-回應、事件來源、ETL、批次、串流處理和編排等架構模式提供了有價值的解決方案,以應對系統設計和實作中的各種挑戰。
透過了解這些軟體架構和分散式系統模式及其各自的優勢和權衡,架構師和開發人員可以做出明智的決策來設計滿足其應用程式和使用者不斷變化的需求的系統。
原文出處:https://dev.to/somadevtoo/9-software-architecture-patterns-for-distributed-systems-2o86