RPC、RMI与MOM与组播 通信原理 .
遠(yuǎn)程過(guò)程調(diào)用(RPC):
即對(duì)遠(yuǎn)程站點(diǎn)機(jī)上的過(guò)程進(jìn)行調(diào)用。當(dāng)站點(diǎn)機(jī)A上的一個(gè)進(jìn)程調(diào)用另一個(gè)站點(diǎn)機(jī)上的過(guò)程時(shí),A上的調(diào)用進(jìn)程掛起,B上的被調(diào)用過(guò)程執(zhí)行,并將結(jié)果返回給調(diào)用進(jìn)程,使調(diào)用進(jìn)程繼續(xù)執(zhí)行【B上的被調(diào)用過(guò)程的參數(shù)和執(zhí)行結(jié)果在調(diào)用和被調(diào)用進(jìn)程之間是通過(guò)消息傳遞來(lái)實(shí)現(xiàn)的,表現(xiàn)為C/S關(guān)系】
為實(shí)現(xiàn)不同站點(diǎn)機(jī)上的RPC,調(diào)用和被調(diào)用進(jìn)程各方都要保留一個(gè)用于存放過(guò)程參數(shù)和執(zhí)行結(jié)果的運(yùn)行棧,分別稱(chēng)為客戶(hù)和服務(wù)器的存根,為各自不同地址空間上的運(yùn)行提供支持。
實(shí)現(xiàn)步驟【對(duì)外是透明的】:
1.調(diào)用客戶(hù)存根,填參數(shù)。
2.客戶(hù)存根打包參數(shù)消息,調(diào)用客戶(hù)機(jī)操作系統(tǒng)。
3.客戶(hù)機(jī)操作系統(tǒng)向遠(yuǎn)程服務(wù)器操作系統(tǒng)發(fā)送消息,客戶(hù)進(jìn)程等待返回結(jié)果。
4.服務(wù)器操作系統(tǒng)接收參數(shù)消息并偉給服務(wù)器存根。
5.服務(wù)器存根解包參數(shù)消息,啟動(dòng)服務(wù)器進(jìn)程。
6.服務(wù)器進(jìn)程執(zhí)行完成,將結(jié)果填入給服務(wù)器存根。
7.服務(wù)器存根打包結(jié)果消息,調(diào)用服務(wù)器操作系統(tǒng)。
8.服務(wù)器操作系統(tǒng)發(fā)送結(jié)果消息到客戶(hù)機(jī)操作系統(tǒng)。
9客戶(hù)機(jī)操作系統(tǒng)接收結(jié)果消息,并傳給客戶(hù)進(jìn)程。
10.客戶(hù)存根解包結(jié)果消息,返回給客戶(hù)進(jìn)程。
進(jìn)程方法調(diào)用(RMI):
它可以被看作是RPC的Java版本。但是傳統(tǒng)RPC并不能很好地應(yīng)用于分布式對(duì)象系統(tǒng)。而Java RMI 則支持存儲(chǔ)于不同地址空間的程序級(jí)對(duì)象之間彼此進(jìn)行通信,實(shí)現(xiàn)遠(yuǎn)程對(duì)象之間的無(wú)縫遠(yuǎn)程調(diào)用。客戶(hù)要訪問(wèn)一個(gè)遠(yuǎn)程對(duì)象時(shí),首先要與該對(duì)象進(jìn)行綁定,對(duì)象引用包含足夠的信息實(shí)現(xiàn)實(shí)現(xiàn)這種對(duì)象綁定,綁定的結(jié)果就是在進(jìn)程的地址究竟內(nèi)生成一個(gè)對(duì)象代理。對(duì)象代理的界面與對(duì)象本身的界面完全一樣。【多數(shù)情況下這種綁定是由系統(tǒng)自動(dòng)完成的,對(duì)用戶(hù)是透明的】
工作原理:方法調(diào)用從客戶(hù)對(duì)象經(jīng)占位程序(Stub)、遠(yuǎn)程引用層(Remote Reference Layer)和傳輸層(Transport Layer)向下,傳遞給主機(jī),然后再次經(jīng)傳 輸層,向上穿過(guò)遠(yuǎn)程調(diào)用層和骨干網(wǎng)(Skeleton),到達(dá)服務(wù)器對(duì)象。 占位程序扮演著遠(yuǎn)程服務(wù)器對(duì)象的代理的角色,使該對(duì)象可被客戶(hù)激活。 遠(yuǎn)程引用層處理語(yǔ)義、管理單一或多重對(duì)象的通信,決定調(diào)用是應(yīng)發(fā)往一個(gè)服務(wù)器還是多個(gè)。傳輸層管理實(shí)際的連接,并且追追蹤可以接受方法調(diào)用的遠(yuǎn)程對(duì)象。服務(wù)器端的骨干網(wǎng)完成對(duì)服務(wù)器對(duì)象實(shí)際的方法調(diào)用,并獲取返回值。返回值向下經(jīng)遠(yuǎn)程引用層、服務(wù)器端的傳輸層傳遞回客戶(hù)端,再向上經(jīng)傳輸層和遠(yuǎn)程調(diào)用層返回。最后,占位程序獲得返回值?!究蛻?hù)進(jìn)程在訪問(wèn)一個(gè)分布式對(duì)象之前,首先要在該進(jìn)程的局部地址空間內(nèi)生成一個(gè)該對(duì)象的代理,對(duì)象代理可作為客戶(hù)進(jìn)程的局部對(duì)象使用,其功能類(lèi)似于RPC中的客戶(hù)存根,可以將客戶(hù)的訪問(wèn)請(qǐng)求和參數(shù)打包成消息,發(fā)送給服務(wù)器,由服務(wù)器方相應(yīng)的存根解包消息后調(diào)用對(duì)應(yīng)方法】序列化和反序列化
實(shí)現(xiàn)步驟:
?1、生成一個(gè)遠(yuǎn)程接口?
?2、實(shí)現(xiàn)遠(yuǎn)程對(duì)象(服務(wù)器端程序)?
?3、生成占位程序和骨干網(wǎng)(服務(wù)器端程序)?
?4、編寫(xiě)服務(wù)器程序?
?5、編寫(xiě)客戶(hù)程序?
?6、注冊(cè)遠(yuǎn)程對(duì)象?
?7、啟動(dòng)遠(yuǎn)程對(duì)象
缺點(diǎn):RPC和RMI都要求調(diào)用方和被調(diào)用方的進(jìn)程處于執(zhí)行狀態(tài)。如果被調(diào)用過(guò)程或者對(duì)象所處的站點(diǎn)處于停機(jī)或故障狀態(tài),則RMI或RPC調(diào)用失敗。面向消息的通信:
為克服RMI和RPC的上述缺點(diǎn),其采用持久通信模式,在發(fā)送方發(fā)送消息時(shí),不要求接收方進(jìn)程正在運(yùn)行;在接收方進(jìn)程接收消息時(shí),不要求發(fā)送方進(jìn)程也在工作。應(yīng)用A需要發(fā)送一個(gè)消息給位于不同站點(diǎn)機(jī)的另一個(gè)應(yīng)用B,首先調(diào)用消息隊(duì)列接口將該消息發(fā)給與之相連的通信服務(wù)器,放入消息隊(duì)列A,再由隊(duì)列管理器將引消息通過(guò)底層網(wǎng)絡(luò)發(fā)送給與接收方站點(diǎn)機(jī)相連接的通信服務(wù)器,放入消息隊(duì)列B。在接收方,應(yīng)用B調(diào)用消息隊(duì)列接口從本地的隊(duì)列B中取得消息。
面向消息的中間件:MOM 指的是利用高效可靠的消息傳遞機(jī)制【消息隊(duì)列】進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流,是一種持久異步通信系統(tǒng),并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成。通過(guò)提供消息傳遞和消息排隊(duì)模型,它可在分布環(huán)境下擴(kuò)展進(jìn)程間的通信,并支持多通訊協(xié)議、語(yǔ)言、應(yīng)用程序、硬件和軟件平臺(tái)。目前流行的MOM 中間件產(chǎn)品有IBM 的MQSeries、BEA 的MessageQ 、Apache的ActiveMQ等。
消息中間件一般有兩種傳遞模型:點(diǎn)對(duì)點(diǎn)模型(PTP)和發(fā)布-訂閱模型(Pub/Sub)。
1. 點(diǎn)對(duì)點(diǎn)模型(P2P)
點(diǎn)對(duì)點(diǎn)模型用于消息生產(chǎn)者和消息消費(fèi)者之間點(diǎn)到點(diǎn)的通信。消息生產(chǎn)者將消息發(fā)動(dòng)到由某個(gè)名字標(biāo)識(shí)的特定消費(fèi)者。這個(gè)名字實(shí)際上對(duì)應(yīng)于消息服務(wù)中的一個(gè)隊(duì)列(Queue),在消息傳動(dòng)給消費(fèi)者之前它被存儲(chǔ)在這個(gè)隊(duì)列中。隊(duì)列可以是持久的,以保證在消息服務(wù)出現(xiàn)故障時(shí)仍然能夠傳遞消息。
2 發(fā)布-訂閱模型(Pub/Sub)【基于組播的通信方式】
發(fā)布-訂閱模型用稱(chēng)為主題(topic)的內(nèi)容分層結(jié)構(gòu)代替了PTP 模型中的惟一目的地,發(fā)送應(yīng)用程序發(fā)布自己的消息,指出消息描述的是有關(guān)分層結(jié)構(gòu)中的一個(gè)主題的信息。希望接收這些消息的應(yīng)用程序訂閱了這個(gè)主題。訂閱包含子主題的分層結(jié)構(gòu)中的主題的訂閱者可以接收該主題和其子主題發(fā)表的所有消息。
組播通信:
【廣播】一個(gè)進(jìn)程將消息發(fā)往系統(tǒng)中的所有進(jìn)程【組播】一個(gè)進(jìn)程同時(shí)將消息發(fā)往一個(gè)進(jìn)程組中的每個(gè)成員
組播通信優(yōu)點(diǎn):發(fā)送方只需要一次消息的組播發(fā)送,而不是要求發(fā)送方多次反復(fù)發(fā)地執(zhí)行消息發(fā)送操作。進(jìn)程組中的進(jìn)程可以固定,也可以動(dòng)態(tài)組織,進(jìn)程組可動(dòng)態(tài)加入一個(gè)新的進(jìn)程,或者刪除一個(gè)進(jìn)程組成員。
組播適用場(chǎng)景:組播是分布式系統(tǒng)進(jìn)程協(xié)同工作的一種需求
1.基于容錯(cuò)目的,分布式系統(tǒng)的一組服務(wù)器提供相同的一個(gè)服務(wù),客戶(hù)方請(qǐng)求服務(wù)時(shí),系統(tǒng)將該服務(wù)請(qǐng)求組播給這些服務(wù)器組的每個(gè)成員,并執(zhí)行相同的服務(wù)操作。【即使服務(wù)器組有一個(gè)或多個(gè)服務(wù)器失效,客戶(hù)方請(qǐng)求仍能產(chǎn)生滿意的結(jié)果】
2.基于數(shù)據(jù)存儲(chǔ)的安全性考慮,數(shù)據(jù)備份是最經(jīng)常使用的方法,即相同的一組數(shù)據(jù)同時(shí)存儲(chǔ)在若干個(gè)不同的服務(wù)器上。為保證數(shù)據(jù)備份的數(shù)據(jù)一致性,當(dāng)一個(gè)服務(wù)器上存儲(chǔ)的數(shù)據(jù)發(fā)生改變時(shí),就要將這種改變的信息組播到其它各個(gè)服務(wù)器,對(duì)數(shù)據(jù)進(jìn)行及時(shí)更新。
3.在提供事件機(jī)制的分布式系統(tǒng)中,當(dāng)事件發(fā)生時(shí),就要將事件通知組播給與該事件相關(guān)的所有進(jìn)程,激發(fā)并執(zhí)行相應(yīng)的動(dòng)作。
IP組播是一種最簡(jiǎn)單的組播實(shí)現(xiàn)方式,只能通過(guò)UDP得到。與基于IP的P2P數(shù)據(jù)通信一樣,不能保證組播消息能全部準(zhǔn)確無(wú)誤地到達(dá)組中每個(gè)進(jìn)程。發(fā)布/訂閱系統(tǒng)(Pub/Sub)基于事件的協(xié)同機(jī)制。用戶(hù)在使用事件前,必須分別注冊(cè)進(jìn)程為事件的提供者或者使用者,進(jìn)程以這兩種角色參與事件通信。提供者和使用者之間通過(guò)事件服務(wù)器傳遞事件。事件的提供者將事件發(fā)送給事件服務(wù)器,事件的使用者在使用事件之前必須在事件服務(wù)器注冊(cè)其訂閱條件,表示對(duì)系統(tǒng)中的某些事件感興趣,而事件服務(wù)器則保證將所發(fā)布的事件及時(shí)組播給所有對(duì)之感興趣的事件使用者。在發(fā)布/訂閱系統(tǒng)中,事件的提供者稱(chēng)為發(fā)布者(Publisher),事件的使用者稱(chēng)為訂閱者(Subscriber),發(fā)布者和訂閱者統(tǒng)稱(chēng)為客戶(hù),事件服務(wù)器稱(chēng)為事件代理(Event Broker EB),負(fù)責(zé)事件在各客戶(hù)之間的連接和發(fā)送。所有客戶(hù)連接到事件代理上,既可作為事件的發(fā)布者,也可作為事件的訂閱者。
發(fā)布/訂閱系統(tǒng)(Pub/Sub)支持推和拉兩種協(xié)同工作模式。推模式由事件發(fā)布者產(chǎn)生事件,主動(dòng)推送事件到事件代理,然后由事件代理推送事件到事件訂閱者。
拉模式由事件訂閱者主動(dòng)請(qǐng)求發(fā)布者產(chǎn)生事件,事件代理等待訂閱者的事件請(qǐng)求到來(lái),然后再請(qǐng)求事件發(fā)布者產(chǎn)生事件并發(fā)布到事件代理。
【兩種模式區(qū)別:推模式中的事件訂閱者是被動(dòng)地等待事件到來(lái),而拉模式中的訂閱者則是主動(dòng)地請(qǐng)求事件?!?/span>
參考自【網(wǎng)絡(luò)分布計(jì)算與軟件工程第二版馮玉琳等著】
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的RPC、RMI与MOM与组播 通信原理 .的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个简单的游戏服务器框架
- 下一篇: 如何在Appscale下发布自己的应用(