RPC和序列化

2018-05-03 22:24 更新

1.什么是RPC ?

java遠(yuǎn)程方法調(diào)用,跨虛擬機(jī)方法調(diào)用,RPC不是技術(shù),是一種解決方案,google protobuffer提供了該種整合方案。

2.RPC原理?

RPC并不是一項(xiàng)新的技術(shù),而是對(duì)原有的java技術(shù)的整合實(shí)現(xiàn) 跨進(jìn)程的java方法調(diào)用。

  • 網(wǎng)絡(luò)通信
  • 序列化反序列化
  • 回調(diào)函數(shù)
  • 動(dòng)態(tài)代理

stub,在本地代表遠(yuǎn)程方法的存根,實(shí)際上是一個(gè)動(dòng)態(tài)代理對(duì)象,代理著遠(yuǎn)程的方法。

需要調(diào)用遠(yuǎn)程方法,先創(chuàng)建stub對(duì)象,存根對(duì)象上代理著遠(yuǎn)程的方法;在存根對(duì)象的方法中實(shí)現(xiàn)rpc的調(diào)用過程:

機(jī)器a發(fā)起請(qǐng)求,通過stub遠(yuǎn)程代理對(duì)象,將數(shù)據(jù)序列化,通過網(wǎng)絡(luò)傳輸?shù)竭_(dá)機(jī)器b,機(jī)器b對(duì)請(qǐng)求進(jìn)行反序列化,找到需要的方法,將方法在經(jīng)過序列化-網(wǎng)絡(luò)傳輸-反序列化的過程返回給機(jī)器a。

3. Java中怎么實(shí)現(xiàn)序列化?

系列化:將內(nèi)存中不連續(xù)且容易丟失的對(duì)象信息轉(zhuǎn)換成二進(jìn)制的信息,用來(lái)存儲(chǔ)或傳遞,這個(gè)過程叫序列化。

持久化:將內(nèi)存中易失的對(duì)象序列化之后保存到持久化的設(shè)備中的過程。 Java中的序列化:

Sun公司在jdk1.0版本的時(shí)候就實(shí)現(xiàn)了序列化和反序列化技術(shù)。 只需要對(duì)需要序列化的類實(shí)現(xiàn)Serializable接口,添加序列化id即可。序列化ID的作用是保證在序列化和反序列化的時(shí)候解析出來(lái)的數(shù)據(jù)一致。

不需要序列化的屬性使用關(guān)鍵字transient

Java中序列化缺點(diǎn) 序列化產(chǎn)生的數(shù)據(jù)量大,速度慢,不能跨語(yǔ)言

開源的序列化和反序列化框架

  • 谷歌 --google protobuffer
  • *Apache -- AVRO
  • *facebook -- Thrift
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)