TarsGo

Go 语言实现的高性能微服务框架 TarsGo

BSD
Google Go
跨平台
腾讯
2018-09-24
局长

TarsGo 是一个 Go 语言实现的高性能微服务框架,也是微服务框架 Tars 的 Go 语言实现版本。

多语言支持是 Tars 的一大优势,在此之前 Tars 已经推出了 C++、Java、PHP、NodeJS 版本。Go 语言的协程并发机制使它非常适用于大规模高并发后端服务器程序开发,同时随着容器化技术的飞速发展,诸如 Docker、Kubernetes 与 Etcd 等项目兴起,使得 Go 语言越来越流行,并成为云原生的首选语言。Tars 的 Go 语言版本也因此应运而生,此次 Tars-Go 的推出,在大环境整体逐渐走向云原生的当下,意义非凡。

TarGo 架构

Tars-Go 整体架构主要可以分为三个部分,如下图所示:

  • 左边是 tars2go 工具,tars2go 基于巴科斯范式(BNF),这是一种描述程序语言结构的形式化方法,用来对 Tars 文件进行语法和词法分析,生成相应的代码,供客户端和服务端使用。同时它提供 Tars 协议二进制流的编解码功能,将二进制包转成相应的 Go 数据结构。

  • 右边部分是 package tars,它包含了 Client 和 Server 两部分的功能:

    • Client 由 Servantproxy、Communicator、ObjProxy、adapterproxy 等逻辑结构组成,这些逻辑结构用来管理 servant,obj 对应到的服务端节点的 ip 端口,和 C++ 的逻辑保持一致。底层使用 net.Conn 来建立具体的连接,并用 SendQueue chan 来控制并发数量。Client 还包含一些 Goroutine,用来做特性监控和 stat 监控上报。

    • Server 使用 package net 的 listener 来管理 TCP 和 UDP 连接,使用多个 Goroutine 进行 accept,并将 accept 之后的 net.Conn 经过 SendQueue chan 交给后端的 Handler 进行处理。Handler 由一堆 woker Goroutine 组成,每个 Goroutine 基于 net.Conn 进行收发包、Tars 协议解码,并经过 dispatcher(由 tars2go 生成) 来调用用户的代码实现,然后将结果编码成二进制流返回给 Client。Server 也包含一些 Goroutine 实现远程日志异步上报等功能,防止同步调用阻塞请求。

TarsGo 编程示例

Tars 协议是一个二进制协议,它是与语言无关的 IDL 语言,由工具自动生成服务端和客户端代码,下边是一个 Tars 协议的示例:

struct LoginInfo {
    0 require string sid;
    1 require string code;
}
struct ProfileInfo {
    0 require string nick;
    1 require int level;
}
interface TestServant   {
    int test(int qq, LoginInfo li, out ProfileInfo pi);
}
的码云指数为
超过 的项目
加载中
请先登录后再评论。

TarsGo 新版本发布,支持 Protobuf、Zipkin 和自定义插件

Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架,目前支持C++、Java、PHP、Nodejs、Golang语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产...

2018/11/13 07:49

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

tarsgo初探

参考:https://mp.weixin.qq.com/s/aO8ybUiu5htqcoGAwxwc5Q?utm_source=tuicool&utm_medium=referral 1、Go的goroutine并发机制使Go非常适合用于大规模高并发后端服务程序的开发 2、tars是个...

2019/09/17 17:17
15
0
TarsGo支持Protocol Buffer

Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++,Java,PHP,Nodejs,Golang语言。该框架为用户提供了涉及到开发、运维、以及...

2018/11/12 11:33
1.5K
0
TarsGo支持Protocol Buffer

Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++,Java,PHP,Nodejs,Golang语言。该框架为用户提供了涉及到开发、运维、以及...

2019/04/18 23:31
0
0
TarsGo新版本发布,支持protobuf,zipkin和自定义插件

Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架,目前支持C++,Java,PHP,Nodejs,Golang语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品...

2019/04/19 23:59
27
0
GopherChina第二天小结

GopherChina第二天小结 今天继续昨天的文章,参加了第二天的GopherChina,例行完成总结。 基于MINIO的对象存储方案在探探的实践 关于对象存储,之前用过seaweedfs,但是对MINIO这个项目真是一...

2019/04/10 10:10
13
0
TarsPHP 新版本发布,支持 Protobuf 协议

作者丨张勇 编辑丨TARS小助手 TARS是腾讯从2008年到今天一直在使用的微服务开发框架,2018年成为Linux基金会开源项目目前支持PHP、C++、Java、Nodejs与Go语言。该框架为用户提供了涉及到开发...

2019/08/07 23:43
0
0
TARS开源里程碑回顾

在去年12月16日开源中国举办的开源年终盛典上,TARS 获得了年度“最佳原创开源软件”奖。 谈到微服务,人们往往会提起Spring Cloud和Service Mesh。 目前带服务治理的微服务框架中,Spring ...

2019/04/22 23:13
8
0
腾讯 Tars 开源 Go 版本 Tars-Go,并发性能比 gRPC 高 5 倍

近日,腾讯宣布正式开源 Tars 的 Golang 版本 Tars-Go,其并发性能比 gRPC 的高 5 倍。 Tars 是腾讯开源的一款微服务框架,它于去年 4 月份开源,并于今年 6 月捐赠给了 Linux 基金会。Tars ...

2018/09/18 06:45
5W
3
解读|TARS开源项目发布Go语言版本

导语:近日,Tars 开源项目在上海发布并开源了 Go 语言版本,其性能与 C++ 版本相当,比 gRPC 的性能高 5 倍。——编者 Tars 是腾讯开源的一款微服务框架,它于去年 4 月份开源,并于今年 6 ...

2019/04/17 22:07
0
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部