一、引言
因官方GitHub上的部署及配置流程不是很完整,参考搭建可能碰到许多问题,现整理出一篇完整的搭建及demo应用模拟测试流程,以便更好的理解其各项功能及各个组件的关系,方便日后组件的拆分工作。
https://github.com/shulieTech/Takin
二、部署方式
docker 部署:
- 建议虚拟机内存 : 8G
- 镜像大小: 2.1G
1、获取docker镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/shulie-takin/takin:v1.0.1
2、启动docker镜像:
docker run -e APPIP=your ip -p 80:80 -p 2181:2181 -p 29900-29999:29900-29999 registry.cn-hangzhou.aliyuncs.com/shulie-takin/takin:v1.0.1
待安装完毕。
3、打开web控制台
http://IP/web (web必须加上,直接输入IP不会跳转)
三、DEMO应用准备
1 开源地址
https://github.com/shulieTech/EasyDemo
2 下载demo
curl -O https://install-pkg.oss-cn-hangzhou.aliyuncs.com/demo/easydemo_0712.tgz
tar xvf easydemo_0712.tgz</p>
3 demo文件结构
4 配置更新
更新数据库配置
将demoEnv.conf里的数据库相关配置更改为您的数据源地址
MYSQLURL=192.168.1.173
PORT=3306
USERNAME=root
PASSWD=shulie@2020
5 启动demo
./demoInstall.sh
四、Agent接入
1 agent安装
下面为linkagent地址:
https://github.com/shulieTech/LinkAgent/blob/main/doc/QuickStart.md
进入到opt目录
curl -O https://install-pkg.oss-cn-hangzhou.aliyuncs.com/manual/agent-opensource.zip
unzip agent-opensource.zip
mv agent-opensource ./simulator-agent
最后 agent目录为:
opt/simulator-agent
2 agent配置文件修改
vi simulator-agent/config/agent.properties
#配置zookeeper连接 请填写takin部署的docker宿主机的ip
simulator.zk.servers=宿主机ip:2181
# tro web url 请填写takin部署的docker宿主机的ip
tro.web.url=http://宿主机ip/takin-web
vi simulator-agent/agent/simulator/config/simulator.properties
# pradar zk server path,如果是使用docker镜像的控制台,请使用/config/log/pradar/cloud/server
pradar.server.zk.path=/config/log/pradar/cloud/server
3 demo应用启动参数修改
进入到demo应用文件夹
路径:easydemo/app/gateway
start(){
DIR="/opt"
JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS"
JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.1"
JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true"
nohup java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-gateway.jar >> gateway.log 2>&1 &
}
DIR请填写探针包解压的目录
pradar.project.name请填写业务应用名称,全局唯一
路径:easydemo/app/user
start(){
DIR="/opt"
JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS"
JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-usercenter-1.0.1"
JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true"
nohup java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-usercenter.jar >> usercenter.log 2>&1 &
}
重启应用
./demoInstallLinkAgent.sh
验证
五、进行demo程序压测
1 demo接入
1.1 创建demo程序数据量
这一步官网的文档上没有,导致执行发送请求命令不成功,写入不到数据库,导致控制台无法发现服务与梳理链路,这里研究了好久。。。
demo目录下有个create_table.sql文件,将里面的内容贴入到mysql中,会创建库和表结构,之后才能发送请求成功。
CREATE DATABASE IF NOT EXISTS easydemo_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use easydemo_db;
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`mobile` varchar(16) NOT NULL COMMENT '手机号',
`password` varchar(16) NOT NULL COMMENT '登录密码',
`nick_name` varchar(32) DEFAULT NULL COMMENT '昵称',
`email` varchar(32) DEFAULT NULL COMMENT '邮箱',
`birth_day` varchar(16) DEFAULT NULL COMMENT '生日',
`province_name` varchar(64) DEFAULT NULL COMMENT '省',
`city_name` varchar(64) DEFAULT NULL COMMENT '市',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `pt_t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`mobile` varchar(16) NOT NULL COMMENT '手机号',
`password` varchar(16) NOT NULL COMMENT '登录密码',
`nick_name` varchar(32) DEFAULT NULL COMMENT '昵称',
`email` varchar(32) DEFAULT NULL COMMENT '邮箱',
`birth_day` varchar(16) DEFAULT NULL COMMENT '生日',
`province_name` varchar(64) DEFAULT NULL COMMENT '省',
`city_name` varchar(64) DEFAULT NULL COMMENT '市',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
1.2 创建模拟业务流量
执行easydemo下的curl.sh,里面是发送请求的脚本,会自动发送请求流量,后takin会自动梳理。
1.3 接入压测链路
进入「仿真平台->链路梳理->业务活动」,点击「新增业务活动」
如2、步骤中的请求发送成功,【服务】处会梳理出流量经过的路径。
2 数据隔离&安全配置
2.1 远程调用白名单
–header “User-Agent:PerfomanceTest” 注意,在header带上了压测标记,以区分压测流量和正式流量。若传入了压测标记,linkAgent会进行数据隔离的处理。
白名单是压测流量是否可以调用某个接口的校验机制,可有效防止压测流量泄露至未接入的应用
1 加入白名单:加入白名单代表压测流量可调用该接口
2 取消白名单:取消白名单代表压测流量不可调用该接口
若未添加白名单,发起压测流量时,会报错
2.2 影子表创建
–影子表模式
--影子表模式
use easydemo_db;
CREATE TABLE `PT_t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`mobile` varchar(16) NOT NULL COMMENT '手机号',
`password` varchar(16) NOT NULL COMMENT '登录密码',
`nick_name` varchar(32) DEFAULT NULL COMMENT '昵称',
`email` varchar(32) DEFAULT NULL COMMENT '邮箱',
`birth_day` varchar(16) DEFAULT NULL COMMENT '生日',
`province_name` varchar(64) DEFAULT NULL COMMENT '省',
`city_name` varchar(64) DEFAULT NULL COMMENT '市',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2.3 平台配置影子表
进入easydemo-usercenter-1.0.1应用详情,配置影子表。
数据库URL:填写应用使用的数据源地址
影子表:填写接口用到的表,加上PT_前缀
2.4 数据隔离验证
./curl.sh
由上图可见,业务流量写入正常,压测流量正常写入影子表中,为写入业务流量的表,隔离成功!
3 压测
3.1 Jmeter生成压测脚本
使用Jmeter生成一个简单的测试脚本,并导出。
3.2 上传压测脚本
上传压测脚本至takin,如下所示:
3.3 创建压测场景
创建一个压测场景
启动任务,如检查无误,即可正常执行
已有压测数据
压测报告
验证成功将数据写入影子库中!
评论前必须登录!
立即登录 注册