一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RPC的JAVA實(shí)現(xiàn)工作原理

汽車(chē)玩家 ? 來(lái)源:IT知識(shí)課堂 ? 作者:IT知識(shí)課堂 ? 2020-05-05 23:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

思考一個(gè)問(wèn)題:為什么需要 RPC 服務(wù)?

RPC的JAVA實(shí)現(xiàn)工作原理

在傳統(tǒng)的開(kāi)發(fā)模式中,我們通常將系統(tǒng)的各個(gè)服務(wù)部署在單臺(tái)機(jī)器,隨著服務(wù)的擴(kuò)展,這種方式已經(jīng)完全無(wú)法滿(mǎn)足系統(tǒng)大規(guī)模的擴(kuò)展需要,分布式系統(tǒng)由此誕生,在分布式系統(tǒng)中,最重要就是各個(gè)服務(wù)之間的 RPC 調(diào)用。

RPC 全稱(chēng) Remote Procedure Call——遠(yuǎn)程過(guò)程調(diào)用,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的方式。簡(jiǎn)單一點(diǎn)就是:通過(guò)一定協(xié)議和方法使得調(diào)用遠(yuǎn)程計(jì)算機(jī)上的服務(wù),就像調(diào)用本地服務(wù)一樣。

通常來(lái)說(shuō),RPC 的實(shí)現(xiàn)方式有很多,可以基于常見(jiàn)的 HTTP 協(xié)議,也可以在TCP上層封裝自定義協(xié)議,常見(jiàn)的 Web Service 就是基于 HTTP 協(xié)議的 RPC,HTTP 協(xié)議的優(yōu)點(diǎn)是具有良好的跨平臺(tái)性,特別適合異構(gòu)系統(tǒng)較多的公司,但是由于 HTTP 報(bào)頭較為冗長(zhǎng),性能較差,基于 TCP 協(xié)議的 RPC 可以建立長(zhǎng)連接,速度和效率明顯,但是難度和復(fù)雜程度很高。

RPC 的誕生讓構(gòu)建分布式應(yīng)用更容易,極大的擴(kuò)大系統(tǒng)的可擴(kuò)展性,容錯(cuò)性。為復(fù)雜業(yè)務(wù)邏輯的系統(tǒng)進(jìn)行服務(wù)化改造和高可用性升級(jí)提供了可能。

RPC 調(diào)用分類(lèi)

RPC 調(diào)用的分類(lèi)方式有很多種。

通信協(xié)議層面可以分為:

基于 HTTP 協(xié)議的 RPC;

基于二進(jìn)制協(xié)議的 RPC;

基于 TCP 協(xié)議的 RPC。

從是否跨平臺(tái)可分為:

單語(yǔ)言 RPC,如 RMI, Remoting;

跨平臺(tái) RPC,如 google protobuffer, restful json,http XML。

從調(diào)用過(guò)程來(lái)看,可以分為同步通信RPC和異步通信RPC:

同步 RPC:指的是客戶(hù)端發(fā)起調(diào)用后,必須等待調(diào)用執(zhí)行完成并返回結(jié)果;

異步 RPC:指客戶(hù)方調(diào)用后不關(guān)心執(zhí)行結(jié)果返回,如果客戶(hù)端需要結(jié)果,可用通過(guò)提供異步 callback 回調(diào)獲取返回信息。大部分 RPC 框架都同時(shí)支持這兩種方式的調(diào)用。

RPC 框架結(jié)構(gòu)

一個(gè)完整的 RPC 框架的架構(gòu)主要模塊如圖所示。

RPC的JAVA實(shí)現(xiàn)工作原理

RPC 服務(wù)方的主要職責(zé)是提供服務(wù),供客戶(hù)端調(diào)用訪(fǎng)問(wèn),服務(wù)端會(huì)通過(guò)一個(gè)接收器接受客戶(hù)端的調(diào)用請(qǐng)求,根據(jù)相應(yīng)的 RPC 協(xié)議進(jìn)行解碼獲取調(diào)用方法以及相關(guān)參數(shù),當(dāng)調(diào)用完成后,服務(wù)器端通過(guò)后臺(tái)處理模塊處理完成并將結(jié)果返回給客戶(hù)端。

對(duì)于客戶(hù)端來(lái)說(shuō),服務(wù)調(diào)用完全透明,像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程方法,客戶(hù)端調(diào)用服務(wù)時(shí)候通過(guò)一個(gè)遠(yuǎn)程連接和服務(wù)端建立通道,并通過(guò)相應(yīng)的協(xié)議進(jìn)行編碼,將調(diào)用的方法和相關(guān)參數(shù)發(fā)送給服務(wù)方。

上 手 篇

RPC 模塊詳解

下面我們根據(jù)上面的RPC的架構(gòu)圖,對(duì)圖中的各個(gè)模塊進(jìn)行拆解,并解釋每個(gè)模塊的作用。

服務(wù)端(Server):RPC 服務(wù)的提供者,負(fù)責(zé)將 RPC 服務(wù)導(dǎo)出;

客戶(hù)端 (Client):RPC 服務(wù)的消費(fèi)者,負(fù)責(zé)調(diào)用 RPC 服務(wù);

代理(Proxy):通過(guò)動(dòng)態(tài)代理,提供對(duì)遠(yuǎn)程接口的代理實(shí)現(xiàn);

執(zhí)行器(Invoker):對(duì)于客戶(hù)端:主要負(fù)責(zé)服務(wù)調(diào)用的編碼,調(diào)用請(qǐng)求發(fā)送和等待結(jié)果返回;對(duì)于服務(wù)方:負(fù)責(zé)處理調(diào)用邏輯并返回調(diào)用結(jié)果;

協(xié)議管理(Protocol):協(xié)議管理組件,負(fù)責(zé)整個(gè) RPC 通信協(xié)議的編/解碼;

連接端口(Connector):負(fù)責(zé)維持客戶(hù)方和服務(wù)方的長(zhǎng)連接通道;

后臺(tái)處理(Processor):負(fù)責(zé)整個(gè)調(diào)用服務(wù)中的管理調(diào)度,包括線(xiàn)程池,分發(fā),異常處理等;

連接通道(Channel):客戶(hù)端和服務(wù)器端的數(shù)據(jù)傳輸通道。

具體到 JAVA 平臺(tái)來(lái)說(shuō),其中的3,4通常使用動(dòng)態(tài)代理實(shí)現(xiàn),5,6,7,8使用 NIO 或者一些高性能 NIO 框架,如 mina,netty 實(shí)現(xiàn)。

最簡(jiǎn)單的 RPC JAVA 實(shí)現(xiàn)

在進(jìn)一步拆解了組件并劃分了職責(zé)之后,這里以一個(gè)最簡(jiǎn)單 Java RPC 框架實(shí)現(xiàn)為例,對(duì) RPC 具體邏輯進(jìn)行分析。

RPC 框架服務(wù)發(fā)布代碼:

RPC的JAVA實(shí)現(xiàn)工作原理

服務(wù)端發(fā)布服務(wù)的代碼如上,首先校驗(yàn)傳入的端口和服務(wù)是否合法,然后開(kāi)啟一個(gè) socket 監(jiān)聽(tīng),這兒為了簡(jiǎn)便,沒(méi)有采用 NIO 方式,同時(shí)直接采用 java 的序列化方式,將傳入的數(shù)據(jù)通過(guò)反射取出調(diào)用的方法和參數(shù),本地執(zhí)行后將運(yùn)行結(jié)果通過(guò) socket 套接字返回給客戶(hù)端。

RPC 框架服務(wù)調(diào)用代碼:

RPC的JAVA實(shí)現(xiàn)工作原理

框架中客戶(hù)端調(diào)用的代碼中,首先校驗(yàn)對(duì)應(yīng)的端口和主機(jī)是否合法,然后通過(guò)動(dòng)態(tài)代理生成一個(gè)代理對(duì)象,在代理對(duì)象的方法中,攔截調(diào)用,通過(guò)建立 socket 連接,將方法和參數(shù)傳遞到遠(yuǎn)端執(zhí)行并獲取遠(yuǎn)程執(zhí)行返回結(jié)果。

RPC 調(diào)用測(cè)試:

RPC的JAVA實(shí)現(xiàn)工作原理

RPC的JAVA實(shí)現(xiàn)工作原理

RPC的JAVA實(shí)現(xiàn)工作原理

如上圖所示,服務(wù)器端發(fā)布一個(gè)接口服務(wù) HelloService,客戶(hù)端成功通過(guò) RPC 調(diào)用。

思 考 篇

自定義 RPC 協(xié)議

協(xié)議頭

在上面的示例程序當(dāng)中,我們僅僅是完成了一個(gè)基本的遠(yuǎn)程調(diào)用,并沒(méi)有實(shí)現(xiàn) RPC 框架中的很多組件功能,從最簡(jiǎn)單的代碼版本中我們可以發(fā)現(xiàn),發(fā)起一個(gè) RPC 調(diào)用,需要傳輸?shù)淖罨緮?shù)據(jù)如下:

接口方法:包括接口的名字和相應(yīng)的方法名字;

方法參數(shù):包括參數(shù)的類(lèi)型和取值;

附件參數(shù),包括調(diào)用接口版本,接口超時(shí)時(shí)間等等。

因此,如果要自定義協(xié)議實(shí)現(xiàn) RPC,我們必須再協(xié)議的消息體中包含這部分?jǐn)?shù)據(jù),另外,我們需要定義一些協(xié)議元數(shù)據(jù),這些元數(shù)據(jù)通常放在協(xié)議頭中,和包含必要參數(shù)的協(xié)議體一期組成了自定義消息。

元數(shù)據(jù)通常會(huì)包含以下字段,大部分字段只需要1-2位:

magic: 魔數(shù),方便協(xié)議解碼

header_size: 協(xié)議頭大小,便于解碼,同時(shí)可用用于處理TCP粘包問(wèn)題

id :消息 id,用來(lái)標(biāo)示這次調(diào)用

version: 接口版本

type:消息類(lèi)型,可用包括普通調(diào)用消息,心跳,控制消息

status:消息狀態(tài),是否首次處理或者已經(jīng)處理

body_size: 消息體長(zhǎng)度

serialize_type:消息體序列化類(lèi)型

body:具體消息

具體消息

消息內(nèi)容在網(wǎng)絡(luò)上傳輸需要對(duì)其進(jìn)行編碼,這個(gè)編碼的過(guò)程就是序列化過(guò)程,顯然,對(duì)于網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),在能夠保證信息足夠解碼的情況下,序列化的大小越小,傳輸?shù)拈_(kāi)銷(xiāo)就越小,效率就越高,目前 JAVA 平臺(tái)常用的序列化方式有:xml,json ,binary(包括 thrift; hession; kryo 等)。

在 RPC 調(diào)用中我們推薦使用二進(jìn)制方式進(jìn)行序列化,在大部分的測(cè)試中,二進(jìn)制方式序列化具有相當(dāng)好的表現(xiàn),另外一個(gè)比較有意思的地方是,每一次 JDK 版本的升級(jí),JAVA 自帶的序列化方式的效率都有提升。

服務(wù)端調(diào)用優(yōu)化

從前面的示例代碼中,我們僅僅簡(jiǎn)單的考慮了實(shí)現(xiàn)了組件中的服務(wù)端和客戶(hù)端,并沒(méi)有考慮效率問(wèn)題,在一個(gè)完整的 RPC 框架中,我們需要考慮實(shí)現(xiàn)并優(yōu)化調(diào)用的每一個(gè)地方,同時(shí),為了符合業(yè)務(wù)需求,需要有很高的可靠性和容錯(cuò)機(jī)制。

具體來(lái)說(shuō),在動(dòng)態(tài)代理模塊,我們不會(huì)采用 java 自帶的動(dòng)態(tài)接口,而是會(huì)采用一些性能更高的三方庫(kù),在連接通道和連接模塊,我們會(huì)采用更優(yōu)秀的三方NIO,如 netty 來(lái)實(shí)現(xiàn),在后端處理模塊,我們也不會(huì)僅僅是執(zhí)行結(jié)果并返回,要考慮更多的東西:

并發(fā)控制:當(dāng)多個(gè)請(qǐng)求并發(fā)處理的時(shí)候,如何管理和控制線(xiàn)程池和超時(shí)等待時(shí)間;

版本隔離:當(dāng)服務(wù)有多個(gè)版本的時(shí)候,如何讓不同的調(diào)用者能夠調(diào)用正確的服務(wù);

服務(wù)路由:當(dāng)服務(wù)提供者有多臺(tái)機(jī)器的時(shí)候,如何提高系統(tǒng)負(fù)載均衡,路由到正確的服務(wù)端;

服務(wù)降級(jí):當(dāng)多個(gè)服務(wù)重要性有不同的時(shí)候,如果保證核心業(yè)務(wù)的穩(wěn)定性,適當(dāng)?shù)慕档头呛诵臉I(yè)務(wù)優(yōu)先級(jí);

服務(wù)監(jiān)控和報(bào)警:服務(wù)出現(xiàn)異常情況時(shí)候,運(yùn)維和對(duì)應(yīng)的系統(tǒng)負(fù)責(zé)人能夠第一時(shí)間得到告警和錯(cuò)誤信息。

以上的思考大部分要結(jié)合運(yùn)維層面一起考慮,但是 RPC 框架本身也要提供足夠的支持才能保證它足夠的健壯性。

需要注意的一些地方

雖然 RPC 有足夠多的優(yōu)點(diǎn)讓你去使用,但是當(dāng)真正轉(zhuǎn)向服務(wù)化的時(shí)候,依然有很多需要考慮的地方:

網(wǎng)絡(luò)問(wèn)題:本地調(diào)用無(wú)需考慮是否能夠執(zhí)行問(wèn)題,網(wǎng)絡(luò)調(diào)用可能會(huì)因?yàn)楦鞣N外部網(wǎng)絡(luò)環(huán)境,端口攔截,IP 受限等可能情況導(dǎo)致無(wú)法成功執(zhí)行。所以 RPC 的服務(wù)端通常要考慮冪等性和容錯(cuò)性,接口需要較強(qiáng)的魯棒性設(shè)計(jì)。

異常處理:RPC 和本地服務(wù)最大的不同就是 RPC 服務(wù)存在分布式一致性問(wèn)題,當(dāng)服務(wù)沒(méi)有調(diào)用成功情況下,本地和遠(yuǎn)程的服務(wù)可能處于一個(gè)不一致的狀態(tài),如何進(jìn)行異常處理和事物的回滾機(jī)制也是一個(gè)需要考慮的問(wèn)題,是需要保障強(qiáng)一致性和最終一致性通常取決于具體的業(yè)務(wù)需求。

由于網(wǎng)絡(luò)原因,RPC 服務(wù)通常會(huì)被本地服務(wù)處理慢一個(gè)數(shù)量級(jí),在比較輕量級(jí)的業(yè)務(wù)和并發(fā)量很小的情況下,并不需要 RPC 服務(wù),引入 RPC 服務(wù)后,無(wú)論是系統(tǒng)的調(diào)試,還是線(xiàn)上問(wèn)題分析都會(huì)變得非常復(fù)雜,是否引入也需要權(quán)衡相關(guān)利弊。

文末小結(jié)

本文簡(jiǎn)單的介紹了 RPC 的基本知識(shí)和相關(guān)分析以供拋磚引玉,進(jìn)一步的學(xué)習(xí)可以參考當(dāng)前最主流的一些 RPC 框架,如dubbo, protobuff ,thrift 通過(guò)對(duì)其源碼的深入學(xué)習(xí),相信能獲益匪淺。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109603
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11883
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    微動(dòng)開(kāi)關(guān)的工作原理

    微動(dòng)開(kāi)關(guān)的工作原理
    的頭像 發(fā)表于 04-17 09:00 ?1133次閱讀

    減速機(jī)的工作原理具體是如何實(shí)現(xiàn)的?

    減速機(jī)的工作原理主要基于齒輪傳動(dòng)的原理,通過(guò)不同的齒輪組合來(lái)實(shí)現(xiàn)速度的降低和扭矩的增加。以下是減速機(jī)工作原理的具體實(shí)現(xiàn)步驟: 1、輸入軸與驅(qū)動(dòng)電機(jī)連接: 減速機(jī)的輸入軸通常與驅(qū)動(dòng)電機(jī)
    發(fā)表于 03-05 16:24

    減速機(jī)的工作原理具體是如何實(shí)現(xiàn)的?

    減速機(jī)的工作原理主要基于齒輪傳動(dòng)的原理,通過(guò)不同的齒輪組合來(lái)實(shí)現(xiàn)速度的降低和扭矩的增加。
    的頭像 發(fā)表于 02-26 18:24 ?617次閱讀
    減速機(jī)的<b class='flag-5'>工作原理</b>具體是如何<b class='flag-5'>實(shí)現(xiàn)</b>的?

    FDD的工作原理詳解

    FDD(Frequency Division Duplexing,頻分雙工)的工作原理主要基于頻率復(fù)用和雙工技術(shù),實(shí)現(xiàn)上行鏈路(移動(dòng)臺(tái)到基站)和下行鏈路(基站到移動(dòng)臺(tái))的同時(shí)雙向通信。以下是對(duì)FDD
    的頭像 發(fā)表于 01-07 17:12 ?1953次閱讀

    SiLM9714中離線(xiàn)診斷模式的工作原理實(shí)現(xiàn)方式

    本應(yīng)用筆記主要闡述了SiLM9714中離線(xiàn)診斷模式的工作原理以及實(shí)現(xiàn)方式。
    的頭像 發(fā)表于 12-05 10:32 ?1286次閱讀
    SiLM9714中離線(xiàn)診斷模式的<b class='flag-5'>工作原理</b>和<b class='flag-5'>實(shí)現(xiàn)</b>方式

    RPC的基本原理和主要特點(diǎn)

    RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)機(jī)制是一種常用的通信機(jī)制。實(shí)際上就是要像調(diào)用本地的函數(shù)一樣去調(diào)遠(yuǎn)程函數(shù)。
    的頭像 發(fā)表于 11-05 09:12 ?2102次閱讀
    <b class='flag-5'>RPC</b>的基本原理和主要特點(diǎn)

    成像器件的工作原理是什么

    工作原理 1. 成像器件的分類(lèi) 成像器件可以根據(jù)其工作原理和應(yīng)用領(lǐng)域進(jìn)行分類(lèi)。主要的成像器件類(lèi)型包括: 電荷耦合器件(Charge-Coupled Device, CCD) :是一種基于半導(dǎo)體材料的成像器件,通過(guò)電荷的存儲(chǔ)和轉(zhuǎn)移來(lái)實(shí)現(xiàn)
    的頭像 發(fā)表于 10-14 14:05 ?1111次閱讀

    cmos電流反饋運(yùn)放的工作原理是什么?

    這是一個(gè)cmos電流反饋型運(yùn)放的原理圖 誰(shuí)能詳細(xì)的解釋一下它的工作原理 具體每個(gè)mos有什么用 如何實(shí)現(xiàn)放大的 謝謝了
    發(fā)表于 09-23 07:40

    運(yùn)放恒流源的工作原理

    運(yùn)放恒流源的工作原理,主要基于運(yùn)算放大器(Operational Amplifier,簡(jiǎn)稱(chēng)運(yùn)放)的“虛短”和“虛斷”特性,以及負(fù)反饋機(jī)制來(lái)實(shí)現(xiàn)對(duì)負(fù)載提供恒定電流的目的。以下是對(duì)運(yùn)放恒流源工作原理的詳細(xì)解析,內(nèi)容將圍繞其基本原理、
    的頭像 發(fā)表于 08-28 09:55 ?4201次閱讀

    NFC天線(xiàn)的工作原理和結(jié)構(gòu)

    NFC(Near Field Communication)天線(xiàn)作為實(shí)現(xiàn)近距離無(wú)線(xiàn)通訊技術(shù)的關(guān)鍵組件,其工作原理和結(jié)構(gòu)對(duì)于理解NFC技術(shù)的運(yùn)作至關(guān)重要。
    的頭像 發(fā)表于 08-27 10:52 ?4966次閱讀

    DC-DC升壓模塊的工作原理

    DC-DC升壓模塊的工作原理是一個(gè)復(fù)雜但高效的過(guò)程,它基于電感器的能量存儲(chǔ)和釋放機(jī)制,通過(guò)開(kāi)關(guān)器件的快速通斷來(lái)實(shí)現(xiàn)電壓的升高。以下是對(duì)DC-DC升壓模塊工作原理的詳細(xì)闡述,包括其組成部分、工作
    的頭像 發(fā)表于 08-23 10:34 ?4697次閱讀

    Dubbo源碼淺析(一)—RPC框架與Dubbo

    一、什么是RPC 1.1 RPC概念 RPC,Remote Procedure Call 即遠(yuǎn)程過(guò)程調(diào)用,與之相對(duì)的是本地服務(wù)調(diào)用,即LPC(Local Procedure Call)。本地服務(wù)調(diào)用
    的頭像 發(fā)表于 08-16 15:18 ?1155次閱讀
    Dubbo源碼淺析(一)—<b class='flag-5'>RPC</b>框架與Dubbo

    java淺拷貝BeanUtils.copyProperties引發(fā)的RPC異常

    java.lang.ClassCastException: java.util.HashMap cannot be cast to cn.xxx.xxx.xxx.xxx.BatchInfo 排查
    的頭像 發(fā)表于 08-13 17:11 ?522次閱讀
    <b class='flag-5'>java</b>淺拷貝BeanUtils.copyProperties引發(fā)的<b class='flag-5'>RPC</b>異常

    無(wú)源蜂鳴器的工作原理是什么

    無(wú)源蜂鳴器是一種常見(jiàn)的電子元件,廣泛應(yīng)用于各種電子設(shè)備中,如鬧鐘、電話(huà)、電腦、汽車(chē)等。它通過(guò)將電能轉(zhuǎn)換為聲音信號(hào),實(shí)現(xiàn)聲音的輸出。 一、無(wú)源蜂鳴器的工作原理 1.1 基本工作原理 無(wú)源蜂鳴器
    的頭像 發(fā)表于 08-09 09:46 ?3915次閱讀

    如何手搓一個(gè)自定義的RPC 遠(yuǎn)程過(guò)程調(diào)用框架

    是一種常用的技術(shù),能夠簡(jiǎn)化客戶(hù)端與服務(wù)器之間的交互。本文將介紹如何基于Netty(網(wǎng)絡(luò)編程框架)實(shí)現(xiàn)一個(gè)自定義的簡(jiǎn)單的RPC框架。 首先簡(jiǎn)單介紹一下RPC 主要特點(diǎn): 1.1、RPC遠(yuǎn)
    的頭像 發(fā)表于 07-22 12:17 ?1232次閱讀
    如何手搓一個(gè)自定義的<b class='flag-5'>RPC</b> 遠(yuǎn)程過(guò)程調(diào)用框架