日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

linux家用云服務(wù)器 Linux搭建服務(wù)器( 三 )


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

推薦閱讀