重磅!騰訊與科大訊飛技術共創,Google ProtoBuf進入TARS家族!
引言:TARS框架及自有TARS協議在騰訊內部始於2007年。Google Protocol Buffers於2008年7月對外公佈。隨著微服務架構的發展及ProtoBuf的優異表現,目前在網際網路上有著大量應用。此次騰訊與科大訊飛進行深度技術合作,將ProtoBuf與TARS自身的編解碼協議進行整合,並於今天將TARS-PB正式對外開源!
(TARS-PB釋出)
protocol buffer
protocol buffer(簡稱PB)是google 的一種資料交換的格式,它獨立於語言,獨立於平臺。google 提供了多種語言的實現:java、c#、c++、go 和 python,每一種實現都包含了相應語言的編譯器以及庫檔案。由於它是一種二進位制的格式,比使用 xml 進行資料交換快許多。可以把它用於分散式應用之間的資料通訊或者異構環境下的資料交換。作為一種效率和相容性都很優秀的二進位制資料傳輸格式,可以用於諸如網路傳輸、配置檔案、資料儲存等諸多領域。
正因為PB有著如此優異的表現,目前PB在移動網際網路行業有著大量的應用。在Tars-PB釋出之後,已經使用PB作為內部資料交換協議的使用者可以更方便地對Tars進行整合。
Tars-PB解決方案
下圖是Tars的服務端與客戶端的實現架構圖:
通過對Tars ServantImp和ServantProxy的擴充套件,以及增加相應的protobuf codec實現了PB對Tars的支援。
物件生成
為了減少對PB序列化和反序列化的侵入,對物件仍然採用PB原生的生成方式。
Service生成
介面程式碼的生成為了保持tars的整體風格按照tars的方式進行生成。
Protoc外掛
protoc官方提供了外掛機制,只要滿足相關的外掛規範,使用者可以自定義開發自已的外掛。protoc在生成程式碼的時候,可以呼叫使用者自定義實現的外掛,從而生成使用者自定義的程式碼。
我們就是利用protoc的外掛機制,來實現 tars-pb 程式碼的生成。
使用方法
- 編寫PB檔案 編寫一個proto描述檔案:
message HelloRequest {
required string greeting = 1;
}
message HelloReply {
required string reply = 1;
}
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
- 生成程式碼 執行命令,通過PB官方外掛和Tars外掛生成程式碼:
protoc ‐‐plugin=protoc-gen-tars-java=${plugin_path} --tars-java_out=${out_path} --java_out=${out_path} ${proto_path}
- 編寫業務實現 後續的步驟與正常的tars使用相同,不在贅述。
使用pb作為編解碼協議,經過測試,沒有增加額外的效能損耗。測試資料將會在Tars開源社群公佈。
若您在使用Tars-PB時或者對Tars本身有任何意見和建議,歡迎訪問:
https://github.com/Tencent/Tars