一、分布式領(lǐng)域所說的同步與異步通信環(huán)境具體是指什么
在分布式領(lǐng)域,同步和異步通信環(huán)境是指不同的通信模型。這兩種通信模型都可以用于在分布式系統(tǒng)中進(jìn)行進(jìn)程間的通信。
同步通信環(huán)境中,發(fā)送方需要等待接收方確認(rèn)才能繼續(xù)執(zhí)行下面的操作,直到接收方已經(jīng)成功接收到消息后,發(fā)送方才會(huì)被釋放繼續(xù)執(zhí)行。這意味著,在同步通信環(huán)境中,發(fā)送方和接收方必須遵循嚴(yán)格的同步規(guī)則,以便協(xié)同工作和溝通。同步通信環(huán)境可以確保消息的可靠性和順序性,但也可能會(huì)導(dǎo)致隊(duì)列阻塞和死鎖等問題。
異步通信環(huán)境中,發(fā)送方并不需要等待接收方確認(rèn),即使接收方并沒有響應(yīng),發(fā)送方仍然可以繼續(xù)執(zhí)行下面的操作。在異步通信環(huán)境中,每個(gè)進(jìn)程都可以獨(dú)立地執(zhí)行,并且不需要等待其他進(jìn)程的響應(yīng)。這種自由度可能會(huì)帶來更高的性能和更好的并行性,但也可能會(huì)導(dǎo)致一些不確定性,例如消息丟失或亂序到達(dá)等問題。
二、分布式概述
1、什么是分布式系統(tǒng)
多個(gè)計(jì)算機(jī)或設(shè)備組合起來一起工作的系統(tǒng)。它的特點(diǎn)是在使用者看來,所有的接口看似都是由一個(gè)系統(tǒng)提供的;設(shè)備之間需要使用網(wǎng)絡(luò)通信;某個(gè)設(shè)備發(fā)生故障后,其他的設(shè)備可能是可用的。如WEB服務(wù),存儲(chǔ)服務(wù)和應(yīng)用服務(wù)通過網(wǎng)絡(luò)傳輸數(shù)據(jù),當(dāng)存儲(chǔ)服務(wù)宕機(jī)后,應(yīng)用服務(wù)可能還會(huì)使用緩存繼續(xù)提供服務(wù)。如電話服務(wù),系統(tǒng)由轉(zhuǎn)機(jī)和終端共同提供服務(wù),各個(gè)設(shè)備通過電話線通信。
網(wǎng)絡(luò)上很多文章所說的分布式大多數(shù)互聯(lián)網(wǎng)的WEB系統(tǒng),這是由于活躍著大多是WEB系統(tǒng)相關(guān)開發(fā)人員。但事實(shí)上分布式系統(tǒng)沒有那么單一,也沒有那么復(fù)雜,目前我們所使用的服務(wù)基本上都是分布式系統(tǒng)而分布式系統(tǒng)也僅僅是一組設(shè)備組成的工作集合。
2、為什么需要分布式系統(tǒng)
從分布式系統(tǒng)的特點(diǎn)說起,如果需要大數(shù)據(jù)量、高可用、可擴(kuò)展、高性能,那么就需要分布式系統(tǒng)。如:
電話系統(tǒng)使用分布式設(shè)計(jì),目的是實(shí)現(xiàn)系統(tǒng)的靈活性和可用性。WEB系統(tǒng)使用分布式設(shè)計(jì),目的是提高可用性和并發(fā)以及性能。3、什么是分布式技術(shù)
多個(gè)計(jì)算機(jī)組合使用時(shí),會(huì)面臨一些問題,如網(wǎng)絡(luò)通信、設(shè)備故障、并發(fā)等問題,而分布式技術(shù)就是為了解決這些問題的。
RPC 技術(shù)解決多個(gè)設(shè)備的通信問題。復(fù)制技術(shù)解決數(shù)據(jù)的備份問題和提升性能和并發(fā)。分片技術(shù)解決數(shù)據(jù)存儲(chǔ)量問題和提升性能。分布式鎖解決多個(gè)計(jì)算機(jī)組合時(shí)的并發(fā)讀寫問題。分布式緩存解決多個(gè)應(yīng)用服務(wù)時(shí)本地緩存的一致性問題。分布式事務(wù)解決多個(gè)設(shè)備行為的一致性和隔離性問題。4、分布式系統(tǒng)的演變
集中式系統(tǒng)非集中式系統(tǒng)混合系統(tǒng)5、分布式系統(tǒng)的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
提升系統(tǒng)并發(fā)、性能、可用性、擴(kuò)展性、伸縮性等能力;節(jié)省成本,利用有限的計(jì)算機(jī)資源提供更好的服務(wù);缺點(diǎn):
多個(gè)設(shè)備的操作一致性和并發(fā)問題:用戶一個(gè)操作需要多個(gè)設(shè)備的多個(gè)操作時(shí),如何實(shí)現(xiàn)操作失敗后各個(gè)設(shè)備的回滾和并發(fā)操作時(shí)的問題。通常使用分布式事務(wù)技術(shù)盡可能的解決,較好的方式還是避免。多個(gè)設(shè)備的數(shù)據(jù)一致性問題:無狀態(tài)服務(wù)的復(fù)制無需關(guān)注,但有狀態(tài)服務(wù)的復(fù)制由于通信延遲和并發(fā)原因會(huì)使得多個(gè)副本上數(shù)據(jù)不一致。通常使用一致性算法解決(Raft)。多個(gè)設(shè)備的通信問題:由于需要通絡(luò)進(jìn)行通信,因此當(dāng)網(wǎng)絡(luò)故障或波動(dòng)后就會(huì)造成設(shè)備之間的通信斷開問題。通常使用重試和Fullback機(jī)制等解決。設(shè)備的故障率問題:集中式系統(tǒng)只有一臺(tái)設(shè)備,可以通過優(yōu)化環(huán)境減小故障率,而分布式系統(tǒng)中多個(gè)設(shè)備組合使用加大了故障率。通常使用復(fù)制技術(shù)提升系統(tǒng)高可用。6、分布式系統(tǒng)的類型
實(shí)際上,一個(gè)系統(tǒng)可能不僅僅是由某一類型的分布式系統(tǒng)獨(dú)立實(shí)現(xiàn)的,很可能是多個(gè)分布式類型的系統(tǒng)之間的相互組合,又構(gòu)成一個(gè)大的分布式系統(tǒng)。
如WEB服務(wù)中,本身是一個(gè)分布式信息系統(tǒng),但其中可能使用了分布式存儲(chǔ)系統(tǒng)中的數(shù)據(jù)管理系統(tǒng)和消息系統(tǒng),還可能使用了分布式計(jì)算系統(tǒng)用于實(shí)現(xiàn)數(shù)據(jù)的計(jì)算與分析。
分布式存儲(chǔ)系統(tǒng)分布式計(jì)算系統(tǒng)分布式信息系統(tǒng)分布式嵌入系統(tǒng)7、分布式系統(tǒng)面臨的挑戰(zhàn)
分布式系統(tǒng)需要大量機(jī)器協(xié)作,面臨諸多的挑戰(zhàn):
異構(gòu)的機(jī)器與網(wǎng)絡(luò):分布式系統(tǒng)中的機(jī)器,配置不一樣,其上運(yùn)行的服務(wù)也可能由不同的語言、架構(gòu)實(shí)現(xiàn),因此處理能力也不一樣;節(jié)點(diǎn)間通過網(wǎng)絡(luò)連接,而不同網(wǎng)絡(luò)運(yùn)營(yíng)商提供的網(wǎng)絡(luò)的帶寬、延時(shí)、丟包率又不一樣。怎么保證大家齊頭并進(jìn),共同完成目標(biāo),這是個(gè)不小的挑戰(zhàn)。普遍的節(jié)點(diǎn)故障:雖然單個(gè)節(jié)點(diǎn)的故障概率較低,但節(jié)點(diǎn)數(shù)目達(dá)到一定規(guī)模,出故障的概率就變高了。分布式系統(tǒng)需要保證故障發(fā)生的時(shí)候,系統(tǒng)仍然是可用的,這就需要監(jiān)控節(jié)點(diǎn)的狀態(tài),在節(jié)點(diǎn)故障的情況下將該節(jié)點(diǎn)負(fù)責(zé)的計(jì)算、存儲(chǔ)任務(wù)轉(zhuǎn)移到其他節(jié)點(diǎn)。不可靠的網(wǎng)絡(luò):節(jié)點(diǎn)間通過網(wǎng)絡(luò)通信,而網(wǎng)絡(luò)是不可靠的。可能的網(wǎng)絡(luò)問題包括:網(wǎng)絡(luò)分割、延時(shí)、丟包、亂序。相比單機(jī)過程調(diào)用,網(wǎng)絡(luò)通信最讓人頭疼的是超時(shí):節(jié)點(diǎn)A向節(jié)點(diǎn)B發(fā)出請(qǐng)求,在約定的時(shí)間內(nèi)沒有收到節(jié)點(diǎn)B的響應(yīng),那么B是否處理了請(qǐng)求,這個(gè)是不確定的。延伸閱讀1:同步的理解
同步就是指一個(gè)進(jìn)程在執(zhí)行某個(gè)請(qǐng)求的時(shí)候,若該請(qǐng)求需要一段時(shí)間才能返回信息,那么這個(gè)進(jìn)程將會(huì)一直等待下去,直到收到返回信息才繼續(xù)執(zhí)行下去;同步就相當(dāng)于是 當(dāng)客戶端發(fā)送請(qǐng)求給服務(wù)端,在等待服務(wù)端響應(yīng)的請(qǐng)求時(shí),客戶端不做其他的事情。當(dāng)服務(wù)端做完了才返回到客戶端。這樣的話客戶端需要一直等待。用戶使用起來會(huì)有不友好。