系統(tǒng)架構(gòu)的精髓:18個(gè)必懂的設(shè)計(jì)概念一覽
要想在系統(tǒng)設(shè)計(jì)領(lǐng)域中脫穎而出,深入理解一些基礎(chǔ)的系統(tǒng)設(shè)計(jì)概念是必不可少的,這些概念包括負(fù)載均衡、緩存、分區(qū)、復(fù)制、數(shù)據(jù)庫和代理等。
依據(jù)我自己的經(jīng)驗(yàn),我總結(jié)出了18個(gè)關(guān)鍵概念,如果能掌握這些,將極大地提升你處理系統(tǒng)設(shè)計(jì)問題的能力。這些概念包含了:理解API網(wǎng)關(guān)的微妙之處、熟練掌握負(fù)載均衡技術(shù)、領(lǐng)會(huì)CDN的重要性,以及認(rèn)識(shí)到緩存在現(xiàn)代分布式系統(tǒng)中所扮演的角色。讀完這篇博客后,你將對(duì)這些核心理念有全面的理解,并有足夠的信心在下一次面試中運(yùn)用這些知識(shí)。
系統(tǒng)設(shè)計(jì)面試通常并無固定結(jié)構(gòu)。在面試過程中,跟蹤所有內(nèi)容并確保你已經(jīng)覆蓋到設(shè)計(jì)的所有重要環(huán)節(jié)可能會(huì)有些挑戰(zhàn)。為了簡(jiǎn)化這個(gè)過程,我制定了一份系統(tǒng)設(shè)計(jì)大綱,這份大綱可以幫助你回答任何系統(tǒng)設(shè)計(jì)面試問題。你可以查看附圖,以獲取關(guān)于可能涉及的系統(tǒng)設(shè)計(jì)關(guān)鍵組件的啟示。
牢記這份大綱,我們來討論一下這18個(gè)關(guān)鍵的系統(tǒng)設(shè)計(jì)概念,每個(gè)概念的簡(jiǎn)要描述如下:
1、域名系統(tǒng)(DNS)
域名系統(tǒng)(DNS)是互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的基本組成部分,它負(fù)責(zé)將用戶友好的域名轉(zhuǎn)換為相應(yīng)的IP地址。它就像互聯(lián)網(wǎng)的電話簿,讓用戶通過輸入容易記憶的域名,例如https://minorstone.com/,而不是計(jì)算機(jī)用來識(shí)別彼此的數(shù)字IP地址,如"192.0.2.1",就能訪問網(wǎng)站和服務(wù)。
當(dāng)你在瀏覽器中輸入一個(gè)域名時(shí),DNS負(fù)責(zé)找到相關(guān)的IP地址,并將你的請(qǐng)求指向適當(dāng)?shù)姆?wù)器。這個(gè)過程從你的電腦發(fā)送一個(gè)查詢到遞歸解析器開始,然后通過一系列的DNS服務(wù)器,從根服務(wù)器開始,然后到頂級(jí)域(TLD)服務(wù)器,最后到權(quán)威名稱服務(wù)器。一旦找到IP地址,遞歸解析器將其返回給你的電腦,從而讓你的瀏覽器能夠與目標(biāo)服務(wù)器建立連接并訪問想要的內(nèi)容。
2、負(fù)載均衡器
負(fù)載均衡器是一種網(wǎng)絡(luò)設(shè)備或軟件,設(shè)計(jì)用于將傳入的網(wǎng)絡(luò)流量分發(fā)到多個(gè)服務(wù)器,以確保資源的最優(yōu)使用,降低延遲,并保持高可用性。它在擴(kuò)展應(yīng)用程序和有效管理服務(wù)器工作負(fù)載方面起著關(guān)鍵作用,特別是在流量突然激增或服務(wù)器之間請(qǐng)求分配不均的情況下。
負(fù)載均衡器采用各種算法來確定傳入流量的分配。一些常見的算法包括:
- 輪詢法:請(qǐng)求以循環(huán)方式依次均勻地分發(fā)到所有可用服務(wù)器。
- 最少連接法:負(fù)載均衡器將請(qǐng)求分配給活動(dòng)連接最少的服務(wù)器,優(yōu)先考慮較不繁忙的服務(wù)器。
- IP哈希法:對(duì)客戶端的IP地址進(jìn)行哈希,結(jié)果值用于確定請(qǐng)求應(yīng)被指向哪個(gè)服務(wù)器。此方法確保特定客戶端的請(qǐng)求始終路由到同一臺(tái)服務(wù)器,有助于保持會(huì)話的持久性。
3、API網(wǎng)關(guān)
API網(wǎng)關(guān)是作為服務(wù)器或服務(wù)的角色,充當(dāng)外部客戶端與應(yīng)用程序內(nèi)部微服務(wù)或基于API的后端服務(wù)之間的中介。在現(xiàn)代架構(gòu)中,特別是在基于微服務(wù)的系統(tǒng)中,它是一個(gè)重要的組成部分,它簡(jiǎn)化了通信過程,并為客戶端提供了一個(gè)訪問各種服務(wù)的單一入口。
API網(wǎng)關(guān)的主要功能包括:
- 請(qǐng)求路由:根據(jù)預(yù)定義的規(guī)則和配置,API網(wǎng)關(guān)將來自客戶端的API請(qǐng)求指向適當(dāng)?shù)暮蠖朔?wù)或微服務(wù)。
- 身份驗(yàn)證和授權(quán):API網(wǎng)關(guān)管理用戶身份驗(yàn)證和授權(quán),確保只有經(jīng)過授權(quán)的客戶端能夠訪問服務(wù)。它在將請(qǐng)求路由到后端服務(wù)之前,會(huì)驗(yàn)證API密鑰、令牌或其他憑證。
- 限速和節(jié)流:為了保護(hù)后端服務(wù)免受過度負(fù)載或?yàn)E用,API網(wǎng)關(guān)會(huì)根據(jù)預(yù)定義的策略對(duì)客戶端的請(qǐng)求進(jìn)行限速或節(jié)流。
- 緩存:為了最小化延遲和后端負(fù)載,API網(wǎng)關(guān)會(huì)緩存經(jīng)常使用的響應(yīng),并直接服務(wù)于客戶端,無需查詢后端服務(wù)。
- 請(qǐng)求和響應(yīng)轉(zhuǎn)換:API網(wǎng)關(guān)可以修改請(qǐng)求和響應(yīng),如轉(zhuǎn)換數(shù)據(jù)格式、添加或刪除頭部,或改變查詢參數(shù),以確??蛻舳撕头?wù)之間的兼容性。
4、CDN
內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)是一個(gè)分布式服務(wù)器網(wǎng)絡(luò),它將內(nèi)容(如圖片、視頻、樣式表和腳本)存儲(chǔ)并從地理位置上離用戶更近的地方傳送給用戶。CDN的設(shè)計(jì)目的是提高向終端用戶傳輸內(nèi)容的性能、速度和可靠性,無論他們相對(duì)于源服務(wù)器的位置如何。以下是CDN的工作方式:
- 當(dāng)用戶從網(wǎng)站或應(yīng)用程序請(qǐng)求內(nèi)容時(shí),請(qǐng)求會(huì)被指向最近的CDN服務(wù)器,也稱為邊緣服務(wù)器。
- 如果邊緣服務(wù)器已經(jīng)緩存了請(qǐng)求的內(nèi)容,它會(huì)直接將內(nèi)容提供給用戶。這個(gè)過程減少了延遲并提高了用戶體驗(yàn),因?yàn)閮?nèi)容傳輸?shù)木嚯x更短。
- 如果邊緣服務(wù)器上沒有緩存內(nèi)容,CDN會(huì)從源服務(wù)器或另一個(gè)近在咫尺的CDN服務(wù)器上獲取它。一旦獲取了內(nèi)容,它就會(huì)被緩存在邊緣服務(wù)器上并提供給用戶。
- 為了確保內(nèi)容保持最新狀態(tài),CDN會(huì)定期檢查源服務(wù)器的變化,并相應(yīng)地更新其緩存。
5、正向代理與反向代理
正向代理,也被稱為"代理服務(wù)器"或簡(jiǎn)單的"代理",是放置在一個(gè)或多個(gè)客戶端機(jī)器前的服務(wù)器,充當(dāng)客戶端和互聯(lián)網(wǎng)之間的中介。當(dāng)客戶端機(jī)器請(qǐng)求互聯(lián)網(wǎng)上的資源時(shí),請(qǐng)求首先發(fā)送到正向代理。然后,正向代理代表客戶端機(jī)器將請(qǐng)求轉(zhuǎn)發(fā)到互聯(lián)網(wǎng),并將響應(yīng)返回給客戶端機(jī)器。
另一方面,反向代理是放置在一個(gè)或多個(gè)Web服務(wù)器前的服務(wù)器,作為Web服務(wù)器和互聯(lián)網(wǎng)之間的中介。當(dāng)客戶端請(qǐng)求互聯(lián)網(wǎng)上的資源時(shí),請(qǐng)求首先發(fā)送到反向代理。然后,反向代理將請(qǐng)求轉(zhuǎn)發(fā)到其中一臺(tái)Web服務(wù)器,該服務(wù)器將響應(yīng)返回給反向代理。最后,反向代理將響應(yīng)返回給客戶端。
6、緩存
緩存是位于應(yīng)用程序和原始數(shù)據(jù)源(如數(shù)據(jù)庫、文件系統(tǒng)或遠(yuǎn)程網(wǎng)絡(luò)服務(wù))之間的高速存儲(chǔ)層。當(dāng)應(yīng)用程序請(qǐng)求數(shù)據(jù)時(shí),首先檢查緩存。如果數(shù)據(jù)存在于緩存中,它就會(huì)被返回給應(yīng)用程序。如果在緩存中找不到數(shù)據(jù),那么數(shù)據(jù)就會(huì)從原始源獲取,存儲(chǔ)在緩存中以備將來使用,然后返回給應(yīng)用程序。在分布式系統(tǒng)中,緩存可以出現(xiàn)在多個(gè)位置,包括客戶端、DNS、CDN、負(fù)載均衡器、API網(wǎng)關(guān)、服務(wù)器、數(shù)據(jù)庫等。
7、數(shù)據(jù)分區(qū)
在數(shù)據(jù)庫中,水平分區(qū)常被稱為分片,它包括將表的行分割成更小的表,并將它們存儲(chǔ)在不同的服務(wù)器或數(shù)據(jù)庫實(shí)例上。這種方法被用來將數(shù)據(jù)庫負(fù)載分散到多個(gè)服務(wù)器,從而提高性能。
相反,垂直分區(qū)涉及到將表的列分割成獨(dú)立的表。這種技術(shù)旨在減少表中的列數(shù),并提高只訪問有限數(shù)目列的查詢的性能。
8、數(shù)據(jù)庫復(fù)制
數(shù)據(jù)庫復(fù)制是一種用于在各種服務(wù)器或位置上維護(hù)相同數(shù)據(jù)庫的多份副本的方法。數(shù)據(jù)庫復(fù)制的主要目標(biāo)是提高數(shù)據(jù)的可用性、冗余度和容錯(cuò)性,確保在硬件故障或其他問題發(fā)生時(shí)系統(tǒng)仍能保持運(yùn)行。
在復(fù)制的數(shù)據(jù)庫配置中,一個(gè)服務(wù)器作為主(或主)數(shù)據(jù)庫,其他的則作為副本(或從)。此過程涉及同步主數(shù)據(jù)庫和副本之間的數(shù)據(jù),確保所有服務(wù)器都擁有相同的最新信息。數(shù)據(jù)庫復(fù)制提供了多種優(yōu)點(diǎn),包括:
- 提高性能:通過在多個(gè)副本間分發(fā)讀取查詢,可以減輕主數(shù)據(jù)庫的負(fù)載,從而提高查詢響應(yīng)時(shí)間。
- 高可用性:如果主數(shù)據(jù)庫遇到故障或停機(jī),副本可以繼續(xù)提供數(shù)據(jù),確保應(yīng)用程序的訪問不間斷。
- 增強(qiáng)數(shù)據(jù)保護(hù):在不同位置維護(hù)數(shù)據(jù)庫的多份副本有助于防止由于硬件故障或其他災(zāi)難導(dǎo)致的數(shù)據(jù)丟失。
- 負(fù)載均衡:副本可以處理讀取查詢,從而實(shí)現(xiàn)更好的負(fù)載分配并減少對(duì)主數(shù)據(jù)庫的整體壓力。
9、分布式消息系統(tǒng)
分布式消息系統(tǒng)為眾多可能地理分散的應(yīng)用、服務(wù)或組件之間的消息交換提供了一種可靠、可擴(kuò)展且容錯(cuò)性強(qiáng)的方式。這些系統(tǒng)通過解耦發(fā)送者和接收者組件來促進(jìn)通信,使它們能夠獨(dú)立地開發(fā)和運(yùn)行。在大規(guī)?;驈?fù)雜系統(tǒng)中,如微服務(wù)架構(gòu)或分布式計(jì)算環(huán)境中,分布式消息系統(tǒng)顯得尤為重要。這些系統(tǒng)的例子包括Apache Kafka和RabbitMQ。
10、微服務(wù)
微服務(wù)代表了一種架構(gòu)風(fēng)格,其中應(yīng)用程序被組織成一組小型、松散耦合且能自主部署的服務(wù)。每個(gè)微服務(wù)負(fù)責(zé)應(yīng)用程序中的一個(gè)特定功能或領(lǐng)域,并通過定義明確的API與其他微服務(wù)進(jìn)行通信。這種方法與傳統(tǒng)的單體架構(gòu)有所不同,后者將應(yīng)用程序構(gòu)建為一個(gè)緊密耦合的單一單位。
微服務(wù)的主要特性包括:
- 單一職責(zé):遵循單一職責(zé)原則,每個(gè)微服務(wù)專注于特定的功能或領(lǐng)域,使服務(wù)更易于理解、開發(fā)和維護(hù)。
- 獨(dú)立性:微服務(wù)可以獨(dú)立開發(fā)、部署和擴(kuò)展,為開發(fā)過程提供了更大的靈活性和敏捷性。團(tuán)隊(duì)可以同時(shí)開發(fā)各種服務(wù),而不會(huì)影響整個(gè)系統(tǒng)。
- 分散化:通常,微服務(wù)是分散的,每個(gè)服務(wù)都有自己的數(shù)據(jù)和業(yè)務(wù)邏輯。這種方法促進(jìn)了關(guān)注點(diǎn)分離,使團(tuán)隊(duì)能夠根據(jù)自己的特殊需求做出決策并選擇技術(shù)。
- 通信:微服務(wù)使用輕量級(jí)協(xié)議(如HTTP/REST、gRPC或消息隊(duì)列)進(jìn)行交互。這有助于互操作性,并便于集成新服務(wù)或替換現(xiàn)有服務(wù)。
- 容錯(cuò)性:由于微服務(wù)是獨(dú)立的,一個(gè)服務(wù)的失敗不一定導(dǎo)致整個(gè)系統(tǒng)崩潰,從而提高了應(yīng)用程序的整體彈性。
11、NoSQL 數(shù)據(jù)庫
NoSQL數(shù)據(jù)庫,或稱為“非僅僅是SQL”的數(shù)據(jù)庫,是非關(guān)系型數(shù)據(jù)庫,設(shè)計(jì)用于存儲(chǔ)、管理和檢索非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)。它們提供了對(duì)傳統(tǒng)關(guān)系型數(shù)據(jù)庫的替代,后者依賴于結(jié)構(gòu)化數(shù)據(jù)和預(yù)定義的模式。由于NoSQL數(shù)據(jù)庫的靈活性、可擴(kuò)展性以及處理大量數(shù)據(jù)的能力,使其在現(xiàn)代應(yīng)用程序、大數(shù)據(jù)處理和實(shí)時(shí)分析中越來越受歡迎。
NoSQL數(shù)據(jù)庫可以分為四種主要類型:
- 文檔型:這類數(shù)據(jù)庫將數(shù)據(jù)存儲(chǔ)在類似于文檔的結(jié)構(gòu)中,如JSON或BSON。每個(gè)文檔都是自包含的,可以有自己獨(dú)特的結(jié)構(gòu),使其適合處理異構(gòu)數(shù)據(jù)。文檔型NoSQL數(shù)據(jù)庫的例子包括MongoDB和Couchbase。
- 鍵值對(duì):這類數(shù)據(jù)庫將數(shù)據(jù)以鍵值對(duì)形式存儲(chǔ),其中鍵作為唯一標(biāo)識(shí)符,值則保存相關(guān)的數(shù)據(jù)。鍵值對(duì)數(shù)據(jù)庫對(duì)于簡(jiǎn)單的讀寫操作非常高效,并且它們可以容易地進(jìn)行分區(qū)并水平擴(kuò)展。鍵值對(duì)NoSQL數(shù)據(jù)庫的例子包括Redis和亞馬遜的DynamoDB。
- 列族型:這類數(shù)據(jù)庫將數(shù)據(jù)存儲(chǔ)在列族中,列族是相關(guān)列的集合。它們?cè)O(shè)計(jì)用來處理寫入密集型的工作負(fù)載,對(duì)于已知行和列鍵的數(shù)據(jù)查詢非常高效。列族型NoSQL數(shù)據(jù)庫的例子包括Apache Cassandra和HBase。
- 圖形型:這類數(shù)據(jù)庫設(shè)計(jì)用于存儲(chǔ)和查詢具有復(fù)雜關(guān)系和互聯(lián)結(jié)構(gòu)的數(shù)據(jù),例如社交網(wǎng)絡(luò)或推薦系統(tǒng)。圖數(shù)據(jù)庫使用節(jié)點(diǎn)、邊和屬性來表示和存儲(chǔ)數(shù)據(jù),從而更易于執(zhí)行復(fù)雜的遍歷和基于關(guān)系的查詢。圖形型NoSQL數(shù)據(jù)庫的例子包括Neo4j和亞馬遜的Neptune。
12、數(shù)據(jù)庫索引
數(shù)據(jù)庫索引是一種數(shù)據(jù)結(jié)構(gòu),能提高數(shù)據(jù)庫查詢操作的速度和效率。它們的功能類似于書籍中的索引,使數(shù)據(jù)庫管理系統(tǒng)(DBMS)能迅速定位與特定值或值組相關(guān)的數(shù)據(jù),無需搜索表中的每一行。通過提供更直接的數(shù)據(jù)查找路徑,索引可以顯著減少從數(shù)據(jù)庫檢索信息所需的時(shí)間。
索引通常建立在數(shù)據(jù)庫表的一個(gè)或多個(gè)列上。B樹索引是最常見的類型,它以分層樹狀結(jié)構(gòu)組織數(shù)據(jù),允許快速的搜索、插入和刪除操作。其他類型的索引,如位圖索引和哈希索引,也存在各自的使用場(chǎng)景和優(yōu)勢(shì)。
盡管索引可以顯著提高查詢性能,但也涉及到一定的權(quán)衡:
- 存儲(chǔ)空間:索引需要額外的存儲(chǔ)空間,因?yàn)樗鼈冊(cè)谠急頂?shù)據(jù)旁邊生成和維護(hù)獨(dú)立的數(shù)據(jù)結(jié)構(gòu)。
- 寫性能:當(dāng)在表中插入、更新或刪除數(shù)據(jù)時(shí),相應(yīng)的索引也必須被更新,這可能會(huì)減慢寫操作的速度。
13、分布式文件系統(tǒng)
分布式文件系統(tǒng)是一種設(shè)計(jì)用來在多個(gè)服務(wù)器、節(jié)點(diǎn)或機(jī)器(經(jīng)常是跨網(wǎng)絡(luò)分布)之間管理和授權(quán)訪問文件和目錄的存儲(chǔ)系統(tǒng)。它們讓用戶和應(yīng)用程序可以訪問和修改文件,就像這些文件是位于本地文件系統(tǒng)上一樣,盡管實(shí)際的文件可能物理上位于各種遠(yuǎn)程服務(wù)器上。分布式文件系統(tǒng)常用于大規(guī)?;蚍植际接?jì)算環(huán)境,以提供容錯(cuò)能力、高可用性和增強(qiáng)性能。
14、通知系統(tǒng)
這些功能用于向用戶發(fā)送通知或警報(bào),比如電子郵件、推送通知或短信。
15、全文檢索
全文搜索允許用戶在應(yīng)用程序或網(wǎng)站中搜索特定的單詞或短語。當(dāng)接收到用戶查詢時(shí),應(yīng)用程序或網(wǎng)站會(huì)提供最相關(guān)的結(jié)果。為了快速有效地完成這個(gè)過程,全文搜索使用了一種稱為倒排索引的數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)將單詞或短語與出現(xiàn)它們的文檔進(jìn)行關(guān)聯(lián)。Elastic Search就是這樣一種系統(tǒng)的例子。
16、分布式協(xié)調(diào)服務(wù)
分布式協(xié)調(diào)服務(wù)是一種旨在以可靠、高效和容錯(cuò)的方式調(diào)控和同步分布式應(yīng)用、服務(wù)或節(jié)點(diǎn)行為的系統(tǒng)。它們幫助維護(hù)一致性,處理分布式同步,并在分布式環(huán)境中監(jiān)控各種組件的配置和狀態(tài)。在大規(guī)模或復(fù)雜的系統(tǒng)中,例如微服務(wù)架構(gòu)、分布式計(jì)算環(huán)境或集群數(shù)據(jù)庫,分布式協(xié)調(diào)服務(wù)尤其有價(jià)值。Apache ZooKeeper、etcd和Consul就是這樣服務(wù)的例子。
17、心跳
在分布式環(huán)境中,工作/數(shù)據(jù)在服務(wù)器之間分布。為了在這樣的設(shè)置中高效地路由請(qǐng)求,服務(wù)器需要知道系統(tǒng)中的其他服務(wù)器。此外,服務(wù)器應(yīng)該知道其他服務(wù)器是否還在正常運(yùn)作。在去中心化系統(tǒng)中,每當(dāng)一個(gè)請(qǐng)求到達(dá)服務(wù)器時(shí),該服務(wù)器應(yīng)該有足夠的信息來決定哪個(gè)服務(wù)器應(yīng)負(fù)責(zé)處理該請(qǐng)求。這使得及時(shí)檢測(cè)服務(wù)器故障成為一項(xiàng)重要任務(wù),它還使系統(tǒng)能夠采取糾正行動(dòng),將數(shù)據(jù)/工作移至另一臺(tái)健康的服務(wù)器,阻止環(huán)境進(jìn)一步惡化。
為了解決這個(gè)問題,每個(gè)服務(wù)器會(huì)定期向中心監(jiān)控服務(wù)器或系統(tǒng)中的其他服務(wù)器發(fā)送心跳消息,以顯示它仍然存活并正常工作。
心跳是檢測(cè)分布式系統(tǒng)中故障的一種機(jī)制。如果有一個(gè)中心服務(wù)器,所有服務(wù)器會(huì)定期向它發(fā)送心跳消息。如果沒有中心服務(wù)器,所有服務(wù)器會(huì)隨機(jī)選擇一組服務(wù)器,并每隔幾秒鐘向它們發(fā)送一條心跳消息。這樣,如果一段時(shí)間沒有收到來自某臺(tái)服務(wù)器的心跳消息,系統(tǒng)就會(huì)懷疑該服務(wù)器可能已經(jīng)崩潰。如果在配置的超時(shí)期內(nèi)沒有心跳,系統(tǒng)可以得出服務(wù)器不再存活的結(jié)論,并停止向其發(fā)送請(qǐng)求,并開始替換工作。
18、校驗(yàn)和
在一個(gè)分布式系統(tǒng)中,在組件之間傳輸數(shù)據(jù)時(shí),從節(jié)點(diǎn)獲取的數(shù)據(jù)可能會(huì)出現(xiàn)損壞的情況。這種損壞可能是由于存儲(chǔ)設(shè)備、網(wǎng)絡(luò)、軟件等方面的故障導(dǎo)致的。分布式系統(tǒng)如何確保數(shù)據(jù)完整性,以便客戶端接收到錯(cuò)誤而不是損壞的數(shù)據(jù)?
為了解決這個(gè)問題,我們可以計(jì)算一個(gè)校驗(yàn)和并將其與數(shù)據(jù)一起存儲(chǔ)。
為了計(jì)算校驗(yàn)和,我們使用了一種加密哈希函數(shù),例如MD5、SHA-1、SHA-256或SHA-512。哈希函數(shù)接受輸入數(shù)據(jù)并產(chǎn)生一個(gè)固定長(zhǎng)度的字符串(包含字母和數(shù)字),這個(gè)字符串被稱為校驗(yàn)和。
當(dāng)系統(tǒng)存儲(chǔ)某些數(shù)據(jù)時(shí),它計(jì)算數(shù)據(jù)的校驗(yàn)和并將校驗(yàn)和與數(shù)據(jù)一起存儲(chǔ)。當(dāng)客戶端檢索數(shù)據(jù)時(shí),它驗(yàn)證從服務(wù)器接收到的數(shù)據(jù)是否與存儲(chǔ)的校驗(yàn)和相匹配。如果不匹配,客戶端可以選擇從另一個(gè)副本中檢索該數(shù)據(jù)。
結(jié)論
通過使用上述系統(tǒng)設(shè)計(jì)概念和模板,最大限度地提高您的系統(tǒng)設(shè)計(jì)方案。