TarsGo

Go 语言实现的高性能微服务框架
授权协议 BSD
开发语言 Google Go
所属分类 Web应用开发、 RPC/XMLRPC项目
软件类型 开源软件
地区 国产
投 递 者 吴建中
操作系统 跨平台
开源组织 腾讯
适用人群 未知
 软件概览

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);
}
  • 一. Tars基础组件的配置,TarsWeb平台部署 关于Tars基础组件以及TarsWeb的部署,我之前已经总结一次了,如果没有进行该步骤可以先跳转至之前这篇文章。 二. 配置Go环境 (1)下载go文件的tar免安装包,我下载的是1.12,下载链接如下:go1.12.1.linux-amd64.tar.gz。如果链接失效可以从我的百度网盘下载:网盘链接,密码:9reb。 (2)下载完成后,解压

  • Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++,Java,PHP,Nodejs,Golang语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。 它集可扩展协议编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理

  • https://github.com/dangyanglim/tarsgo-demo 改成了go module的方式,学习tarsgo到这里,貌似tars主体不是go,不进行下去了 server启动 go run main.go SayHelloImp.go HelloImp.go --config=config.conf client启动 go run SayHelloClient.go

  • 记录一下自己犯的愚蠢的坑,按照官网提供的写了个http demo,然后怎么运行都不对,查看了一下源码,仅仅是因为命令行传入的格式不对。 配置文件在根目录下,文件名为默认的 config.conf main函数: func main() { cfg := tars.GetServerConfig() if cfg == nil { return } mux := &tars.TarsHt

 相关资料
  • imi v1.0.13 版本新增了一个 Swoole\Coroutine\Http\Server 实现的协程服务器。需要 Swoole 4.4+ 才可使用该特性。 该特性是可选的,不影响以前使用的服务器模式。 使用协程服务器特性,依靠 Linux 系统的端口重用机制,系统级的负载均衡,可以让你的多进程 Http 服务处理请求的能力得到提升。 使用 ab,本机->虚拟机(双核+2进程)压测Hello

  • 如果我们使用spring boot构建所有微服务,那么可以使用Eureka服务器(@EnableEurekaServer)发现所有微服务(@EnableEurekaClient)。如果某些微服务是使用其他技术构建的,那么在云(PCF、AWS等)中如何实现发现、负载平衡、反向代理(网关)? 我在网上读了很多关于微服务的博客,我没有得到适当的信息。

  • 本文向大家介绍Go语言Telnet回音服务器的实现,包括了Go语言Telnet回音服务器的实现的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Go语言Telnet回音服务器,分享给大家,具体如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • “在微服务之间添加的同步依赖关系越多,例如查询请求,客户端应用程序的总体响应时间就越差。 “这是真的吗?我认为在同步通信中,我们比异步通信更直接地得到反馈。例如,假设一个用户向微服务a发送http请求,微服务a又异步地向另一个微服务B发送请求,并异步地等待它的答复。如果微服务B关闭,那么用户将等待到超时才能得到响应,而在同步通信中,他将立即得到响应。

  • 本文向大家介绍go语言实现简单http服务的方法,包括了go语言实现简单http服务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现简单http服务的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Go语言程序设计有所帮助。

  • 本文向大家介绍go语言实现的memcache协议服务的方法,包括了go语言实现的memcache协议服务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现的memcache协议服务的方法。分享给大家供大家参考。具体如下: 完整实例代码点击此处本站下载。 1. Go语言代码如下: 2. Go语言代码: 3. Go语言代码如下: 希望本文所述对大家的Go语言程序设计有所帮助。

  • 本文向大家介绍微服务哪些框架相关面试题,主要包含被问及微服务哪些框架时的应答技巧和注意事项,需要的朋友参考一下 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm 捐赠给 Apache 并加入 Apache 基金会等,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一