Tars环境搭建(超详细版)

本文详细介绍了如何使用Docker搭建Tars框架,并通过TarsGo进行服务开发。首先,介绍了Tars框架的背景和依赖,然后演示了Docker环境下MySQL的准备和Tars框架的部署步骤。接着,展示了TarsGo的环境配置、工具安装及服务编写过程,包括创建服务、转换协议文件和编写服务接口。最后,提到了服务的编译、验证和部署方法,以及客户端代码的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tars环境搭建(超详细版)

简介

Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。

Tars是将腾讯内部使用的微服务架构TAF(Total Application Framework)多年的实践成果总结而成的开源项目。Tars这个名字来自《星际穿越》电影中机器人Tars, 电影中Tars有着非常友好的交互方式,任何初次接触它的人都可以轻松的和它进行交流,同时能在外太空、外星等复杂地形上,超预期的高效率的完成托付的所有任务。 拥有着类似设计理念的Tars也是一个兼顾易用性、高性能、服务治理的框架,目的是让开发更简单,聚焦业务逻辑,让运营更高效,一切尽在掌握。

目前该框架在腾讯内部,有100多个业务、10多万台服务器上运行使用。

整体架构

架构拓扑图

整体架构的拓扑图主要分为2个部分:服务节点与公共框架节点。

服务节点:

服务节点可以认为是服务所实际运行的一个具体的操作系统实例,可以是物理主机或者虚拟主机、云主机。随着服务的种类扩展和规模扩大,服务节点可能成千上万甚至数以十万计。 每台服务节点上均有一个Node服务节点和N(N>=0)个业务服务节点,Node服务节点会对业务服务节点进行统一管理,提供启停、发布、监控等功能,同时接收业务服务节点上报过来的心跳。

公共框架节点:

除了服务节点以外的服务,其他服务节点均归为一类。

公共框架节点,数量不定,为了自身的容错容灾,一般也要求在在多个机房的多个服务器上进行部署,具体的节点数量,与服务节点的规模有关,比如,如果某些服务需要打较多的日志,就需要部署更多的日志服务节点。

框架部署

tars框架十分的简单,只依赖mysql即可完成部署。tars官网提供了四种部署方案,开发者可以根据自己的技能点,进行部署。

  • 源码编译部署
  • Docker 部署
  • K8s Docker 部署
  • K8s 融合部署

我这里选择的是Docker部署的方案。

上文提到Tars框架部署依赖于MySQL,所以在进行Tars运行之前,我们需要准备好MySQL环境依赖。这里提供2条路:

1.本机服务器安装MySQL。

2.依赖于第三方服务,比如腾讯云的MySQL或者阿里云的MySQL。

假如没有购买第三方服务的数据库的话,则建议使用第一种方案。

  • 注意 MySQL 的 IP 和 root 密码,后续构建中需要使用
docker run -d -p 3306:3306 \
    --net=tars \
    -e MYSQL_ROOT_PASSWORD="123456" \
    --ip="172.25.0.2" \
    -v /data/framework-mysql:/var/lib/mysql \
    -v /etc/localtime:/etc/localtime \
    --name=tars-mysql \
    mysql:5.6

具体可以查看地址:https://tarscloud.github.io/TarsDocs/installation/docker.html

当MySQL准备好之后,开始部署 tarscloud/framework 框架。

1.拉取镜像

docker pull tarscloud/framework:latest

2.运行Docker

# 挂载的/etc/localtime是用来设置容器时区的,若没有可以去掉
# 3000端口为web程序端口
# 3001端口为web授权相关服务端口(docker>=v2.4.7可以不暴露该端口)
docker run -d \
    --name=tars-framework \
    --net=tars \
    -e MYSQL_HOST="172.25.0.2" \
    -e MYSQL_ROOT_PASSWORD="123456" \
    -e MYSQL_USER=root \
    -e MYSQL_PORT=3306 \
    -e REBUILD=false \
    -e INET=eth0 \
    -e SLAVE=false \
    --ip="172.25.0.3" \
    -v /data/framework:/data/tars \
    -v /etc/localtime:/etc/localtime \
    -p 3000:3000 \
    -p 3001:3001 \
    tarscloud/framework:v3.0.4

安装完毕后, 访问 http://${your_machine_ip}:3000 打开 web 管理平台,出现如下界面,则代表初始化成功。

在这里插入图片描述

TarsGo开发

此处略过Go环境开发

安装TarsGo工具

安装 tarsgo 创建项目脚手架:

# < go 1.17 
go get -u github.com/TarsCloud/TarsGo/tars/tools/tarsgo
# >= go 1.17
go install github.com/TarsCloud/TarsGo/tars/tools/tarsgo@latest

安装 tars2go 工具:

# < go 1.17 
go get -u github.com/TarsCloud/TarsGo/tars/tools/tars2go
# >= go 1.17
go install github.com/TarsCloud/TarsGo/tars/tools/tars2go@latest

服务编写

创建服务

tarsgo make App Server Servant GoModuleName
例如:
tarsgo make TestApp HelloGo SayHello github.com/Tars/test

和其他微服务框架一样Tars也具备自己的pb文件,.tars结尾。接口文件定义请求方法以及参数字段类型等,有关接口定义文件说明参考 tars_tup.md

为了测试,我们定义一下tars文件,WebApi.tars。

module ElasticSearchServiceApp
{
   struct Data
   {
      0 require string type;
      1 require string value;
   };

   interface WebApi
   {
      int Update(int id, string docType, vector<Data> data); // 更新接口
      int Insert(vector<Data> data); // 插入数据
      int Delete(int id, string docType); // 删除数据
      int BulkInsert(map<string, Data> data); // 批量插入
      vector<Data> Search(map<string, string> data); // 搜索
   };
};

服务端开发,我们先将tars协议文件转为Golang语言。

tars2go  -outdir=tars-protocol -module=ElasticSearchService WebApi.tars

编写接口

package main

import (
   "ElasticSearchService/tars-protocol/ElasticSearchServiceApp"
   "context"
   "github.com/TarsCloud/TarsGo/tars"
)

// WebApiImp servant implementation
type WebApiImp struct {
}

type ElasticSearchWebApiImp struct {
}

func (imp *WebApiImp) Init() (ret int32, err error) {
   return 1, nil
}

func (imp *WebApiImp) Update(tarsCtx context.Context, id int32, docType string, data []ElasticSearchServiceApp.Data) (ret int32, err error) {

   return 0, nil
}

func (imp *WebApiImp) Insert(tarsCtx context.Context, data []ElasticSearchServiceApp.Data) (ret int32, err error) {

   return 0, nil
}

func (imp *WebApiImp) Delete(tarsCtx context.Context, id int32, docType string) (ret int32, err error) {
   return 999, nil
}

func (imp *WebApiImp) BulkInsert(tarsCtx context.Context, data map[string]ElasticSearchServiceApp.Data) (ret int32, err error) {

   return 0, nil
}

func (imp *WebApiImp) Search(tarsCtx context.Context, data map[string]string) (ret []ElasticSearchServiceApp.Data, err error) {

   return []ElasticSearchServiceApp.Data{}, nil
}

注意: 这里函数名要大写,Go 语言方法导出规定。

编译 main 函数,初始代码以及有 tars 框架实现了。

编译

make && make tar

生存ElasticSearchServiceApp可执行文件以及压缩包。

验证服务

编写Client代码。

package main

import (
   "ElasticSearchService/tars-protocol/ElasticSearchServiceApp"
   "fmt"
   "github.com/TarsCloud/TarsGo/tars"
)

func main() {
   comm := tars.NewCommunicator()
   obj := fmt.Sprintf("ElasticSearchServiceApp.ElasticSearchService.WebApiObj@tcp -h 127.0.0.1 -p 10015 -t 60000")
   app := new(ElasticSearchServiceApp.WebApi)
   comm.StringToProxy(obj, app)
   ret, err := app.Delete(1, "1")
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(ret)
}

输出结果验证

在这里插入图片描述

TarsGo部署

接着上文提到,我们通过make tar生成了tgz包,此时我们只需要在界面上完成服务的创建,既可以发布。

在这里插入图片描述

部署完之后,我们回到服务管理模块。

选择刚添加的服务ElasticSearchService,选择发布管理,上传我们刚打出来的tgz包。

在这里插入图片描述

进入发布管理,选择发布包进行上传,这样服务器上会有所有的发布版本,如果遇到问题也方便快速回滚。。

在这里插入图片描述

上传完成,回到发布界面,点击发布,即可完成本次发布。

在这里插入图片描述

参考文献

Tars 官方文档 https://tarscloud.github.io/TarsDocs/SUMMARY.html

Tars 官网 https://tarscloud.org/#

03-25
<think>好的,我需要回答用户关于TARS框架的介绍和使用的询问。首先,我应该先确认用户提到的TARS框架是什么,以及它的主要功能和特点。根据我的知识库,TARS是一个由腾讯开源的微服务框架,主要用于构建高性能、分布式的后端服务。接下来,我需要整理TARS的核心特性,比如多语言支持、服务治理、高可用性等。 用户可能希望了解TARS的基本架构,所以需要简要说明其组成模块,比如服务节点、主控、Registry等。同时,用户可能对如何使用TARS感兴趣,因此需要提供一个简单的使用步骤或示例代码。例如,如何创建一个服务,如何定义接口文件,以及如何启动服务等。 另外,考虑到用户可能对微服务框架的选型有需求,可能需要对比其他框架如gRPC或Spring Cloud,但根据用户的问题,重点应放在TARS本身。还需要注意引用相关的资料,比如TARS的官方文档或者其他可靠来源,以增加回答的可信度。 在整理回答时,要遵循用户提供的格式要求,使用中文,正确使用LaTeX格式的数学表达式(虽然这个问题可能不涉及数学公式,但需要留意),分点说明结构清晰。同时,需要生成相关问题,帮助用户深入理解,比如性能优化、适用场景等。 最后,检查回答是否符合系统级指令,确保没有使用Markdown格式,引用正确,并且语言自然流畅。如果有不确定的信息,应避免猜测,而是引导用户参考官方文档或社区资源。现在,整理以上思路,形成结构化的回答。</think>### TARS框架介绍与使用 TARS是由腾讯开源的高性能微服务框架,支持多语言开发(如C++、Java、Node.js等),专注于简化分布式系统构建,提供完整的服务治理能力,包括服务注册、负载均衡、监控告警等[^2]。 #### 核心特性 1. **多语言支持**:支持多种编程语言开发服务。 2. **服务治理**:内置服务发现、流量控制、熔断降级等功能。 3. **高性能通信**:基于RPC的长链接通信,减少网络开销[^2]。 4. **高可用性**:通过主控(Registry)和节点(Node)的分布式架构实现容灾。 5. **统一管理平台**:提供Web界面管理服务配置、监控日志等。 #### 基本架构 - **服务节点(Server)**:运行业务逻辑的实例。 - **主控(Registry)**:负责服务注册与发现。 - **节点(Node)**:管理服务启停和心跳检测。 - **配置中心**:统一管理服务配置。 #### 使用示例(以C++为例) 1. **定义接口文件**(TARS文件): ```cpp module Test { interface Hello { string say(int num); }; }; ``` 2. **生成代码**:使用TARS工具自动生成服务端/客户端代码。 3. **实现服务逻辑**: ```cpp class HelloImp : public Hello { public: string say(int num) override { return "Received: " + to_string(num); } }; ``` 4. **启动服务**: ```cpp int main() { ServerConfig config; Application::addServant<HelloImp>(config, "HelloObj"); Application::waitForShutdown(); return 0; } ``` #### 适用场景 - 需要高并发、低延迟的分布式系统(如游戏服务器、金融交易系统)。 - 多语言混合开发的微服务架构。 - 需动态扩缩容和精细化监控的场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值