前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重磅!腾讯与科大讯飞技术共创,Google ProtoBuf进入TARS家族!

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

作者头像
腾讯开源
发布2018-03-02 16:22:27
9160
发布2018-03-02 16:22:27
举报

引言: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描述文件:
代码语言:js
复制
message HelloRequest {
    required string greeting = 1;
}
message HelloReply {
    required string reply = 1;
}
service Greeter {
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}
  • 生成代码 执行命令,通过PB官方插件和Tars插件生成代码:
代码语言:js
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯开源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档