本發(fā)明涉及分布式系統(tǒng),更具體地說,涉及一種分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理方法和系統(tǒng)。
背景技術(shù):
目前分布式系統(tǒng)基本上是采用RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)框架實(shí)現(xiàn)。RPC框架的主要目標(biāo)是讓構(gòu)建分布式應(yīng)用更容易,在提供強(qiáng)大的遠(yuǎn)程調(diào)用能力時(shí)不損失本地調(diào)用(LPC)的語義簡(jiǎn)潔性。目前比較流行的RPC框架有Thrift、Avro、Dubbo、Zeroc ICE等。
RPC調(diào)用一般分以下幾種方式:
1)同步調(diào)用:客戶端等待調(diào)用執(zhí)行完成并返回結(jié)果。
2)異步調(diào)用:客戶端調(diào)用后不用等待執(zhí)行結(jié)果返回,但依然可以通過回調(diào)通知等方式獲取返回結(jié)果。
3)單向調(diào)用:客戶端只需要將調(diào)用注冊(cè)到本地傳輸緩沖區(qū)后就立即返回,不會(huì)等待調(diào)用結(jié)果的返回。
對(duì)于一個(gè)要求高并發(fā)高吞吐的應(yīng)用系統(tǒng)來說,RPC同步調(diào)用方式明顯存在問題,因?yàn)樗鼤?huì)阻塞等待結(jié)果返回。而異步調(diào)用則不需要等待結(jié)果,它是通過回調(diào)方式返回結(jié)果,這樣的設(shè)計(jì)可以大大提高系統(tǒng)吞吐量,然而回調(diào)的設(shè)計(jì),后臺(tái)會(huì)緩存請(qǐng)求的連接,等有返回結(jié)果時(shí),才會(huì)將結(jié)果寫入響應(yīng)并關(guān)閉連接。所以,異步調(diào)用會(huì)消耗系統(tǒng)資源,如果并發(fā)量非常大(類似雙十一這種營銷高峰時(shí)期)而處理速度又沒有那么快時(shí),就有可能使系統(tǒng)資源崩潰。增加硬件設(shè)備雖然能解決,但也是治標(biāo)不治本的策略。RPC的單向調(diào)用方式(Oneway)雖然可以有效提高響應(yīng)速度,但這種方式是不對(duì)調(diào)用結(jié)果負(fù)責(zé)的,服務(wù)端有可能收不到消息,或者服務(wù)端宕機(jī)導(dǎo)致數(shù)據(jù)丟失,所以單向調(diào)用方式一般都不建 議采用,除非用于不做可靠性檢查的業(yè)務(wù)例如日志。
目前分布式系統(tǒng)都采用流行的RPC框架,也就是提供同步、異步和單向調(diào)用三種調(diào)用方法。但是,基于前述三種調(diào)用方法存在的以上缺點(diǎn),目前的分布式系統(tǒng)都沒有實(shí)現(xiàn)支持雙十一這種高并發(fā)高吞吐量的異步調(diào)用功能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于,針對(duì)現(xiàn)有技術(shù)的上述缺陷,提供一種分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理方法和系統(tǒng),能夠?qū)崿F(xiàn)高并發(fā)高吞吐量異步調(diào)用。
本發(fā)明為解決其技術(shù)問題在第一方面提出一種用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理方法,其特征在于,包括如下步驟:
S1、由客戶端接收并提交RPC服務(wù)調(diào)用請(qǐng)求;
S2、由AOP攔截組件攔截客戶端提交的RPC服務(wù)調(diào)用請(qǐng)求,并在判斷所述RPC服務(wù)調(diào)用請(qǐng)求需要采用異步調(diào)用方式來執(zhí)行時(shí),將所述RPC服務(wù)調(diào)用請(qǐng)求封裝成RPC服務(wù)調(diào)用消息提交給異步調(diào)用組件;
S3、由異步調(diào)用組件基于所述RPC服務(wù)調(diào)用消息執(zhí)行RPC服務(wù)調(diào)用,具體包括:
S31、由消息隊(duì)列生產(chǎn)者接收所述AOP攔截組件提交的RPC服務(wù)調(diào)用消息,然后發(fā)送給分布式消息隊(duì)列服務(wù)器;
S32、由分布式消息隊(duì)列服務(wù)器將所述RPC服務(wù)調(diào)用消息存儲(chǔ)在分布式消息隊(duì)列中,并根據(jù)預(yù)設(shè)的規(guī)則將所述分布式消息隊(duì)列中的RPC服務(wù)調(diào)用消息推送給相應(yīng)的消息隊(duì)列消費(fèi)者;
S33、由消息隊(duì)列消費(fèi)者根據(jù)所述RPC服務(wù)調(diào)用消息進(jìn)行RPC服務(wù)調(diào)用。
根據(jù)本發(fā)明第一方面的一個(gè)實(shí)施例中,所述RPC服務(wù)調(diào)用請(qǐng)求中至少包含目標(biāo)服務(wù)ID、方法、參數(shù)和優(yōu)先級(jí)信息;所述步驟S2進(jìn)一步包括:由所述AOP攔截組件通過校驗(yàn)方法名稱中是否含有異步調(diào)用標(biāo)識(shí)來判斷攔截的RPC服務(wù)調(diào)用請(qǐng)求是否需要采用異步調(diào)用方式來執(zhí)行。
根據(jù)本發(fā)明第一方面的一個(gè)實(shí)施例中,所述步驟S33進(jìn)一步包括:由消息隊(duì)列消費(fèi)者根據(jù)RPC服務(wù)調(diào)用消息中的目標(biāo)服務(wù)ID、方法、參數(shù)和優(yōu)先級(jí) 屬性動(dòng)態(tài)調(diào)用目標(biāo)服務(wù)。
根據(jù)本發(fā)明第一方面的一個(gè)實(shí)施例中,所述步驟S31進(jìn)一步包括:所述消息隊(duì)列生產(chǎn)者在將RPC服務(wù)調(diào)用消息成功發(fā)送給分布式消息隊(duì)列服務(wù)器后立即返回響應(yīng)給AOP攔截組件,進(jìn)而返回響應(yīng)至客戶端以由客戶端釋放相關(guān)資源。
根據(jù)本發(fā)明第一方面的一個(gè)實(shí)施例中,所述步驟S2進(jìn)一步包括:在AOP攔截組件判斷所述RPC服務(wù)調(diào)用請(qǐng)求不需要采用異步調(diào)用方式來執(zhí)行時(shí),以同步調(diào)用方式直接調(diào)用目標(biāo)服務(wù)。
本發(fā)明為解決其技術(shù)問題在第二方面提出一種用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理系統(tǒng),包括客戶端、AOP攔截組件和異步調(diào)用組件,其中:
客戶端用于接收并提交RPC服務(wù)調(diào)用請(qǐng)求;
AOP攔截組件用于攔截客戶端提交的RPC服務(wù)調(diào)用請(qǐng)求,并在判斷所述RPC服務(wù)調(diào)用請(qǐng)求需要采用異步調(diào)用方式來執(zhí)行時(shí),將所述RPC服務(wù)調(diào)用請(qǐng)求封裝成RPC服務(wù)調(diào)用消息提交給異步調(diào)用組件;
異步調(diào)用組件用于基于所述RPC服務(wù)調(diào)用消息執(zhí)行RPC服務(wù)調(diào)用,進(jìn)一步包括消息隊(duì)列生產(chǎn)者、分布式消息隊(duì)列服務(wù)器和消息隊(duì)列消費(fèi)者,其中:
消息隊(duì)列生產(chǎn)者用于接收所述AOP攔截組件提交的RPC服務(wù)調(diào)用消息,然后發(fā)送給分布式消息隊(duì)列服務(wù)器;
分布式消息隊(duì)列服務(wù)器用于將所述RPC服務(wù)調(diào)用消息存儲(chǔ)在分布式消息隊(duì)列中,并根據(jù)預(yù)設(shè)的規(guī)則將所述分布式消息隊(duì)列中的RPC服務(wù)調(diào)用消息推送給相應(yīng)的消息隊(duì)列消費(fèi)者;
消息隊(duì)列消費(fèi)者用于根據(jù)所述RPC服務(wù)調(diào)用消息進(jìn)行RPC服務(wù)調(diào)用。
根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例中,所述RPC服務(wù)調(diào)用請(qǐng)求中至少包含目標(biāo)服務(wù)ID、方法、參數(shù)和優(yōu)先級(jí)信息;所述AOP攔截組件進(jìn)一步通過校驗(yàn)方法名稱中是否含有異步調(diào)用標(biāo)識(shí)來判斷攔截的RPC服務(wù)調(diào)用請(qǐng)求是否需要采用異步調(diào)用方式來執(zhí)行。
根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例中,所述消息隊(duì)列消費(fèi)者根據(jù)RPC服務(wù)調(diào)用消息中的目標(biāo)服務(wù)ID、方法、參數(shù)和優(yōu)先級(jí)屬性動(dòng)態(tài)調(diào)用目標(biāo)服務(wù)。
根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例中,所述消息隊(duì)列生產(chǎn)者在將RPC服務(wù)調(diào)用消息成功發(fā)送給分布式消息隊(duì)列服務(wù)器后立即返回響應(yīng)給AOP攔截組件,進(jìn)而返回響應(yīng)至客戶端以由客戶端釋放相關(guān)資源。
根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例中,所述AOP攔截組件在判斷所述RPC服務(wù)調(diào)用請(qǐng)求不需要采用異步調(diào)用方式來執(zhí)行時(shí),以同步調(diào)用方式直接調(diào)用目標(biāo)服務(wù)。
本發(fā)明的用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理方法和系統(tǒng),在原有RPC框架基礎(chǔ)上,通過AOP攔截技術(shù)對(duì)RPC服務(wù)調(diào)用進(jìn)行攔截,調(diào)用整合了RPC與消息隊(duì)列(MQ)的異步調(diào)用組件實(shí)現(xiàn)異步調(diào)用,從而實(shí)現(xiàn)了集群消費(fèi)和分布式RPC的深度集成,支持MQ生產(chǎn)者和MQ消費(fèi)者的水平擴(kuò)展,從而能夠?qū)崿F(xiàn)高并發(fā)高吞吐量異步調(diào)用功能。
附圖說明
下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,附圖中:
圖1是本發(fā)明一個(gè)實(shí)施例的用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理方法的流程圖;
圖2是本發(fā)明一個(gè)實(shí)施例的用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理系統(tǒng)的邏輯結(jié)構(gòu)圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提出了支持高并發(fā)高吞吐量的RPC框架的概念,整合了RPC和消息隊(duì)列,在原有RPC框架提供的同步調(diào)用、異步調(diào)用、單向調(diào)用三個(gè)調(diào)用方式基礎(chǔ)上,增加一個(gè)支持高并發(fā)高吞吐量的異步調(diào)用方式,從而實(shí)現(xiàn)高并發(fā)高吞吐量的異步調(diào)用RPC框架。此框架的優(yōu)勢(shì)是不需要做任何基礎(chǔ)架構(gòu)和系統(tǒng)功能代碼的調(diào)整,類似Spring開發(fā)框架一樣,提供簡(jiǎn)單好用的API和配置, 而不是系統(tǒng)單獨(dú)學(xué)習(xí)其他框架,方便業(yè)務(wù)開發(fā)者,提高開發(fā)效率。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理方法100的流程圖。如圖1所示,該用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用處理方法100包括如下步驟:
步驟S110中,由客戶端接收并提交RPC服務(wù)調(diào)用請(qǐng)求。用戶向客戶端發(fā)送RPC服務(wù)調(diào)用請(qǐng)求,該RPC服務(wù)調(diào)用請(qǐng)求中可包含目標(biāo)服務(wù)ID、方法、參數(shù)、優(yōu)先級(jí)等相關(guān)信息。然后客戶端向RPC服務(wù)集群中的目標(biāo)服務(wù)提交該RPC服務(wù)調(diào)用請(qǐng)求。
然后步驟S120中,由AOP攔截組件攔截客戶端提交的RPC服務(wù)調(diào)用請(qǐng)求,并在判斷所述RPC服務(wù)調(diào)用請(qǐng)求需要采用異步調(diào)用方式來執(zhí)行時(shí),將所述RPC服務(wù)調(diào)用請(qǐng)求封裝成RPC服務(wù)調(diào)用消息提交給異步調(diào)用組件。
AOP是目前JAVA比較流行的面向切面編程的技術(shù),它在不改變?cè)写a邏輯方式的情況下增加相應(yīng)的代碼邏輯。如通過JAVA的動(dòng)態(tài)代理實(shí)現(xiàn)AOP,所有RPC服務(wù)的接口類都由動(dòng)態(tài)代理托管,在調(diào)用RPC服務(wù)時(shí),必然會(huì)走到動(dòng)態(tài)代理中,所以就能輕松攔截接口方法。AOP攔截組件在攔截RPC服務(wù)調(diào)用請(qǐng)求之后,可通過校驗(yàn)方法名稱中是否含有異步調(diào)用標(biāo)識(shí)來判斷攔截的RPC服務(wù)調(diào)用請(qǐng)求是否需要采用異步調(diào)用方式來執(zhí)行。這是因?yàn)樵赗PC方法定義中,提供了異步調(diào)用標(biāo)識(shí)例如“async”字符前綴,然后AOP攔截組件攔截到RPC服務(wù)調(diào)用請(qǐng)求后,可判斷其RPC方法名稱是否具有“async”字符前綴。如果有“async”字符前綴就采用異步調(diào)用方式,AOP攔截組件將該RPC服務(wù)調(diào)用請(qǐng)求封裝成RPC服務(wù)調(diào)用消息,然后以客戶端的方式提交給異步調(diào)用組件。如果沒有“async”字符前綴,則走普通的同步調(diào)用方式直接調(diào)用目標(biāo)服務(wù)。
隨后步驟S130中,由異步調(diào)用組件基于所述RPC服務(wù)調(diào)用消息執(zhí)行RPC服務(wù)調(diào)用。異步調(diào)用組件基于消費(fèi)者與生產(chǎn)者模式實(shí)現(xiàn),負(fù)責(zé)接收RPC服務(wù)調(diào)用消息,并消費(fèi)RPC服務(wù)調(diào)用消息(即執(zhí)行RPC服務(wù)調(diào)用)。該步驟S130具體包括:
步驟S131中,由消息隊(duì)列生產(chǎn)者接收AOP攔截組件提交的RPC服務(wù)調(diào) 用消息,然后發(fā)送給分布式消息隊(duì)列服務(wù)器。消息隊(duì)列生產(chǎn)者在發(fā)送成功后立返回響應(yīng)給AOP攔截組件,進(jìn)而由AOP攔截組件將該響應(yīng)返回給客戶端,客戶端的整個(gè)調(diào)用過程就結(jié)束,相關(guān)資源(例如連接、內(nèi)存等資源)被釋放。
隨后步驟S132中,由分布式消息隊(duì)列服務(wù)器將消息隊(duì)列生產(chǎn)者提交的RPC服務(wù)調(diào)用消息存儲(chǔ)在分布式消息隊(duì)列中,并根據(jù)預(yù)設(shè)的規(guī)則將所述分布式消息隊(duì)列中的RPC服務(wù)調(diào)用消息推送給相應(yīng)的消息隊(duì)列消費(fèi)者。
隨后步驟S133中,由消息隊(duì)列消費(fèi)者根據(jù)所述RPC服務(wù)調(diào)用消息進(jìn)行RPC服務(wù)調(diào)用。消息隊(duì)列消費(fèi)者收到RPC服務(wù)調(diào)用消息后,可根據(jù)據(jù)RPC服務(wù)調(diào)用消息中的目標(biāo)服務(wù)ID、方法、參數(shù)和優(yōu)先級(jí)屬性動(dòng)態(tài)調(diào)用目標(biāo)服務(wù),完成一次RPC服務(wù)調(diào)用。如果調(diào)用出現(xiàn)異常,還可以指定是否重試調(diào)用,并可設(shè)置重試調(diào)用的次數(shù)和間隔時(shí)間。基于優(yōu)先級(jí)屬性執(zhí)行RPC服務(wù)調(diào)用,可以保障關(guān)鍵業(yè)務(wù)服務(wù)能得到綠色通過,提高關(guān)鍵業(yè)務(wù)服務(wù)的執(zhí)行效率,而非關(guān)鍵業(yè)務(wù)可以降低優(yōu)先級(jí),降低系統(tǒng)資源的使用,保障關(guān)鍵業(yè)務(wù)服務(wù)的執(zhí)行。消息隊(duì)列消費(fèi)者執(zhí)行目標(biāo)服務(wù)調(diào)用成功后,返回執(zhí)行結(jié)果給分布式消息隊(duì)列服務(wù)器,再通過異步通知客戶端執(zhí)行結(jié)果。
基于以上所介紹的用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用方法,本發(fā)明還提出一種用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用系統(tǒng)。圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于分布式系統(tǒng)的遠(yuǎn)程過程調(diào)用系統(tǒng)200的邏輯結(jié)構(gòu)圖。如圖2所示,該系統(tǒng)200包括客戶端210、AOP攔截組件220和異步調(diào)用組件230。其中,客戶端210用于接收用戶的RPC服務(wù)調(diào)用請(qǐng)求并向PRC服務(wù)集群300中的目標(biāo)服務(wù)310提交該RPC服務(wù)調(diào)用請(qǐng)求。用戶向客戶端發(fā)送的RPC服務(wù)調(diào)用請(qǐng)求中可包含目標(biāo)服務(wù)ID、方法、參數(shù)、優(yōu)先級(jí)等相關(guān)信息。AOP攔截組件220用于攔截客戶端210提交的RPC服務(wù)調(diào)用請(qǐng)求。AOP攔截組件220還判斷所攔截的RPC服務(wù)調(diào)用請(qǐng)求是否需要采用異步調(diào)用方式來執(zhí)行。在RPC方法定義中,提供了異步調(diào)用標(biāo)識(shí)例如“async”字符前綴,因此AOP攔截組件220可通過校驗(yàn)方法名稱中是否含有異步調(diào)用標(biāo)識(shí)如“async”字符前綴來判斷該RPC服務(wù)調(diào)用請(qǐng)求是否需要采用異步調(diào)用方式來執(zhí)行。如果有“async”字符前綴就采用異步調(diào)用方式,AOP攔截組件220進(jìn)一步將該RPC服務(wù)調(diào)用請(qǐng)求封裝成 RPC服務(wù)調(diào)用消息,然后以客戶端的方式提交給異步調(diào)用組件230。如果沒有“async”字符前綴,則走普通的同步調(diào)用方式直接調(diào)用目標(biāo)服務(wù)310。
異步調(diào)用組件230用于基于AOP攔截組件220提交的RPC服務(wù)調(diào)用消息執(zhí)行RPC服務(wù)調(diào)用。具體如圖2所示,異步調(diào)用組件230基于消費(fèi)者與生產(chǎn)者模式實(shí)現(xiàn),進(jìn)一步包括消息隊(duì)列生產(chǎn)者231、分布式消息隊(duì)列服務(wù)器232和消息隊(duì)列消費(fèi)者233。其中,消息隊(duì)列生產(chǎn)者231用于接收AOP攔截組件220提交的RPC服務(wù)調(diào)用消息,然后發(fā)送給分布式消息隊(duì)列服務(wù)器232。消息隊(duì)列生產(chǎn)者231在消息發(fā)送成功后立返回響應(yīng)給AOP攔截組件220,進(jìn)而由AOP攔截組件220將該響應(yīng)返回給客戶端210,客戶端210的整個(gè)調(diào)用過程就結(jié)束,相關(guān)資源(例如連接、內(nèi)存等資源)被釋放。分布式消息隊(duì)列服務(wù)器232中維護(hù)有多個(gè)分布式消息隊(duì)列,用于按預(yù)設(shè)的規(guī)則存儲(chǔ)消息隊(duì)列生產(chǎn)者231提交的RPC服務(wù)調(diào)用消息。分布式消息隊(duì)列服務(wù)器232還用于根據(jù)預(yù)設(shè)的規(guī)則將分布式消息隊(duì)列中的RPC服務(wù)調(diào)用消息推送給相應(yīng)的消息隊(duì)列消費(fèi)者233。消息隊(duì)列消費(fèi)者233用于消費(fèi)RPC服務(wù)調(diào)用消息,即根據(jù)RPC服務(wù)調(diào)用消息進(jìn)行RPC服務(wù)調(diào)用。消息隊(duì)列消費(fèi)者233收到RPC服務(wù)調(diào)用消息后,可根據(jù)RPC服務(wù)調(diào)用消息中的目標(biāo)服務(wù)ID、方法、參數(shù)和優(yōu)先級(jí)屬性動(dòng)態(tài)調(diào)用目標(biāo)服務(wù)。
圖2所示的實(shí)施例中,異步調(diào)用組件230中示出了兩個(gè)消息隊(duì)列生產(chǎn)者、三個(gè)消息隊(duì)列和三個(gè)消息隊(duì)列消費(fèi)者,顯然,這僅僅是一個(gè)具體示例。根據(jù)支持高并發(fā)高吞吐量異步調(diào)用的實(shí)際需求,本發(fā)明的處理系統(tǒng)可以對(duì)消息隊(duì)列生產(chǎn)者231、消息隊(duì)列消費(fèi)者232以及分布式消息隊(duì)列服務(wù)器232內(nèi)維持的消息隊(duì)列進(jìn)行水平擴(kuò)展,以提高消息生產(chǎn)或消費(fèi)效率,從而提高處理能力,以滿足高并發(fā)高吞吐量業(yè)務(wù)下的伸縮擴(kuò)容支持。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。