TarsGo新版本发布,支持protobuf,zipkin和自定义插件

Posted 腾讯开源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TarsGo新版本发布,支持protobuf,zipkin和自定义插件相关的知识,希望对你有一定的参考价值。


TarsGo 新版本发布

在上次开源之后,有些用户反馈了一些需求,基于用户反馈的需求,我们进行了实现,并发布了1.1.0版本。 本次发布新增了:支持pb、支持filter(自定义插件编写)、支持zipkin分布式追踪、支持context 等,除此之外还做了一系列优化和bugfix。


01

新功能:PB支持



Protocol Buffers (简称 PB )是 Google 的一种数据交换的格式,它独立于语言,独立于平台,最早公布于 2008年7月。随着微服务架构的发展及自身的优异表现,ProtoBuf 可用于诸如网络传输、配置文件、数据存储等诸多领域,目前在互联网上有着大量应用。


如果对于现有已使用grpc,使用proto文件,想转换成tars协议的用户而言,需要将上面的proto文件翻译成Tars文件。这种翻译会比较繁琐,而且容易出错。 为此我们决定编写插件支持proto文件直接生成tars的rpc逻辑。protoc-gen-go的代码逻辑里面是预留了插件编写的规范的,参照grpc,主要有 grpc/grpc.go 和一个导入插件的link_grpc.go 。

这里我们编写 tarsrpc/tarsrpc.go 和 link_tarsrpc.go。

使用方面:


  • 将这两个文件放到protoc-gen-go 下面,go install重新生成protoc-gen-go 二进制

  • 定义proto 文件

  • 使用重新编译安装的protoc-gen-go生成序列化和rpc相关接口代码

protoc --go_out=plugins=tarsrpc:. helloworld.proto

  • 编写tars 客户端和服务端代码,参数使用pb生成的结构体,其余代码逻辑和正常的tars服务一致。

  • 详细原理和使用文档,阅读 腾讯云社区文章:
    https://cloud.tencent.com/developer/article/1353058


02

新功能: filter机制, 支持zipkin分布式追踪




为了支持用户编写插件,我们支持了filter机制,分为服务端的过滤器和客户端过滤器,用户可以基于这个机制,实现自己的TarsGo插件。

有了过滤器,我们就能对服务端和客户端的请求做一些过滤,比如使用 hook用于分布式追踪的opentracing 的span。
我们来看下客户端filter的例子:

TarsGo新版本发布,支持protobuf,zipkin和自定义插件TarsGo新版本发布,支持protobuf,zipkin和自定义插件


服务端也会注册一个filter,主要功能就是从request包体的status 提取调用链的上下文,以这个作为父span,进行调用信息的记录。


整体的一个效果:


TarsGo新版本发布,支持protobuf,zipkin和自定义插件

详细代码参见 TarsGo/tars/plugin/zipkintracing。


完整的zipkin tracing的客户端和服务端例子,详见 TarsGo/examples下面的ZipkinTraceClient和ZipkinTraceServer。



03

新功能: 支持context



TarsGo 之前在生成的客户端代码,或者用户传入的实现代码里面,都没有使用context。 这使得我们想传递一些框架的信息,比如客户端ip,端口等,或者用户传递一些调用链的信息给框架,都很难于实现。  通过接口的一次重构,支持了context,这些上下文的信息,将都通过context来实现。 这次重构为了兼容老的用户行为,采用了完全兼容的设计。


服务端使用context

TarsGo新版本发布,支持protobuf,zipkin和自定义插件

客户端使用context

TarsGo新版本发布,支持protobuf,zipkin和自定义插件

服务端和客户端的完整例子,详见 TarGo/examples


其他优化和修复


  • 将request package 的Sbuffer字段由vector<unsigned byte> 改成vector<byte>,解决和其他语言通信问题

  • 修复stat监控上报问题

  • 日志级别从远端更新

  • 修复路由刷新协程极端情况下死锁问题

  • 优化协程池方案,并添加协程池方案

  • 修复go协程启动顺序导致panic问题

  • golint大部分代码

点击阅读原文,查看Tars GO最新源码


以上是关于TarsGo新版本发布,支持protobuf,zipkin和自定义插件的主要内容,如果未能解决你的问题,请参考以下文章

goland下tarsgo使用protobuf开发

TarsPHP 新版本发布,支持 Protobuf 协议

protobuf-net 保留未来字段

TarsPHP发布新版,支持Protobuf协议

如何在 xamarin ios pcl 中使用 protobuf-net

安装python protobuf模块遇到的问题