亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

國內(nèi)外個人免費(fèi)云服務(wù)器推薦 liunx服務(wù)器搭建與管理( 三 )


一開始你用基于HTTP的RESTful接口在服務(wù)器之間通信,后來發(fā)現(xiàn)用JSON格式傳輸數(shù)據(jù)效率低下,你需要更高效的通信方案 。
這個時候你需要:
RPC && 序列化技術(shù)什么是RPC技術(shù)?
RPC全稱Remote Procedure Call,遠(yuǎn)程過程調(diào)用 。我們平時編程中,隨時都在調(diào)用函數(shù),這些函數(shù)基本上都位于本地,也就是當(dāng)前進(jìn)程某一個位置的代碼塊 。但如果要調(diào)用的函數(shù)不在本地,而在網(wǎng)絡(luò)上的某個服務(wù)器上呢?這就是遠(yuǎn)程過程調(diào)用的來源 。
從圖中可以看出,通過網(wǎng)絡(luò)進(jìn)行功能調(diào)用,涉及參數(shù)的打包解包、網(wǎng)絡(luò)的傳輸、結(jié)果的打包解包等工作 。而其中對數(shù)據(jù)進(jìn)行打包和解包就需要依賴序列化技術(shù)來完成 。
什么是序列化技術(shù)?
序列化簡單來說,是將內(nèi)存中的對象轉(zhuǎn)換成可以傳輸和存儲的數(shù)據(jù),而這個過程的逆向操作就是反序列化 。序列化 && 反序列化技術(shù)可以實(shí)現(xiàn)將內(nèi)存對象在本地和遠(yuǎn)程計算機(jī)上搬運(yùn) 。好比把大象關(guān)進(jìn)冰箱門分三步:
將本地內(nèi)存對象編碼成數(shù)據(jù)流通過網(wǎng)絡(luò)傳輸上述數(shù)據(jù)流將收到的數(shù)據(jù)流在內(nèi)存中構(gòu)建出對象序列化技術(shù)有很多免費(fèi)開源的框架,衡量一個序列化框架的指標(biāo)有這么幾個:
是否支持跨語言使用,能支持哪些語言是否只是單純的序列化功能,包不包含RPC框架序列化傳輸性能擴(kuò)展支持能力(數(shù)據(jù)對象增刪字段后,前后的兼容性)是否支持動態(tài)解析(動態(tài)解析是指不需要提前編譯,根據(jù)拿到的數(shù)據(jù)格式定義文件立即就能解析)下面流行的三大序列化框架protobuf、thrift、avro的對比:
ProtoBuf:廠商:Google
支持語言:C++、Java、Python等
動態(tài)性支持:較差,一般需要提前編譯
是否包含RPC:否
簡介:ProtoBuf是谷歌出品的序列化框架,成熟穩(wěn)定,性能強(qiáng)勁,很多大廠都在使用 。自身只是一個序列化框架,不包含RPC功能,不過可以與同是Google出品的GPRC框架一起配套使用,作為后端RPC服務(wù)開發(fā)的黃金搭檔 。
缺點(diǎn)是對動態(tài)性支持較弱,不過在更新版本中這一現(xiàn)象有待改善 ??傮w來說,ProtoBuf都是一款非常值得推薦的序列化框架 。
Thrift廠商:Facebook
支持語言:C++、Java、Python、PHP、C#、Go、JavaScript等
動態(tài)性支持:差
是否包含RPC:是
簡介:這是一個由Facebook出品的RPC框架,本身內(nèi)含二進(jìn)制序列化方案,但Thrift本身的RPC和數(shù)據(jù)序列化是解耦的,你甚至可以選擇XML、JSON等自定義的數(shù)據(jù)格式 。在國內(nèi)同樣有一批大廠在使用,性能方面和ProtoBuf不分伯仲 。缺點(diǎn)和ProtoBuf一樣,對動態(tài)解析的支持不太友好 。
Avro支持語言:C、C++、Java、Python、C#等
動態(tài)性支持:好
是否包含RPC:是
簡介:這是一個源自于Hadoop生態(tài)中的序列化框架,自帶RPC框架,也可獨(dú)立使用 。相比前兩位最大的優(yōu)勢就是支持動態(tài)數(shù)據(jù)解析 。
為什么我一直在說這個動態(tài)解析功能呢?在之前的一段項(xiàng)目經(jīng)歷中,軒轅就遇到了三種技術(shù)的選型,擺在我們面前的就是這三種方案 。需要一個C++開發(fā)的服務(wù)和一個Java開發(fā)的服務(wù)能夠進(jìn)行RPC 。
Protobuf和Thrift都需要通過“編譯”將對應(yīng)的數(shù)據(jù)協(xié)議定義文件編譯成對應(yīng)的C++/Java源代碼,然后合入項(xiàng)目中一起編譯,從而進(jìn)行解析 。
當(dāng)時,Java項(xiàng)目組同學(xué)非常強(qiáng)硬的拒絕了這一做法,其理由是這樣編譯出來的強(qiáng)業(yè)務(wù)型代碼融入他們的業(yè)務(wù)無關(guān)的框架服務(wù),而業(yè)務(wù)是常變的,這樣做不夠優(yōu)雅 。
最后,經(jīng)過測試,最終選擇了AVRO作為我們的方案 。Java一側(cè)只需要動態(tài)加載對應(yīng)的數(shù)據(jù)格式文件,就能對拿到的數(shù)據(jù)進(jìn)行解析,并且性能上還不錯 。(當(dāng)然,對于C++一側(cè)還是選擇了提前編譯的做法)


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: