軟件工程師的關鍵原則 - 18 個系統設計概念

要在系統設計中脫穎而出,深刻理解諸如負載均衡緩存分區複製數據庫代理等基本系統設計概念至關重要。

在掌握這個主模板的基礎上,我們將討論 18 個重要的系統設計概念。以下是每個概念的簡要描述:

1. 域名系統 (DNS)

域名系統(DNS)是互聯網基礎設施的一個基本組成部分,將用戶友好的域名轉換爲其相應的 IP 地址。它充當了互聯網的電話簿,允許用戶通過輸入易於記憶的域名而不是計算機用於識別彼此的數值 IP 地址(如 “192.0.2.1”)來訪問網站和服務。

當您在 Web 瀏覽器中輸入域名時,DNS 負責查找相關的 IP 地址並將您的請求發送到適當的服務器。這個過程從您的計算機向遞歸解析器發送查詢開始,然後遞歸解析器搜索一系列 DNS 服務器,從根服務器開始,然後是頂級域(TLD)服務器,最終是權威域名服務器。一旦找到 IP 地址,遞歸解析器將其返回給您的計算機,允許您的瀏覽器與目標服務器建立連接並訪問所需的內容。

2. 負載均衡器

負載均衡器是一種用於分發入站網絡流量到多個服務器的網絡設備或軟件,以確保最佳資源利用、降低延遲並保持高可用性。在出現突發流量或服務器請求不均勻分佈的情況下,負載均衡器在擴展應用程序和有效管理服務器工作負載方面發揮着至關重要的作用。

負載均衡器使用各種算法來確定入站流量的分發。一些常見的算法包括:

輪詢算法: 請求按順序和均勻地分配到所有可用服務器。• 最少連接算法: 負載均衡器將請求分配給具有最少活動連接的服務器,爲較不繁忙的服務器提供優先。•IP 哈希算法: 客戶端的 IP 地址被哈希,生成的值用於確定請求應該被定向到哪個服務器。這種方法確保特定客戶端的請求一直路由到相同的服務器,有助於維護會話一致性。

3. API 網關

API 網關是一種充當外部客戶端與應用程序的內部微服務或基於 API 的後端服務之間中間件的服務器或服務。它是當今體

繫結構的重要組件,特別是在基於微服務的系統中,它簡化了通信過程,爲客戶端提供訪問各種服務的單一入口點。

API 網關的主要功能包括:

  1. 請求路由:API 網關根據預定義的規則和配置,將來自客戶端的傳入 API 請求路由到適當的後端服務或微服務。2. 身份驗證和授權:API 網關管理用戶身份驗證和授權,確保只有經授權的客戶端才能訪問服務。它在將請求路由到後端服務之前驗證 API 密鑰、令牌或其他憑證。3. 速率限制和節流:爲了保護後端服務免受過大的負荷或濫用,API 網關根據預定義的策略對客戶端的請求進行速率限制或節流。4. 緩存:爲了降低延遲和後端負載,API 網關緩存經常使用的響應,直接提供給客戶端,無需查詢後端服務。5. 請求和響應轉換:API 網關可以修改請求和響應,例如轉換數據格式、添加或刪除標頭,或更改查詢參數,以確保客戶端和服務之間的兼容性。

4. 內容交付網絡 (CDN)

內容交付網絡(CDN)是一個分佈式服務器網絡,用於存儲和傳遞內容,如圖像、視頻、樣式表和腳本,以使用戶可以從地理位置更接近他們的位置訪問這些內容。CDN 旨在提高內容傳遞的性能、速度和可靠性,無論用戶相對於原始服務器的位置如何。以下是 CDN 的運作方式:

  1. 當用戶從網站或應用程序請求內容時,請求被定向到最近的 CDN 服務器,也稱爲邊緣服務器。2. 如果邊緣服務器已經緩存了請求的內容,它將直接向用戶提供內容。這個過程減少了延遲並提高了用戶體驗,因爲內容傳輸的距離更短。3. 如果邊緣服務器沒有緩存請求的內容,CDN 將從原始服務器或附近的另一個 CDN 服務器檢索內容。一旦內容被獲取,它將被緩存在邊緣服務器上並提供給用戶。4. 爲了確保內容保持最新,CDN 定期檢查原始服務器以獲取更改,並相應地更新其緩存。

5. 正向代理與反向代理

正向代理,也稱爲 “代理服務器” 或簡稱“代理”,是位於一個或多個客戶機之前的服務器,充當客戶機和互聯網之間的中介。當客戶機請求互聯網上的資源時,請求首先發送到正向代理。正向代理然後代表客戶機將請求發送到互聯網,然後將

響應返回給客戶機。

另一方面,反向代理是位於一個或多個 Web 服務器之前的服務器,充當 Web 服務器和互聯網之間的中介。當客戶端請求互聯網上的資源時,請求首先發送到反向代理。反向代理然後將請求轉發到其中一個 Web 服務器,然後將響應返回給客戶端。

6. 緩存

緩存是位於應用程序和原始數據源(如數據庫、文件系統或遠程 Web 服務)之間的高速存儲層。當應用程序請求數據時,首先檢查緩存。如果數據存在於緩存中,將返回給應用程序。如果在緩存中找不到數據,則從其原始來源檢索數據,將其存儲在緩存中以備將來使用,然後返回給應用程序。在分佈式系統中,緩存可以出現在多個位置,包括客戶端、DNS、CDN、負載均衡器、API 網關、服務器、數據庫等等。

 

7. 數據分區

在數據庫中,水平分區,通常稱爲分片,涉及將表的行分成較小的表,並存儲在不同的服務器或數據庫實例上。這種方法用於在多個服務器之間分發數據庫負載,從而提高性能。

相反,垂直分區涉及將表的列分成單獨的表。這個技術旨在減少表中的列數,提高只訪問有限數量列的查詢性能。

8. 數據庫複製

數據庫複製是一種用於在不同服務器或位置之間維護相同數據庫的方法。數據庫複製的主要目標是增加數據的可用性、冗餘和容錯性,以確保系統即使在硬件故障或其他問題出現時仍然可以正常運行。

在複製數據庫配置中,一個服務器充當主數據庫,而其他服務器則充當副本。這涉及在主數據庫和副本之間同步數據,以確保它們都具有相同的最新信息。數據庫複製提供了多個優點,包括:

  1. 改進性能:通過在多個副本之間分發讀查詢,可以減輕主數據庫的負載,從而提高查詢響應時間。2. 高可用性:如果主數據庫發生故障或停機,副本可以繼續提供數據,確保對應用程序的不間斷訪問。3. 增強的數據保護:在不同位置維護數據庫的多個副本有助於防止由於硬件故障或其他災難而導致的數據丟失。4. 負載平衡:副本可以處理讀查詢,從而實現更好的負載分配並減輕主數據庫的整體壓力。

9. 分佈式消息系統

分佈式消息系統爲多個可能分佈在不同地理位置的應用程序、服務或組件之間交換消息提供了可靠、可擴展和容錯的方式。這些系統通過解耦發送方和接收方組件,使它們能夠獨立開發和運行。分佈式消息系統在大型或複雜系統中尤其有價值,比如微服務架構或分佈式計算環境中。這些系統的示例包括 Apache Kafka 和 RabbitMQ。

10. 微服務

微服務代表一種架構風格,其中一個應用程序被組織成一組小型、鬆散耦合的、可以獨立部署的服務。每個微服務負責應用程序內的特定功能或領域,並通過明確定義的 API 與其他微服務通信。這種方法不同於傳統的單體架構,傳統單體架構將應用程序構建爲單一、緊密耦合的單元。

微服務的主要特點包括:

  1. 獨立部署:每個微服務可以獨立開發、測試和部署,無需影響其他微服務。2. 技術多樣性:每個微服務可以使用不同的技術棧,以滿足其特定需求。3. 易於維護:由於微服務的規模較小,它們通常更易於維護、擴展和修改。4. 可擴展性:可以根據需要擴展單獨的微服務,而無需爲整個應用程序進行擴展。

11. 數據庫

數據庫是一種結構化數據的持久存儲系統,用於存儲、檢索和管理數據。數據庫在各種應用程序和系統中都有廣泛的應用,從基本的數據存儲到複雜的分析和報告系統。主要的數據庫類型包括:

關係型數據庫(RDBMS): 使用表格結構來存儲數據,並支持 SQL 查詢語言。常見的關係型數據庫包括 MySQL、PostgreSQL、Oracle 和 Microsoft SQL Server。•NoSQL 數據庫: 這些數據庫不使用傳統的表格結構,而使用文檔、列族、鍵值對或圖形等非關係數據結構來存儲數據。NoSQL 數據庫包括 MongoDB、Cassandra、Redis 和 Elasticsearch。•NewSQL 數據庫: 這是一種中間方式,結合了關係數據庫和 NoSQL 數據庫的某些特性。NewSQL 數據庫旨在提供可擴展性、高性能和分佈式能力。

12. 前端緩存

前端緩存是一種用於緩存 Web 應用程序的用戶界面(HTML、CSS、JavaScript 等)以提高性能的技術。前端緩存可以通過減少從服務器請求資源的次數、降低延遲並提供更快的用戶體驗來改進 Web 應用程序的性能。前端緩存通常採用瀏覽器緩存、CDN 和緩存服務等多種形式。

13. 後端緩存

後端緩存是一種用於緩存應用程序的數據和計算結果以提高性能的技術。它將數據存儲在內存中,以便將來更快地檢索。後端緩存通常用於存儲數據庫查詢結果、API 響應和計算密集型任務的結果。一些常見的後端緩存技術包括 Redis 和 Memcached。

14. 安全性

安全性是系統設計中至關重要的概念。它包括身份驗證、授權、加密、跨站腳本(XSS)和跨站請求僞造(CSRF)防護、數據保護、網絡安全等。系統設計應考慮各種威脅和安全攻擊,以確保系統的數據和用戶得到保護。

15. 高可用性與容錯性

高可用性和容錯性是系統設計的關鍵目標。高可用性涉及確保系統在面臨故障或中斷時保持可用。容錯性涉及系統在出現故障或錯誤時能夠恢復正常運行。實現高可用性和容錯性通常需要使用負載均衡、故障轉移、冗餘和監控等技術。

16. 事件驅動架構

事件驅動架構是一種應用程序架構,其中應用程序的不同組件通過事件進行通信。事件是應用程序中發生的特定動作或狀態更改,可以觸發其他組件的響應。事件驅動架構通常用於實現鬆散耦合的組件,以便能夠更輕鬆地擴展和修改系統。

17. 日誌和監控

在系統設計中,日誌和監控是關鍵工具,用於識別和解決性能問題、故障和安全問題。日誌記錄有助於跟蹤系統的操作和問題,而監控則提供了實時的性能數據和警報。在分佈式系統中,有效的日誌和監控可以幫助工程師快速診斷問題和優化系統。

18. 測試策略

測試是系統設計和開發的關鍵組成部分。測試策略涉及確定測試範圍、創建測試計劃、編寫測試用例、執行測試、自動化測試、性能測試等。有效的測試策略有助於確保系統的可靠性、性能和安全性。

這 18 個系統設計概念涵蓋了構建可伸縮、高性能、高可用性和安全的系統所需的核心知識。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/C_Ea8KtvutlrDF5oUDhWQQ