Protocol Buffer 工具包: 是谷歌開發(fā)的處理結(jié)構(gòu)化數(shù)據(jù)(這里的結(jié)構(gòu)化數(shù)據(jù)意思就是一個擁有多屬性的數(shù)據(jù),與大數(shù)據(jù)中的結(jié)構(gòu)化數(shù)據(jù)的概念不同)的工具。這些數(shù)據(jù)在進(jìn)行網(wǎng)絡(luò)傳輸護(hù)著持久化時候,需要先將他們序列化,也就是將結(jié)構(gòu)化的數(shù)據(jù)變成數(shù)據(jù)流的格式,簡單的說就是變成一個字符串。如何將結(jié)構(gòu)化的數(shù)據(jù)序列化,并從序列化之后的數(shù)據(jù)流中還原出原來的數(shù)據(jù)化數(shù)據(jù),統(tǒng)稱為處理結(jié)構(gòu)化數(shù)據(jù)。這就是Protocol Buffer需要解決的問題。
? ? ? 除了Protocol? Buffer之外,XML和JSON是兩種比較常用的結(jié)構(gòu)化數(shù)據(jù)處理工具。
? ? ? Protocol? Buffer序列化之后得到的數(shù)據(jù)不是可讀的字符串形式,而是二進(jìn)制流。XML或者JSON格式的數(shù)據(jù)信息都包含在了序列化之后的數(shù)據(jù)中,不需要任何其他信息就能還原序列化之后的數(shù)據(jù)。但是使用Protocol? Bufffer時候需要預(yù)先定義好輸?shù)母袷剑╯chema)。還原一個序列化之后的數(shù)據(jù)需要使用這個定義好的數(shù)據(jù)格式。因此,Protocol Buffer序列化之后的數(shù)據(jù)要比XML小3-10倍,解析時間要快20-100倍。
? ? ? 分布式tensorflow的通信協(xié)議gRPC也是以Protocol Buffer作為基礎(chǔ)的。
==================================================================================================
? ? ? Bazel 工具包:? 谷歌開發(fā)的開源的自動化構(gòu)建工具,谷歌內(nèi)部的大部分應(yīng)用都是通過它來編譯的。相比傳統(tǒng)的makefile.ant或者maven,Bazel在速度,可伸縮性,靈活性以及對不同層序設(shè)計語言和平臺的支持上都要更加出色。
? ? ? 項目空間(workspace)是Bazel的一個基本概念。一個項目可以簡單的理解為一個文件夾,在這個文件夾中包含了編譯一個軟件所需要的源代碼以及輸出編譯結(jié)果的軟連接地址。一個項目空間內(nèi)可以只包含一個應(yīng)用(比如tensorflow),一個項目空間也可以包含多個應(yīng)用。一個項目空間所對應(yīng)的文件夾是這個項目的根目錄,在這個根目錄中需要有一個WORKSPACE文件,此文件定義了對外部資源的依賴關(guān)系。在一個項目空間內(nèi)Bazel通過BUILLD文件來找到需要編譯的目標(biāo)(BUILD是由一系列的編譯目標(biāo)組成的)。Bazel的編譯方式是預(yù)先定義好的。WORKSPACE給出此項目的外部依賴關(guān)系。