要在關于系統(tǒng)設計的面試中脫穎而出,最關鍵的方面之一是深入理解基本的系統(tǒng)設計概念,例如,負載平衡、緩存、分區(qū)、復制、數(shù)據(jù)庫和代理。JYK28資訊網(wǎng)——每日最新資訊28at.com
JYK28資訊網(wǎng)——每日最新資訊28at.com
根據(jù)我自己的經(jīng)驗,我確定了 16 個關鍵概念,它們可以幫助你提高解決系統(tǒng)設計問題的能力。JYK28資訊網(wǎng)——每日最新資訊28at.com
這些概念的范圍從理解 API 網(wǎng)關的復雜性和掌握負載平衡技術到掌握 CDN 的重要性和理解緩存在現(xiàn)代分布式系統(tǒng)中的作用。閱讀完本文時,你將全面了解這些基本思想,并有信心在下一次面試中應用它們。JYK28資訊網(wǎng)——每日最新資訊28at.com
系統(tǒng)設計面試本質(zhì)上是非結構化的。在面試過程中,很難跟蹤事情并確保你已經(jīng)觸及設計的所有基本方面。JYK28資訊網(wǎng)——每日最新資訊28at.com
為了簡化這個過程,我開發(fā)了一個系統(tǒng)設計主模板,可以幫助你回答任何系統(tǒng)設計面試問題,深入了解任何系統(tǒng)設計中可能涉及的關鍵組件。JYK28資訊網(wǎng)——每日最新資訊28at.com
請牢記這個主模板,我們將討論 16 個基本系統(tǒng)設計概念。JYK28資訊網(wǎng)——每日最新資訊28at.com
現(xiàn)在我們開始吧。JYK28資訊網(wǎng)——每日最新資訊28at.com
1.域名系統(tǒng)(DNS)
域名系統(tǒng) (DNS) 是互聯(lián)網(wǎng)基礎設施的基本組成部分,可將人類友好的域名轉(zhuǎn)換為相應的 IP 地址。JYK28資訊網(wǎng)——每日最新資訊28at.com
它的功能類似于 Internet 電話簿,允許用戶通過鍵入易于記憶的域名(例如 www.google.com)而不是計算機用來相互識別的數(shù)字 IP 地址(例如“192.168.2.1”)來訪問網(wǎng)站和服務。JYK28資訊網(wǎng)——每日最新資訊28at.com
當你在 Web 瀏覽器中輸入域名時,DNS 負責查找關聯(lián)的 IP 地址并將你的請求定向到正確的服務器。JYK28資訊網(wǎng)——每日最新資訊28at.com
該過程從你的計算機向遞歸解析器發(fā)送查詢開始,然后搜索一系列 DNS 服務器,從根服務器開始,然后是頂級域 (TLD) 服務器,最后是權威名稱服務器。JYK28資訊網(wǎng)——每日最新資訊28at.com
找到 IP 地址后,遞歸解析器會將其返回到你的計算機,讓你的瀏覽器與目標服務器建立連接并訪問所需的內(nèi)容。JYK28資訊網(wǎng)——每日最新資訊28at.com
2.負載均衡器
負載均衡器是一種網(wǎng)絡設備或軟件,可在多個服務器之間分配傳入的網(wǎng)絡流量,以確保最佳的資源利用率、減少延遲并保持高可用性。JYK28資訊網(wǎng)——每日最新資訊28at.com
它在擴展應用程序和有效管理服務器工作負載方面起著至關重要的作用,尤其是在流量突然激增或服務器之間請求分布不均的情況下。JYK28資訊網(wǎng)——每日最新資訊28at.com
負載均衡器使用不同的算法來確定如何分配傳入流量。JYK28資訊網(wǎng)——每日最新資訊28at.com
常見的算法包括:JYK28資訊網(wǎng)——每日最新資訊28at.com
- 循環(huán):請求以循環(huán)方式按順序均勻分布在所有可用服務器上。
- 最少連接:負載均衡器將請求分配給活動連接最少的服務器,優(yōu)先處理不太繁忙的服務器。
- IP 哈希:對客戶端的 IP 地址進行哈希處理,結果值用于確定應將請求定向到哪個服務器。此方法可確保特定客戶端的請求始終路由到同一服務器,從而有助于保持會話持久性。
JYK28資訊網(wǎng)——每日最新資訊28at.com
3.API網(wǎng)關
API 網(wǎng)關是一種服務器或服務,充當外部客戶端與應用程序的內(nèi)部微服務或基于 API 的后端服務之間的中介。它是現(xiàn)代架構中的一個重要組件,尤其是在基于微服務的系統(tǒng)中,它簡化了通信過程并為客戶端提供了訪問各種服務的單一入口點。JYK28資訊網(wǎng)——每日最新資訊28at.com
API網(wǎng)關的主要功能包括:JYK28資訊網(wǎng)——每日最新資訊28at.com
- 請求路由:它根據(jù)預定義的規(guī)則和配置,將來自客戶端的傳入 API 請求定向到適當?shù)暮蠖朔栈蛭⒎铡?/span>
- 身份驗證和授權:API網(wǎng)關可以處理用戶身份驗證和授權,確保只有授權的客戶端才能訪問服務。它可以在將請求路由到后端服務之前驗證 API 密鑰、令牌或其他憑據(jù)。
- 速率限制和節(jié)流:為了保護后端服務免受過度負載或濫用,API 網(wǎng)關可以根據(jù)預定義的策略強制執(zhí)行速率限制或節(jié)流來自客戶端的請求。
- 緩存:為了減少延遲和后端負載,API 網(wǎng)關可以緩存常用的響應,直接將它們提供給客戶端,而無需查詢后端服務。
- 請求和響應轉(zhuǎn)換:API 網(wǎng)關可以修改請求和響應,例如轉(zhuǎn)換數(shù)據(jù)格式、添加或刪除標頭或修改查詢參數(shù),以確保客戶端和服務之間的兼容性。
JYK28資訊網(wǎng)——每日最新資訊28at.com
4.CDN
內(nèi)容分發(fā)網(wǎng)絡 (CDN) 是一種分布式服務器網(wǎng)絡,用于存儲圖像、視頻、樣式表和腳本等內(nèi)容并將其分發(fā)給地理位置較近的用戶。CDN 旨在提高向最終用戶交付內(nèi)容的性能、速度和可靠性,無論他們相對于原始服務器的位置如何。JYK28資訊網(wǎng)——每日最新資訊28at.com
CDN 的工作原理如下:JYK28資訊網(wǎng)——每日最新資訊28at.com
- 當用戶從網(wǎng)站或應用程序請求內(nèi)容時,請求會被定向到最近的 CDN 服務器,也稱為邊緣服務器。
- 如果邊緣服務器緩存了請求的內(nèi)容,它會直接將內(nèi)容提供給用戶。這減少了延遲并改善了用戶體驗,因為內(nèi)容傳輸?shù)木嚯x更短。
- 如果內(nèi)容未緩存在邊緣服務器上,則 CDN 從源服務器或附近的另一個 CDN 服務器檢索它。獲取內(nèi)容后,會將其緩存在邊緣服務器上并提供給用戶。
- 為確保內(nèi)容保持最新,CDN 會定期檢查源服務器的更改并相應地更新其緩存。
JYK28資訊網(wǎng)——每日最新資訊28at.com
5. 正向代理與反向代理
轉(zhuǎn)發(fā)代理,也稱為“代理服務器”或簡稱為“代理”,是位于一臺或多臺客戶端計算機前面并充當客戶端和 Internet 之間的中介的服務器。JYK28資訊網(wǎng)——每日最新資訊28at.com
當客戶端機器向 Internet 上的資源發(fā)出請求時,該請求首先被發(fā)送到轉(zhuǎn)發(fā)代理。然后,轉(zhuǎn)發(fā)代理代表客戶端將請求轉(zhuǎn)發(fā)到 Internet,并將響應返回給客戶端。JYK28資訊網(wǎng)——每日最新資訊28at.com
反向代理是位于一個或多個 Web 服務器之前的服務器,充當 Web 服務器和 Internet 之間的中介。JYK28資訊網(wǎng)——每日最新資訊28at.com
當客戶端向 Internet 上的資源發(fā)出請求時,該請求首先被發(fā)送到反向代理。JYK28資訊網(wǎng)——每日最新資訊28at.com
然后反向代理將請求轉(zhuǎn)發(fā)到其中一個 Web 服務器,該服務器將響應返回給反向代理。然后反向代理將響應返回給客戶端。JYK28資訊網(wǎng)——每日最新資訊28at.com
JYK28資訊網(wǎng)——每日最新資訊28at.com
6.緩存
緩存是位于應用程序和原始數(shù)據(jù)源(例如數(shù)據(jù)庫、文件系統(tǒng)或遠程 Web 服務)之間的高速存儲層。JYK28資訊網(wǎng)——每日最新資訊28at.com
當應用程序請求數(shù)據(jù)時,首先在緩存中檢查數(shù)據(jù)。如果在緩存中找到數(shù)據(jù),則將其返回給應用程序。JYK28資訊網(wǎng)——每日最新資訊28at.com
如果在緩存中找不到數(shù)據(jù),則從其原始來源檢索數(shù)據(jù),將其存儲在緩存中以備將來使用,然后返回給應用程序。JYK28資訊網(wǎng)——每日最新資訊28at.com
在分布式系統(tǒng)中,緩存可以在多個地方完成,例如,客戶端、DNS、CDN、負載均衡器、API 網(wǎng)關、服務器、數(shù)據(jù)庫等。JYK28資訊網(wǎng)——每日最新資訊28at.com
JYK28資訊網(wǎng)——每日最新資訊28at.com
7.數(shù)據(jù)分區(qū)
在數(shù)據(jù)庫中,水平分區(qū)(也稱為分片)涉及將表的行劃分為更小的表并將它們存儲在不同的服務器或數(shù)據(jù)庫實例上。這樣做是為了在多個服務器之間分配數(shù)據(jù)庫的負載并提高性能。JYK28資訊網(wǎng)——每日最新資訊28at.com
另一方面,垂直分區(qū)涉及將表的列劃分為單獨的表。這樣做是為了減少表中的列數(shù)并提高僅訪問少量列的查詢的性能。JYK28資訊網(wǎng)——每日最新資訊28at.com
JYK28資訊網(wǎng)——每日最新資訊28at.com
8. 數(shù)據(jù)庫復制
數(shù)據(jù)庫復制是一種用于跨不同服務器或位置維護同一數(shù)據(jù)庫的多個副本的技術。JYK28資訊網(wǎng)——每日最新資訊28at.com
數(shù)據(jù)庫復制的主要目的是提高數(shù)據(jù)可用性、冗余性和容錯性,確保系統(tǒng)即使在硬件故障或其他問題的情況下也能繼續(xù)運行。JYK28資訊網(wǎng)——每日最新資訊28at.com
在復制數(shù)據(jù)庫設置中,一臺服務器充當主(或主)數(shù)據(jù)庫,而其他服務器充當副本(或從屬)。該過程涉及在主數(shù)據(jù)庫和副本之間同步數(shù)據(jù),因此它們都具有相同的最新信息。JYK28資訊網(wǎng)——每日最新資訊28at.com
數(shù)據(jù)庫復制有幾個好處,包括:JYK28資訊網(wǎng)——每日最新資訊28at.com
- 改進的性能:通過在多個副本之間分配讀取查詢,可以減少主數(shù)據(jù)庫的負載并縮短查詢響應時間。
- 高可用性:如果主數(shù)據(jù)庫發(fā)生故障或停機,副本可以繼續(xù)提供數(shù)據(jù),確保對應用程序的訪問不間斷。
- 增強的數(shù)據(jù)保護:在不同位置擁有多個數(shù)據(jù)庫副本有助于防止由于硬件故障或其他災難導致的數(shù)據(jù)丟失。
- 負載平衡:副本可以處理讀取查詢,這樣可以更好地分配負載并減少主數(shù)據(jù)庫的整體壓力。
9.分布式消息系統(tǒng)
分布式消息傳遞系統(tǒng)支持以可靠、可擴展和容錯的方式在多個可能在地理上分散的應用程序、服務或組件之間交換消息。JYK28資訊網(wǎng)——每日最新資訊28at.com
它們通過解耦發(fā)送方和接收方組件來促進通信,使它們能夠獨立發(fā)展和運行。分布式消息系統(tǒng)在大規(guī)模或復雜系統(tǒng)中特別有用,例如微服務架構或分布式計算環(huán)境中的系統(tǒng)。此類系統(tǒng)的示例有 Apache Kafka 和 RabbitMQ。JYK28資訊網(wǎng)——每日最新資訊28at.com
10.微服務
微服務是一種架構風格,其中應用程序被構造為小型、松散耦合且可獨立部署的服務的集合。JYK28資訊網(wǎng)——每日最新資訊28at.com
每個微服務負責應用程序中的特定功能或域,并通過定義明確的 API 與其他微服務進行通信。JYK28資訊網(wǎng)——每日最新資訊28at.com
這種方法與傳統(tǒng)的單體架構不同,在傳統(tǒng)單體架構中,應用程序被構建為一個緊密耦合的單元。JYK28資訊網(wǎng)——每日最新資訊28at.com
微服務的主要特點是:JYK28資訊網(wǎng)——每日最新資訊28at.com
- 單一職責:每個微服務都專注于特定的功能或領域,遵循單一職責原則。這使服務更易于理解、開發(fā)和維護。
- 獨立性:微服務可以相互獨立地開發(fā)、部署和擴展。這可以提高開發(fā)過程的靈活性和敏捷性,因為團隊可以同時處理不同的服務,而不會影響整個系統(tǒng)。
- 去中心化:微服務通常是去中心化的,每個服務都擁有自己的數(shù)據(jù)和業(yè)務邏輯。這鼓勵關注點分離,并使團隊能夠做出決策并選擇最適合其特定需求的技術。
- 通信:微服務使用輕量級協(xié)議(例如 HTTP/REST、gRPC 或消息隊列)相互通信。這促進了互操作性,并使集成新服務或替換現(xiàn)有服務變得更加容易。
- 容錯性:由于微服務是獨立的,一個服務出現(xiàn)故障并不一定會導致整個系統(tǒng)出現(xiàn)故障。這有助于提高應用程序的整體彈性。
11. NoSQL 數(shù)據(jù)庫
NoSQL 數(shù)據(jù)庫或“Not Only SQL”數(shù)據(jù)庫是非關系數(shù)據(jù)庫,旨在存儲、管理和檢索非結構化或半結構化數(shù)據(jù)。JYK28資訊網(wǎng)——每日最新資訊28at.com
它們?yōu)橐蕾嚱Y構化數(shù)據(jù)和預定義模式的傳統(tǒng)關系數(shù)據(jù)庫提供了替代方案。NoSQL 數(shù)據(jù)庫因其靈活性、可擴展性和處理大量數(shù)據(jù)的能力而變得流行,使它們非常適合現(xiàn)代應用程序、大數(shù)據(jù)處理和實時分析。JYK28資訊網(wǎng)——每日最新資訊28at.com
NoSQL 數(shù)據(jù)庫可以分為四種主要類型:JYK28資訊網(wǎng)——每日最新資訊28at.com
- 基于文檔:這些數(shù)據(jù)庫將數(shù)據(jù)存儲在類似文檔的結構中,例如 JSON 或 BSON。
每個文檔都是獨立的,可以有自己獨特的結構,使它們適合處理異構數(shù)據(jù)。基于文檔的 NoSQL 數(shù)據(jù)庫的示例包括 MongoDB 和 Couchbase。 - 鍵值對:這些數(shù)據(jù)庫將數(shù)據(jù)存儲為鍵值對,其中鍵充當唯一標識符,值保存關聯(lián)數(shù)據(jù)。
鍵值數(shù)據(jù)庫對于簡單的讀寫操作非常高效,并且可以輕松地進行分區(qū)和水平擴展。鍵值 NoSQL 數(shù)據(jù)庫的示例包括 Redis 和 Amazon DynamoDB。 - 列族:這些數(shù)據(jù)庫將數(shù)據(jù)存儲在列族中,列族是相關列的組。它們旨在處理寫入繁重的工作負載,并且對于使用已知行鍵和列鍵查詢數(shù)據(jù)非常高效。列族 NoSQL 數(shù)據(jù)庫的示例包括 Apache Cassandra 和 HBase。
- 基于圖形:這些數(shù)據(jù)庫旨在存儲和查詢具有復雜關系和互連結構的數(shù)據(jù),例如社交網(wǎng)絡或推薦系統(tǒng)。圖數(shù)據(jù)庫使用節(jié)點、邊和屬性來表示和存儲數(shù)據(jù),從而更容易執(zhí)行復雜的遍歷和基于關系的查詢。基于圖形的 NoSQL 數(shù)據(jù)庫的示例包括 Neo4j 和 Amazon Neptune。
JYK28資訊網(wǎng)——每日最新資訊28at.com
12.數(shù)據(jù)庫索引
數(shù)據(jù)庫索引是提高數(shù)據(jù)庫查詢操作速度和效率的數(shù)據(jù)結構。它們的工作方式類似于書中的索引,允許數(shù)據(jù)庫管理系統(tǒng) (DBMS) 快速定位與特定值或值集關聯(lián)的數(shù)據(jù),而無需搜索表中的每一行。JYK28資訊網(wǎng)——每日最新資訊28at.com
通過為所需數(shù)據(jù)提供更直接的路徑,索引可以顯著減少從數(shù)據(jù)庫檢索信息所需的時間。JYK28資訊網(wǎng)——每日最新資訊28at.com
索引通常建立在數(shù)據(jù)庫表的一個或多個列上。最常見的索引類型是 B 樹索引,它以分層樹結構組織數(shù)據(jù),允許快速搜索、插入和刪除操作。JYK28資訊網(wǎng)——每日最新資訊28at.com
還有其他類型的索引,例如位圖索引和哈希索引,每種索引都有其特定的用例和優(yōu)勢。JYK28資訊網(wǎng)——每日最新資訊28at.com
雖然索引可以顯著提高查詢性能,但它們也有一些折衷:JYK28資訊網(wǎng)——每日最新資訊28at.com
- 存儲空間:索引會消耗額外的存儲空間,因為它們會在原始表數(shù)據(jù)旁邊創(chuàng)建和維護單獨的數(shù)據(jù)結構。
- 寫入性能:當在表中插入、更新或刪除數(shù)據(jù)時,關聯(lián)的索引也必須更新,這會減慢寫入操作。
JYK28資訊網(wǎng)——每日最新資訊28at.com
13.分布式文件系統(tǒng)
分布式文件系統(tǒng)是存儲解決方案,旨在管理和提供對通常分布在網(wǎng)絡上的多個服務器、節(jié)點或機器的文件和目錄的訪問。JYK28資訊網(wǎng)——每日最新資訊28at.com
它們使用戶和應用程序能夠像存儲在本地文件系統(tǒng)上一樣訪問和操作文件,即使實際文件可能物理存儲在多個遠程服務器上。JYK28資訊網(wǎng)——每日最新資訊28at.com
分布式文件系統(tǒng)通常用于大規(guī)模或分布式計算環(huán)境,以提供容錯、高可用性和改進的性能。JYK28資訊網(wǎng)——每日最新資訊28at.com
14.通知系統(tǒng)
這些用于向用戶發(fā)送通知或警報,例如電子郵件、推送通知或短信。JYK28資訊網(wǎng)——每日最新資訊28at.com
15. 全文搜索
全文搜索使用戶能夠在應用程序或網(wǎng)站中搜索特定的單詞或短語。當用戶查詢時,應用程序或網(wǎng)站會返回最相關的結果。JYK28資訊網(wǎng)——每日最新資訊28at.com
為了快速有效地執(zhí)行此操作,全文搜索依賴于倒排索引,這是一種將單詞或短語映射到它們出現(xiàn)的文檔的數(shù)據(jù)結構。JYK28資訊網(wǎng)——每日最新資訊28at.com
此類系統(tǒng)的一個示例是 Elastic Search。JYK28資訊網(wǎng)——每日最新資訊28at.com
16.分布式協(xié)調(diào)服務
分布式協(xié)調(diào)服務是旨在以可靠、高效和容錯的方式管理和協(xié)調(diào)分布式應用程序、服務或節(jié)點的活動的系統(tǒng)。JYK28資訊網(wǎng)——每日最新資訊28at.com
它們有助于維護一致性、處理分布式同步以及管理分布式環(huán)境中各種組件的配置和狀態(tài)。JYK28資訊網(wǎng)——每日最新資訊28at.com
分布式協(xié)調(diào)服務在大規(guī)模或復雜系統(tǒng)中特別有用,例如微服務架構、分布式計算環(huán)境或集群數(shù)據(jù)庫中的系統(tǒng)。JYK28資訊網(wǎng)——每日最新資訊28at.com
此類服務的示例有 Apache ZooKeeper、etcd、Consul。JYK28資訊網(wǎng)——每日最新資訊28at.com
結論
通過使用上述系統(tǒng)設計概念和模板,最大限度地提高系統(tǒng)設計面試的機會。JYK28資訊網(wǎng)——每日最新資訊28at.com
希望今天這篇文章內(nèi)容對你有所幫助,感謝你的閱讀。JYK28資訊網(wǎng)——每日最新資訊28at.com
本文鏈接:http://m.www897cc.com/showinfo-26-87000-0.html16 個在面試前需要知道的系統(tǒng)設計概念
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Python 編程速查:迅速理解 next() 函數(shù)
下一篇: 30秒內(nèi)輕松檢測Python文件的變化