摘要:負載均衡,故障轉(zhuǎn)移與同步調(diào)用的連接池思路基本相同。而由于異步調(diào)用,端會很快返回,所以端多個服務(wù)同時路由到同一個的情況是很少的,因此一個服務(wù)的一個只需要建立少量的連接。
要實時就用同步,要吞吐率就用異步。
同步調(diào)用流程略
實現(xiàn)負載均衡:連接池中建立了與一個RPC-server集群的連接,連接池在返回連接的時候,需要具備負載均衡策略。
實現(xiàn)故障轉(zhuǎn)移:連接池中建立了與一個RPC-server集群的連接,當連接池發(fā)現(xiàn)某一個機器的連接異常后,需要將這個機器的連接排除掉,返回正常的連接,在機器恢復后,再將連接加回來。
實現(xiàn)發(fā)送超時:因為是同步阻塞調(diào)用,拿到一個連接后,使用底層socket帶超時的send/recv即可實現(xiàn)帶超時的發(fā)送和接收。
流程略
為什么要待發(fā)送隊列、待接收隊列?
因為要將工作線程和io收發(fā)線程兩者的同步關(guān)系解除,從而引入工作線程池和io收發(fā)線程池。
為什么要上下文
因為請求包的發(fā)送,響應包的callback回調(diào)不在同一個工作線程中完成,需要一個context來記錄一個請求的上下文,把請求-響應-回調(diào)等一些信息匹配起來。通過rpc框架的內(nèi)部請求id作為key,來保存調(diào)用開始時間time,超時時間timeout,回調(diào)函數(shù)callback,超時回調(diào)timeout_callback等信息。
注意:請求id由client端服務(wù)調(diào)用時生成,會序列化成字節(jié)流發(fā)送給server端,server端會返回該請求id。
負載均衡,故障轉(zhuǎn)移
與同步調(diào)用的連接池思路基本相同。
注意:由于同步調(diào)用的連接池使用阻塞方式收發(fā),需要與一個服務(wù)的一個server ip建立多條連接來保證client端多個服務(wù)同時路由到同一個server時不會阻塞。而由于異步調(diào)用,server端會很快返回response,所以client端多個服務(wù)同時路由到同一個server的情況是很少的,因此一個服務(wù)的一個server ip只需要建立少量的連接。
超時發(fā)送與接收
超時管理器啟動timer對上下文管理器中的所有context進行掃描,看上下文中請求發(fā)送時間是否過長,如果過長,就不再等待result包,將該context從上下文管理器中移除,直接執(zhí)行timeout_callback。
注意:如果timeout_callback執(zhí)行后,client端接收到了server端的result包,此時因為通過req-id在上下文管理器里找不到對應的context(說明已經(jīng)超時處理過了),就直接將請求丟棄。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/68517.html
摘要:對于與而言,則可以看做是消息傳遞技術(shù)的一種衍生或封裝。在生產(chǎn)者通知消費者時,傳遞的往往是消息或事件,而非生產(chǎn)者自身。通過消息路由,我們可以配置路由規(guī)則指定消息傳遞的路徑,以及指定具體的消費者消費對應的生產(chǎn)者。采用和來進行遠程對象的通訊。 消息模式 歸根結(jié)底,企業(yè)應用系統(tǒng)就是對數(shù)據(jù)的處理,而對于一個擁有多個子系統(tǒng)的企業(yè)應用系統(tǒng)而言,它的基礎(chǔ)支撐無疑就是對消息的處理。與對象不同,消息本質(zhì)上...
摘要:微軟的雖然引入了事件機制,可以在隊列收到消息時觸發(fā)事件,通知訂閱者。由微軟作為主要貢獻者的,則對以及做了進一層包裝,并能夠很好地實現(xiàn)這一模式。 在分布式服務(wù)框架中,一個最基礎(chǔ)的問題就是遠程服務(wù)是怎么通訊的,在Java領(lǐng)域中有很多可實現(xiàn)遠程通訊的技術(shù),例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,這些名詞之間到底是些什么關(guān)系呢,它們背后到底是基...
摘要:微軟的雖然引入了事件機制,可以在隊列收到消息時觸發(fā)事件,通知訂閱者。由微軟作為主要貢獻者的,則對以及做了進一層包裝,并能夠很好地實現(xiàn)這一模式。 在分布式服務(wù)框架中,一個最基礎(chǔ)的問題就是遠程服務(wù)是怎么通訊的,在Java領(lǐng)域中有很多可實現(xiàn)遠程通訊的技術(shù),例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,這些名詞之間到底是些什么關(guān)系呢,它們背后到底是基...
閱讀 2083·2023-04-26 02:41
閱讀 2146·2021-09-24 09:47
閱讀 1546·2019-08-30 15:53
閱讀 1205·2019-08-30 13:01
閱讀 1885·2019-08-29 11:27
閱讀 2857·2019-08-28 17:55
閱讀 1740·2019-08-26 14:00
閱讀 3377·2019-08-26 10:18