序列化需要考慮的點(diǎn)
1努潘、通用性:是否跨平臺(tái)阵苇,是否跨語言
2、性能成本:時(shí)間链方;空間
3、可讀性:二進(jìn)制 vs xml vs json(等等)
4蘑辑、安全性:跨機(jī)房訪問
常用框架
1骡显、thrift
2、protobuf
3浆西、xml
4粉私、json
5、avro
選型建議
以上描述的五種序列化和反序列化協(xié)議都各自具有相應(yīng)的特點(diǎn)近零,適用于不同的場(chǎng)景:
1诺核、對(duì)于公司間的系統(tǒng)調(diào)用,如果性能要求在100ms以上的服務(wù)久信,基于XML的SOAP
協(xié)議是一個(gè)值得考慮的方案窖杀。
2、基于Web browser的Ajax裙士,以及Mobile app與服務(wù)端之間的通訊入客,JSON協(xié)議是
首選。對(duì)于性能要求不太高腿椎,或者以動(dòng)態(tài)類型語言為主桌硫,或者傳輸數(shù)據(jù)載荷很小的
的運(yùn)用場(chǎng)景,JSON也是非常不錯(cuò)的選擇啃炸。
3铆隘、對(duì)于調(diào)試環(huán)境比較惡劣的場(chǎng)景,采用JSON或XML能夠極大的提高調(diào)試效率南用,降
低系統(tǒng)開發(fā)成本膀钠。
4掏湾、當(dāng)對(duì)性能和簡(jiǎn)潔性有極高要求的場(chǎng)景,Protobuf托修,Thrift忘巧,Avro之間具有一定的
競(jìng)爭(zhēng)關(guān)系。
5睦刃、對(duì)于T級(jí)別的數(shù)據(jù)的持久化應(yīng)用場(chǎng)景砚嘴,Protobuf和Avro是首要選擇。如果持久化
后的數(shù)據(jù)存儲(chǔ)在Hadoop子項(xiàng)目里涩拙,Avro會(huì)是更好的選擇际长。
6、由于Avro的設(shè)計(jì)理念偏向于動(dòng)態(tài)類型語言兴泥,對(duì)于動(dòng)態(tài)語言為主的應(yīng)用場(chǎng)景工育,Avro
是更好的選擇。
7搓彻、對(duì)于持久層非Hadoop項(xiàng)目如绸,以靜態(tài)類型語言為主的應(yīng)用場(chǎng)景,Protobuf會(huì)更符
合靜態(tài)類型語言工程師的開發(fā)習(xí)慣旭贬。
8怔接、如果需要提供一個(gè)完整的RPC解決方案,Thrift是一個(gè)好的選擇稀轨。
9扼脐、如果序列化之后需要支持不同的傳輸層協(xié)議,或者需要跨防火墻訪問的高性能場(chǎng)景奋刽,Protobuf可以優(yōu)先考慮瓦侮。
參考
常用框架對(duì)比
美團(tuán)點(diǎn)評(píng)團(tuán)隊(duì)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者