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