久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

RPC, Serialization and Schema

 weicat 2010-06-29

RPC, Serialization and Schema

The post is brought to you by lekhonee v0.7

糖果項(xiàng)目的后端用Java編寫(xiě),,我負(fù)責(zé)service gateway的開(kāi)發(fā)(暫且叫sergent),,服務(wù)以Java接口+Annotation的形式聲明,與Spring集成使用,,Java對(duì)象被序列化為JSON和XML(通過(guò)jackson和castor)與外部系統(tǒng)交互,。專(zhuān)門(mén)的JSON Schema和XML Schema是可選的,系統(tǒng)交互通過(guò)簡(jiǎn)明的文檔和人工確認(rèn),。

RPC框架是跨進(jìn)程,、跨系統(tǒng)交互的重要工具,RPC框架中又包括遠(yuǎn)程調(diào)用,、網(wǎng)絡(luò)傳輸和序列化反序列化等等部分,。流行的工具包括Facebook的thrift,Google的Protobuf和原先Hadoop項(xiàng)目下的avro,。其中thrift包含遠(yuǎn)程調(diào)用,、反序列化、網(wǎng)絡(luò)等等全部的功能,。Protobuf本身是一個(gè)序列化反序列化庫(kù),,另有很多第三方RPC實(shí)現(xiàn),,avro目前除了序列化和反序列化的功能,也包含了ipc的HTTP Server和SocketServer等實(shí)現(xiàn),。在序列化的格式方面,,Thrift支持JSON和二進(jìn)制協(xié)議,Protobuf本身僅有二進(jìn)制支持,,但已經(jīng)存在第三方的其他格式實(shí)現(xiàn),。 avro原生支持二進(jìn)制和JSON格式。

從效率上來(lái)說(shuō),,二進(jìn)制方式的序列化要比文本方式的快,。Google Code上(最近遷往了github)有一個(gè)tpc項(xiàng)目thrift-protobuf-compare),根據(jù)這個(gè)項(xiàng)目的最新的比較結(jié)果(與原先不同):

protobuf成為了三者中耗時(shí)最少的框架,,之后是thrift和avro,,這次avro的耗時(shí)甚至超過(guò)了文本方式的jackson(主要在反序列化上)。

但是二進(jìn)制協(xié)議通常都需要定義Schema,,thrift / protobuf / avro三者各自定義了Schema的格式,,沒(méi)有類(lèi)似XSD和Json Schema的統(tǒng)一標(biāo)準(zhǔn),也就是說(shuō),,當(dāng)你需要傳輸一個(gè)對(duì)象,,就要為它編寫(xiě)一個(gè)Schema文件。按照通常的習(xí)慣,,都是先編寫(xiě)Schema,,然后通過(guò)命令行 工具或者自動(dòng)構(gòu)建工具來(lái)生成Java source。對(duì)于新系統(tǒng)還好說(shuō),,對(duì)舊系統(tǒng)這個(gè)改造就比較麻煩了,。另外,二進(jìn)制協(xié)議不便于調(diào)試,,所以各個(gè)thrift/protobuf/avro先后也都有JSON的實(shí)現(xiàn),,在文本的序列化格式上,JSON對(duì)XML的優(yōu)勢(shì)是全方位的,。

所以綜合起來(lái),,很難說(shuō)有一種完美的解決方案。二進(jìn)制協(xié)議的效率高,,但是改造,、編寫(xiě)Schema的代價(jià)并不小,還要面對(duì)核心Model被綁架到具體框 架的風(fēng)險(xiǎn),。文本協(xié)議開(kāi)發(fā)簡(jiǎn)便,,不需要Schema,直接POJO就可以序列化和反序列化,但是在時(shí)間和空間上都不如二進(jìn)制的方式,。

補(bǔ)充
從tpc項(xiàng)目的結(jié)果上看,,kryo在時(shí)間、空間上都擊敗了所有對(duì)手,,而且,,kryo的API非常簡(jiǎn)潔,不需要Schema文件就可以序列化POJO,,聽(tīng)起來(lái)太完美了,,看來(lái)以后sergent要借鑒一下的。

This content is published under the Attribution-Noncommercial-Share Alike 3.0 Unported license.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多