2017年4月10日,腾讯后台逻辑层的统一应用框架TAF(Total Application Framework)开源了,取名为tars。
GitHub:https://github.com/Tencent/Tars
作为一个使用过2年TAF(后文都称tars)平台的用户,对其还是有不少感情的。所以在Debian系统上,迫不及待的自己搭建了一套tars,期间踩了不少坑故在此记录一下。
(这不是一篇教程,建议是官方教程与这篇文章里的东西结合起来看,您有疑问或者建议也可以留言与我直接交流讨论。)
tars安装之前
整体的安装步骤参照官方提供的Install.md,一些交流可以加入官方QQ群:579079160。
关于系统选择:
官方文档里的样例系统是Centos,并不说非Centos就不能装了,只要满足2个硬性条件:内核与依赖包(库)版本达到要求。这里说一句,tars用的一些依赖包(库)还是蛮新的。
内存:
总的安装流程走下来并运行,大概需要约600M的内存,所以对于内存吃紧的云用户能够提前预备一下。大致的内存占用:resin(400M)+tars核心服务(200M)。
这里吐槽一下resin占的太多了(java环境……),改小了居然还会启动卡死,所以暂时没找到缩小内存占用的解决方案。
tars安装时
首先看看安装需求:
软件 | 软件要求 |
---|---|
linux内核版本: | 2.6.18及以上版本(操作系统依赖) |
gcc版本: | 4.1.2及以上版本、glibc-devel(c++语言框架依赖) |
bison工具版本: | 2.5及以上版本(c++语言框架依赖) |
flex工具版本: | 2.5及以上版本(c++语言框架依赖) |
cmake版本: | 2.8.8及以上版本(c++语言框架依赖) |
resin版本: | 4.0.49及以上版本(web管理系统依赖) |
Java JDK版本: | java语言框架(最低1.6),web管理系统(最低1.8) |
Maven版本: | 2.2.1及以上版本(web管理系统、java语言框架依赖) |
mysql版本: | 4.1.17及以上版本(框架运行依赖) |
rapidjson版本: | 1.0.2版本(c++语言框架依赖) |
在Debian环境下,活用apt-get与aptitude可以解决除了Maven与resin之外的其他依赖。resin可以在官方群文件共享里找到包,Maven去对应官网下载(记得按照步骤改/etc/profile内容)。提示一下这里Maven版本是需要3.0+的,否在生成tars.war这里会出错。
Mysql:
需要注意的是,配置文件:
/etc/mysql/my.cnf需要将bind-address对应的IP改成内网可识别IP
tars不建议使用127.0.0.1,主要原因是每个tars服务都有一个管理的obj,它使用的IP是127.0.0.1(管理说这个我要了,你们不能用!)。其他的权限的配置与库表创建按照步骤来就OK。后面所有配置需要改IP的地方都与这个IP对应。
权限问题:
建议是与tars相关的目录均使用用户级权限,即:
sudo chown -R ${普通用户}:${普通用户} ${目录}
可能会遇见各种“Operation not permitted”奇怪的问题,即使遇见了也不要惊慌,仔细观察一下错误的目录,99.9%和目录文件权限有关系。
进入管理页面后:
发现tarsnotify是inactive状态,可以根据官方的教程自己打包发布一次,然后自己部署其他的核心服务。
注意:tarsqueryproperty与tarsquerystat协议是非tars协议,选错了会导致没有监控图表。
最终态,注意拼写的正确:
发布失败:
若所有核心服务都是正常状态,但是在发布自己的服务时一直失败,可以尝试修改并重启tarspatch服务:
/usr/local/app/tars/tarspatch/conf/tarspatch.conf配置文件中第4行修改size=100M -> size=1M。
tars安装后
脚本create_tars_server.sh:
首先我们进入官方的quickstart,执行脚本:
/usr/local/tars/cpp/script/create_tars_server.sh
会出现一些错误,因为debian bash的一些问题需要修改部分格式:
if [ "$SERVER" == "$SERVANT" ] -> if [ "$SERVER" = "$SERVANT" ]
rename "DemoServer" "$SERVER" $SRC_FILE -> rename "s/DemoServer/$SERVER/" *
rename "DemoServant" "$SERVANT" $SRC_FILE -> rename "s/DemoServant/$SERVANT/" *
关于后缀.tars一处问题:
.tars文件类似于pb的.proto文件,是一个约定格式的文件,通过处理工具将里面内容格式化成对应的代码。使用tars提供的makefile编译时,有小概率会导致编译的目标不正确,具体表现为:各种异常的堆栈然后导致程序奇怪core掉。原因应该是和makefile的写法有关。
暂时的处理方法是先make cleanall再make,如果项目很大会导致每次编译时间过长。
写在最后
在所有的服务端框架中,tars应该不是性能最好的,但是它绝对称的上“好用”两字。
优点比较明显,主控管理页面方便的重启、监控,部署各类服务,集开发,运维,测试一体;
灵活,适合各种业务场景,方便接入各种第三方库,并且自支持服务器扩缩容、调度;
缺点可能就是有点“重”,然后对于初学者不太友好,在原理不清楚的情况下容易滥用。
(全文结束)
转载文章请注明出处:漫漫路 - lanindex.com