日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

httpinvoker远程调用超时_RPC远程过程调用协议工作原理分析

發(fā)布時(shí)間:2024/9/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 httpinvoker远程调用超时_RPC远程过程调用协议工作原理分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、RPC(Remote Procedure Call)定義

RPC(Remote Procedure Call)—遠(yuǎn)程過(guò)程調(diào)用,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使得開(kāi)發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。

RPC采用客戶機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。首先,客戶機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。

調(diào)用分類

RPC 調(diào)用分以下兩種:

  • 同步調(diào)用
  • 客戶方等待調(diào)用執(zhí)行完成并返回結(jié)果。
  • 異步調(diào)用
  • 客戶方調(diào)用后不用等待執(zhí)行結(jié)果返回,但依然可以通過(guò)回調(diào)通知等方式獲取返回結(jié)果。 若客戶方不關(guān)心調(diào)用返回結(jié)果,則變成單向異步調(diào)用,單向調(diào)用不用返回結(jié)果。

異步和同步的區(qū)分在于是否等待服務(wù)端執(zhí)行完成并返回結(jié)果

3、RPC內(nèi)部操作流程

RPC(Remote Procedure Call)運(yùn)行時(shí),一次客戶機(jī)對(duì)服務(wù)器的RPC調(diào)用,其內(nèi)部操作大致有如下十步:

1.調(diào)用客戶端句柄;執(zhí)行傳送參數(shù)

2.調(diào)用本地系統(tǒng)內(nèi)核發(fā)送網(wǎng)絡(luò)消息

3.消息傳送到遠(yuǎn)程主機(jī)

4.服務(wù)器句柄得到消息并取得參數(shù)

5.執(zhí)行遠(yuǎn)程過(guò)程

6.執(zhí)行的過(guò)程將結(jié)果返回服務(wù)器句柄

7.服務(wù)器句柄返回結(jié)果,調(diào)用遠(yuǎn)程系統(tǒng)內(nèi)核

8.消息傳回本地主機(jī)

9.客戶句柄由內(nèi)核接收消息

10.客戶接收句柄返回的數(shù)據(jù)

4、每個(gè)組件的職責(zé)劃分

  • RpcServer
  • 負(fù)責(zé)導(dǎo)出(export)遠(yuǎn)程接口
  • RpcClient
  • 負(fù)責(zé)導(dǎo)入(import)遠(yuǎn)程接口的代理實(shí)現(xiàn)
  • RpcProxy
  • 遠(yuǎn)程接口的代理實(shí)現(xiàn)
  • RpcInvoker
  • 客戶方實(shí)現(xiàn):負(fù)責(zé)編碼調(diào)用信息和發(fā)送調(diào)用請(qǐng)求到服務(wù)方并等待調(diào)用結(jié)果返回
  • 服務(wù)方實(shí)現(xiàn):負(fù)責(zé)調(diào)用服務(wù)端接口的具體實(shí)現(xiàn)并返回調(diào)用結(jié)果
  • RpcProtocol
  • 負(fù)責(zé)協(xié)議編/解碼
  • RpcConnector
  • 負(fù)責(zé)維持客戶方和服務(wù)方的連接通道和發(fā)送數(shù)據(jù)到服務(wù)方
  • RpcAcceptor
  • 負(fù)責(zé)接收客戶方請(qǐng)求并返回請(qǐng)求結(jié)果
  • RpcProcessor
  • 負(fù)責(zé)在服務(wù)方控制調(diào)用過(guò)程,包括管理調(diào)用線程池、超時(shí)時(shí)間等
  • RpcChannel
  • 數(shù)據(jù)傳輸通道
  • 5、RPC框架需要解決的問(wèn)題?

    1、如何確定客戶端和服務(wù)端之間的通信協(xié)議?

    2、如何更高效地進(jìn)行網(wǎng)絡(luò)通信?

    3、服務(wù)端提供的服務(wù)如何暴露給客戶端?

    4、客戶端如何發(fā)現(xiàn)這些暴露的服務(wù)?

    5、如何更高效地對(duì)請(qǐng)求對(duì)象和響應(yīng)結(jié)果進(jìn)行序列化和反序列化操作?

    6、使用了哪些技術(shù)?

    1、動(dòng)態(tài)代理

    生成Client Stub(客戶端存根)和Server Stub(服務(wù)端存根)的時(shí)候需要用到j(luò)ava動(dòng)態(tài)代理技術(shù),可以使用jdk提供的原生的動(dòng)態(tài)代理機(jī)制,也可以使用開(kāi)源的:Cglib代理,Javassist字節(jié)碼生成技術(shù)。

    2、序列化

    在網(wǎng)絡(luò)中,所有的數(shù)據(jù)都將會(huì)被轉(zhuǎn)化為字節(jié)進(jìn)行傳送,所以為了能夠使參數(shù)對(duì)象在網(wǎng)絡(luò)中進(jìn)行傳輸,需要對(duì)這些參數(shù)進(jìn)行序列化和反序列化操作。

    序列化:把對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程稱為對(duì)象的序列化,也就是編碼的過(guò)程。

    反序列化:把字節(jié)序列恢復(fù)為對(duì)象的過(guò)程稱為對(duì)象的反序列化,也就是解碼的過(guò)程。

    目前比較高效的開(kāi)源序列化框架:如Kryo、fastjson和Protobuf等。

    3、NIO通信

    出于并發(fā)性能的考慮,傳統(tǒng)的阻塞式 IO 顯然不太合適,因此我們需要異步的 IO,即 NIO。

    Java 提供了 NIO 的解決方案,Java 7 也提供了更優(yōu)秀的 NIO.2 支持。可以選擇Netty或者mina來(lái)解決NIO數(shù)據(jù)傳輸?shù)膯?wèn)題。

    4、服務(wù)注冊(cè)中心

    可選:Redis、Zookeeper、Consul 、Etcd。

    一般使用ZooKeeper提供服務(wù)注冊(cè)與發(fā)現(xiàn)功能,解決單點(diǎn)故障以及分布式部署的問(wèn)題(注冊(cè)中心)。

    總結(jié)

    以上是生活随笔為你收集整理的httpinvoker远程调用超时_RPC远程过程调用协议工作原理分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。