77

重磅!腾讯与科大讯飞技术共创,Google ProtoBuf进入TARS家族!

 6 years ago
source link: http://mp.weixin.qq.com/s/Hbv2Vh-Pyss0KffAmbTL_Q
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

重磅!腾讯与科大讯飞技术共创,Google ProtoBuf进入TARS家族!

腾讯开源 2017-11-16 01:42 Posted on

引言: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的服务端与客户端的实现架构图:

Image

通过对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
(点击文末“阅读原文”,直接访问)

为Tars开源贡献出您的一份力量!

在下方参与留言互动,邀请亲友点赞,获得点赞最多的10位参与者我们会送出TARS特别定制的礼品一份。

Image

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK