动手实践Tars服务的搭建

一、关于Tars

Tars是腾讯2017年开源出来的微服务开发框架,内部叫TAF框架,内部使用已经有十年,很多业务在用,部署了上万台机器,成熟度高。

Tars与业界其他同类或相识的应用框架相比:

一是Tars提供了支持多语言(C++/Java)的高性能(性能可达40w/s)RPC开发框架,比如业界开源的Dubbo只支持Java,业界开源的Thrift、gRPC性能没有Tars好;

二是Tars具有针对服务进行治理的运营管理平台,比如名字路由与发现、部署/发布/扩缩容、立体化监控、日志管理、配置管理等,让系统的运行状态一切尽在掌握,而业界的Thrift、gRPC只是RPC通信框架,业务在它们之上还要做很多时期;

三是Tars经过多年在不同业务上的实践和发展,其成熟度和稳定性更好。

Tars官网:

http://tars.tencent.com/

二、概述

本教程所用环境:腾讯云CVM centos 6.5 64bits

本教程Tars服务采用C++开发,服务管理平台采用tars公共管理平台(http://tars.tencent.com/web_admin_page.jsp

本教程将搭建一对Tars的服务端和客户端,并通过tars公共管理平台控制服务端的发布 ,系统拓扑结构如下:

本教程内容编排顺序如下:

l Tars C++开发环境搭建

l Tars运行框架搭建

l Tars公共管理平台创建环境

l 开发环境下编译服务端代码HelloServer

l Tars公共管理平台发布服务HelloServer

l 开发环境下编写客户端代码HelloClient并与服务端联调

三、Tars C++开发环境搭建

1.准备依赖环境

yum install glibc-devel

yum install gcc gcc-c++

yum install cmake

yum install flex

yum install bison

yum install ncurses-devel

yum install zlib-devel

源码方式安装mysql-5.6.26,先下载好mysql-5.6.26.tar.gz

cd /usr/local

tar zxvf mysql-5.6.26.tar.gz

cd /usr/local/mysql-5.6.26

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.26 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

make

make install

ln -s /usr/local/mysql-5.6.26 /usr/local/mysql

 

2.下载tars源码

本教程采用的是tars1.10版本,下载地址:

https://github.com/Tencent/Tars/tree/v1.1.0

 

3. 安装c++开发环境

首先进入cpp/thirdparty目录,执行thirdparty.sh脚本,下载依赖的rapidjson

cd {$source_folder}/cpp/thirdparty

chmod u+x thirdparty.sh

./thirdparty.sh

注意:git拉取失败的话,可以采用手工下载

 

然后进入cpp/build源码目录

cd {$source_folder}/cpp/build

chmod u+x build.sh

./build.sh all

创建安装目录

cd /usr/local

mkdir tars

安装

cd {$source_folder}/cpp/build

./build.sh install或者make install

默认的安装路径为/usr/local/tars/cpp。

 

四、Tars运行框架搭建

1.准备mysql环境

设置mysql软链接,添加mysql用户

cd /usr/local

groupadd mysql

useradd -g mysql mysql

chown mysql:mysql mysql-5.6.26

软链接mysql-data

yum install perl

rm -rf /usr/local/mysql/data

mkdir -p /data/mysql-data

ln -s /data/mysql-data /usr/local/mysql/data

chown -R mysql:mysql /data/mysql-data /usr/local/mysql/data

cd /usr/local/mysql

cp support-files/mysql.server /etc/init.d/mysql

rm /etc/my.cnf

yum install -y perl-Module-Install.noarch

perl scripts/mysql_install_db --user=mysql

设置my.cnf

vim /usr/local/mysql/my.cnf

[mysqld]
 
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
innodb_buffer_pool_size = 128M
 
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
log_bin
 
# These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
# port = .....
socket = /tmp/mysql.sock
 
bind-address={$your machine ip}
 
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

注意:将bind-address改为部署机器的IP

 

启动mysql

cd /etc/init.d

chmod u+x mysql

service mysql start

chkconfig mysql on

结束mysql

service mysql stop

 

添加mysql的bin路径

vim /etc/profile

PATH=$PATH:/usr/local/mysql/bin
export PATH

source /etc/profile

 

Mysql添加用户root

service mysql start

mysqladmin -u root password 'root@appinside'

mysqladmin -u root -h ${主机名} password 'root@appinside'

注意${主机名}需要修改成自身机器的名称,可以通过查看/etc/hosts

 

Mysql设置root用户权限

mysql --user=root --password=root@appinside

grant all privileges on *.* to 'root'@'%' identified by 'root@appinside';

flush privileges;

 

添加mysql库路径

vim /etc/ld.so.conf

/usr/local/mysql/lib/

ldconfig

 

2.初始化Tars数据库环境

添加用户

mysql -uroot -proot@appinside

grant all on *.* to 'tars'@'%' identified by 'tars2015' with grant option;
grant all on *.* to 'tars'@'localhost' identified by 'tars2015' with grant option;
flush privileges;

sql脚本在cpp/framework/sql目录下,修改部署的ip信息

cd {$source_folder}/cpp/framework/sql

sed -i "s/192.168.2.131/${your machine ip}/g" `grep 192.168.2.131 -rl ./*`

sed -i "s/http://db.tars.com/${your machine ip}/g" `grep http://db.tars.com -rl ./*`

注意:${your machine ip}改成数据库的部署地址

 

执行.

chmod u+x exec-sql.sh

./exec-sql.sh

脚本执行后,会创建3个数据库,分别是db_tars、tars_stat、tars_property。

其中db_tars是框架运行依赖的核心数据库,里面包括了服务部署信息、服务模版信息、服务配置信息等等;

tars_stat是服务监控数据存储的数据库;

tars_property是服务属性监控数据存储的数据库;

 

3. 编译打包基础服务

Tars框架的核心基础服务:tarsAdminRegistry, tarsregistry, tarsnode, tarsconfig, tarspatch

cd ${source_folder}/cpp/build

make framework-tar

会在当前目录生成framework.tgz 包 这个包包含了 tarsAdminRegistry, tarsregistry, tarsnode, tarsconfig, tarspatch 部署相关的文件

 

4. 安装核心基础服务

创建基础服务的部署目录,如下:

mkdir -p /usr/local/app/tars

cd /usr/local/app

chown mysql:mysql ./tars/

将已打好的框架服务包复制到/usr/local/app/tars/,然后解压,如下:

cd ${source_folder}/cpp/build

cp framework.tgz /usr/local/app/tars/

cd /usr/local/app/tars

tar xzfv framework.tgz

修改各个服务对应conf目录下配置文件,注意将配置文件中的ip地址修改为本机ip地址,如下:

cd /usr/local/app/tars

sed -i "s/192.168.2.131/${your_machine_ip}/g" `grep 192.168.2.131 -rl ./*`

sed -i "s/http://db.tars.com/${your_machine_ip}/g" `grep http://db.tars.com -rl ./*`

sed -i "s/http://registry.tars.com/${your_machine_ip}/g" `grep http://registry.tars.com -rl ./*`

sed -i "s/http://web.tars.com/${your_machine_ip}/g" `grep http://web.tars.com -rl ./*`

注意:${your machine ip}改成数据库及主控tarsregistry的部署地址

 

然后在/usr/local/app/tars/目录下,执行脚本,启动tars框架服务

chmod u+x tars_install.sh

tars_install.sh

 

crontab -e

* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh

 

五、Tars公共管理平台创建环境

Tars公共管理平台:http://tars.tencent.com/web_admin_page.jsp

1.新建环境及安装代理

首先新增环境:

注意:

环境名:无限制

代理1:添加Tars框架所在腾讯云主机的内网和外网IP地址

应用:保证全局唯一即可

然后在Tars框架所在主机上安装代理:

请登录IP对应的代理机器上安装代理,安装命令如下:

wget http://119.29.225.157:18862/tarsClientProxy?os=CentOs-6.5-64 。。。

 

打开菜单机器列表,确认节点机器状态是active

2.添加服务

点击“服务管理”,选择“服务上线“,例如:添加我们需要部署的服务信息,如下图:

“应用”指你的服务程序归在哪一个应用下,例如:“TestApp”。

“服务类型”指你的服务程序用什么语言写的,例如:c++的选择“C++”。

“服务名称”指你的服务程序的标识名字,例如:“HelloServer”。

“模版名称“ 指你的服务程序在启动时,设置的配置文件的名称,默认用”tars.cloud.default“即可。

“管理员QQ号“ 填登录系统的QQ号码即可。

“是否启用set”指服务是否需要按set进行部署,选择“否“即可。

“部署IP“ 指服务部署的机器IP。

“OBJ绑定IP“ 指OBJ要绑定的Ip地址

“OBJ名称“ 指标识服务程序的对外接口(端口)名称,通常是Servant名称(参见服务名称的第三部分)+“Obj”来命名。(注:要以Obj结尾)

“端口“ 指OBJ要绑定的端口,如果不需要绑定特别的端口,可以点击自动生成端口来生成。

“是否tars”指是否使用tars协议。服务程序可以使用自定义的协议。

“线程数”指服务程序开多少个业务处理线程,用于处理客户端传过来的请求。

“最大连接数”指最多支持多少个客户端同时连接。

“队列最大长度”指存放待处理请求的最大数量。

“队列超时时间”指消息在队列中等待处理最长的时间。

点击“提交“,成功后,菜单数下的TestApp应用将出现HelloServer名称。

在管理系统上的部署暂时先到这里,到此为止,只是使你的服务在管理系统上占了个位置,真实程序尚未发布。

 

六、开发环境下编译服务端代码HelloServer

参考:http://tars.tencent.com/base/help/TARS_quick_start_C++.html

1.运行创建脚本:

cd /usr/local/tars/cpp/script

create_tars_server.sh [App] [Server] [Servant]

本例中执行:

create_tars_server.sh TestApp HelloServer Hello

注意:[Servant]不要叫Obj结尾,脚本会自动加上。

命令执行后,会在当前目录的TestApp/HelloServer/ 目录下,生成下面文件:

HelloServer.h HelloServer.cpp Hello.tars HelloImp.h HelloImp.cpp makefile

这些文件,已经包含了最基本的服务框架和默认测试接口实现。

 

2.服务编译:

进入代码目录,先不修改任何代码,依次执行:

make cleanall

make

make tar

观察输出,是否有错误. 如一切无误,服务会生成一个打包文件HelloServer.tgz。

 

七、Tars公共管理平台发布服务HelloServer

在菜单树选择新建的服务HelloServer, 然后点击tab发布管理,点击“手动上传发布包”,如下图:

然后选择发布包后,进行发布,顺利发布后,服务的实时状态变成active,如下图:

 

八、开发环境下编写客户端代码HelloClient并与服务端联调

1.准备依赖的头文件

在开发环境上,创建/home/tarsproto/[APP]/[Server]目录。

例如:/home/tarsproto/TestApp/HelloServer

在刚才编写服务器的代码目录下,执行 make release

这时会在/home/tarsproto/TestApp/HelloServer目录下生成h、tars和mk文件。这样在有某个服务需要访问HelloServer时,就直接引用HelloServer服务make release的内容,不需要把HelloServer的tars拷贝过来(即代码目录下不需要存放HelloServer的tars文件)。

 

2.编写客户端代码

建立客户端代码目录,如TestHelloClient/。

编写main.cpp,创建实例并调用刚编写的接口函数进行测试。

参考链接中文档5.4小节:http://tars.tencent.com/base/help/TARS_quick_start_C++.html

 

3.联调

编译后,运行TestHelloClient,结果如下:

[root@VM_0_13_centos hello_client]# ./TestHelloClient

2018-07-22 00:57:30|CommunicatorEpoll::run id:12527

iRet:0

iRet:0

 

九、小结

从教程篇幅可以看出,tars demo的搭建步骤挺冗长的,官方github上也有提供文档,散乱还有很多坑没讲清楚。Tars框架本身不错,但开源的氛围还不成熟,除了官方提供的QQ群,网上能搜索到的资料非常有限,任重道远,希望Tars团队持续投入建设。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值