溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

dubbo接口調(diào)用過(guò)程中,部分字段值丟失怎么辦

發(fā)布時(shí)間:2021-06-25 14:26:25 來(lái)源:億速云 閱讀:888 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“dubbo接口調(diào)用過(guò)程中,部分字段值丟失怎么辦”,在日常操作中,相信很多人在dubbo接口調(diào)用過(guò)程中,部分字段值丟失怎么辦問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”dubbo接口調(diào)用過(guò)程中,部分字段值丟失怎么辦”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

在工作中,遇到了調(diào)用遠(yuǎn)程dubbo接口,字段值丟失的情況。排查后,發(fā)現(xiàn)調(diào)用前后的代碼無(wú)誤,主要原因是在接口調(diào)用時(shí)使用hessian序列化,出現(xiàn)了子類與父類重復(fù)字段,導(dǎo)致字段值丟失。

解決辦法:將父類重復(fù)字段刪除即可。<dubbo關(guān)于序列化丟失字段的問(wèn)題>

  • dubbo序列化

  • 先看下序列化和反序列化的概念:

        序列化:把對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程稱為對(duì)象的序列化。 
        反序列化:把字節(jié)序列恢復(fù)為對(duì)象的過(guò)程稱為對(duì)象的反序列化。 

        dubbo接口調(diào)用過(guò)程中,部分字段值丟失怎么辦

  • 為什么要序列化?

        序列化模塊主要為dubbo協(xié)議提供服務(wù)提供者和服務(wù)消費(fèi)者之間的數(shù)據(jù)序列化功能。

        dubbo是一種適合于高并發(fā)、小數(shù)據(jù)量的互聯(lián)網(wǎng)應(yīng)用場(chǎng)景的框架,

        而序列化對(duì)于遠(yuǎn)程調(diào)用的響應(yīng)速度,吞吐量,網(wǎng)絡(luò)帶寬消耗也其中至關(guān)重要的作用,是提高分布式系統(tǒng)性能的最關(guān)鍵因素之一。

  • dubbo框架原生支持四種序列化類型,且與協(xié)議一一對(duì)應(yīng),性能依次下降,分別為:

  1. dubbo序列化:dubbo框架自身實(shí)現(xiàn)的一種Java序列化方案,但是不夠成熟,不建議在生產(chǎn)環(huán)境使用。(二進(jìn)制序列化)

  2. hessian2序列化(默認(rèn)):hessian是一種跨語(yǔ)言的高效二進(jìn)制序列化方式。(二進(jìn)制序列化),后來(lái)新出了一些其他的跨語(yǔ)言序列化方式:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等

  3. json序列化:目前有兩種實(shí)現(xiàn),一種是采用的阿里的fastjson庫(kù),另一種是采用dubbo中自己實(shí)現(xiàn)的簡(jiǎn)單json庫(kù),但其實(shí)現(xiàn)都不是特別成熟,而且json這種文本序列化性能一般不如上面兩種二進(jìn)制序列化。(文本序列化)

  4. jdk序列化:主要是采用JDK自帶的Java序列化實(shí)現(xiàn),性能很不理想。專門(mén)針對(duì)java語(yǔ)言的序列化方式:Kryo,F(xiàn)ST
    使用Kryo和FST非常簡(jiǎn)單,只需要在dubbo RPC的XML配置中添加一個(gè)屬性即可:

    <dubbo:protocol name="dubbo" serialization="kryo"/>


     dubbo接口調(diào)用過(guò)程中,部分字段值丟失怎么辦

在成為Apache孵化項(xiàng)目之后,對(duì)序列化方式進(jìn)行了優(yōu)化,支持的類型,分別為:fastjson,fst,hessian2,jdk和kryo。

其中fst為完全兼容JDK序列化協(xié)議的序列化框架,序列化速度是JDK的4到10倍,大小是JDK的1/3左右。

kryo序列化速度也比JDK的要快,并且大小是JDK的1/10左右。fst和kryo性能普通好于其他序列化方案,生產(chǎn)環(huán)境比較推薦使用。

  • 常問(wèn)面試題

dubbo 支持不同的通信協(xié)議

1、dubbo 協(xié)議

默認(rèn)就是走 dubbo 協(xié)議,單一長(zhǎng)連接,進(jìn)行的是 NIO 異步通信,基于 hessian 作為序列化協(xié)議。使用的場(chǎng)景是:傳輸數(shù)據(jù)量小(每次請(qǐng)求在 100kb 以內(nèi)),但是并發(fā)量很高。

為了要支持高并發(fā)場(chǎng)景,一般是服務(wù)提供者就幾臺(tái)機(jī)器,但是服務(wù)消費(fèi)者有上百臺(tái),可能每天調(diào)用量達(dá)到上億次!此時(shí)用長(zhǎng)連接是最合適的,就是跟每個(gè)服務(wù)消費(fèi)者維持一個(gè)長(zhǎng)連接就可以,可能總共就 100 個(gè)連接。然后后面直接基于長(zhǎng)連接 NIO 異步通信,可以支撐高并發(fā)請(qǐng)求。

長(zhǎng)連接,通俗點(diǎn)說(shuō),就是建立連接過(guò)后可以持續(xù)發(fā)送請(qǐng)求,無(wú)須再建立連接。

dubbo-keep-connection

而短連接,每次要發(fā)送請(qǐng)求之前,需要先重新建立一次連接。

dubbo-not-keep-connection

2、rmi 協(xié)議:走 Java 二進(jìn)制序列化,多個(gè)短連接,適合消費(fèi)者和提供者數(shù)量差不多的情況,適用于文件的傳輸,一般較少用。

3、hessian 協(xié)議:走 hessian 序列化協(xié)議,多個(gè)短連接,適用于提供者數(shù)量比消費(fèi)者數(shù)量還多的情況,適用于文件的傳輸,一般較少用。

4、http 協(xié)議:走 json 序列化。

5、webservice:走 SOAP 文本序列化。

dubbo 支持的序列化協(xié)議

dubbo 支持 hession、Java 二進(jìn)制序列化、json、SOAP 文本序列化多種序列化協(xié)議。但是 hessian 是其默認(rèn)的序列化協(xié)議。

說(shuō)一下 Hessian 的數(shù)據(jù)結(jié)構(gòu)

Hessian 的對(duì)象序列化機(jī)制有 8 種原始類型:

  • 原始二進(jìn)制數(shù)據(jù)

  • boolean

  • 64-bit date(64 位毫秒值的日期)

  • 64-bit double

  • 32-bit int

  • 64-bit long

  • null

  • UTF-8 編碼的 string

另外還包括 3 種遞歸類型:

  • list for lists and arrays

  • map for maps and dictionaries

  • object for objects

還有一種特殊的類型:

  • ref:用來(lái)表示對(duì)共享對(duì)象的引用。

為什么 PB 的效率是最高的?

其實(shí) PB 之所以性能如此好,主要由于以下兩個(gè)原因:

1、使用 proto 編譯器,自動(dòng)進(jìn)行序列化和反序列化,速度非??欤瑧?yīng)該比 XMLJSON 快上了 20~100 倍;

2、它的數(shù)據(jù)壓縮效果好,就是說(shuō)它序列化后的數(shù)據(jù)量體積小。因?yàn)轶w積小,傳輸起來(lái)帶寬和速度上會(huì)有優(yōu)化。

到此,關(guān)于“dubbo接口調(diào)用過(guò)程中,部分字段值丟失怎么辦”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI