• Jvm-Sandbox-Repeater的部署


    1.什么是jvm-sandbox-repeater?

    jvm-sandbox-repeater 是 JVM-Sandbox 生态体系下的重要模块,它具备了JVM-Sandbox 的所有特点,插件式设计便于快速适配各种中间件,封装请求录制/回放基础协议,也提供了通用可扩展的各种丰富API。jvm-sandbox 是指 JVM 沙箱容器,一种 JVM 的非侵入式运行期 AOP 解决方案。

    2.它的核心能力是什么?

    2.1 通用录制/回放能力

    (1).无侵入式录制 HTTP/Java/Dubbo 入参/返回值录制能力(业务系统无感知)

    (2).基于 TTL 提供多线程子调用追踪,完整追踪一次请求的调用路径

    (3).入口请求(HTTP/Dubbo/Java)流量回放、子调用(Java/Dubbo)返回值 Mock 能力

    2.2 快速可扩展API实现

    (1).录制/回放插件式架构

    (2).提供标准接口,可通过配置/简单编码实现一类通用插件

    2.3. standalone工作模式

    无需依赖任何服务端/存储,可以单机工作,提供录制/回放能力

    3.如何部署?

    3.1 Console部署

    setp1: 下载源码

    git clone https://github.com/alibaba/jvm-sandbox-repeater

    step2: 配置数据库信息 application.properties 及初始化数据库相关的初始化 sql 文件地址为:

    ./jvm-sandbox-repeater/repeater-console/repeater-console-dal/src/main/resources/database.sql

    step3: 在服务器上配置mvn命令

    如果是配置好了yum 源,可以使用以下命令直接安装maven

    yum install maven

    step4: 编译并启动console命令

    cd ./jvm-sandbox-repeater
    mvn install -DskipTests && nohup java -jar repeater-console/repeater-console-start/target/repeater-console.jar > console.log 2>&1 &

    3.2 Repeater部署

    setp1: 在上面的源码下载目录下

    cd ./jvm-sandbox-repeater/bin  && sh install-local.sh

    install-local.sh脚本内容如下:

    root@beta.ep.tx1 bin # more sh install-local.sh
    #!/usr/bin/env bash
    # repeater's target dir
    REPEATER_TARGET_DIR=../target/repeater
    # exit shell with err_code
    # $1 : err_code
    # $2 : err_msg
    exit_on_err()
    {
        [[ ! -z "${2}" ]] && echo "${2}" 1>&2
        exit ${1}
    }
    # package
    sh ./package.sh || exit_on_err 1 "install failed cause package failed"  #此处调用到了package.sh 脚本,下面会单独分析
    # extract sandbox to ${HOME}
    curl -s http://sandbox-ecological.oss-cn-hangzhou.aliyuncs.com/sandbox-1.2.1-bin.tar | tar xz -C ${HOME} || exit_on_err 1 "extract sandbox failed" #下载并解压sandbox文件包
    # copy module to ~/.sandbox-module
    mkdir -p ${HOME}/.sandbox-module || exit_on_err 1 "permission denied, can not mkdir ~/.sandbox-module"  #创建目录
    cp -r ${REPEATER_TARGET_DIR}/* ${HOME}/.sandbox-module  || exit_on_err 1 "permission denied, can not copy module to ~/.sandbox-module" #复制../target/repeater目录下的所有文件到上一个命令创建的目录下

    package.sh脚本内容如下:

    root@beta.ep.tx1 bin # more package.sh 
    #!/usr/bin/env bash
    # repeater's target dir
    REPEATER_TARGET_DIR=../target/repeater  #定义变量
    # exit shell with err_code
    # $1 : err_code
    # $2 : err_msg
    exit_on_err()
    {
        [[ ! -z "${2}" ]] && echo "${2}" 1>&2
        exit ${1}
    }
    # maven package the sandbox
    mvn clean package -Dmaven.test.skip=true -f ../pom.xml || exit_on_err 1 "package repeater failed."   #编译打包
     
    mkdir -p ${REPEATER_TARGET_DIR}/plugins  #创建目录
    mkdir -p ${REPEATER_TARGET_DIR}/cfg #创建目录
    cp ./repeater-logback.xml ${REPEATER_TARGET_DIR}/cfg/repeater-logback.xml   #拷贝文件到repeater目录
        && cp ./repeater.properties ${REPEATER_TARGET_DIR}/cfg/repeater.properties 
        && cp ./repeater-config.json ${REPEATER_TARGET_DIR}/cfg/repeater-config.json 
        && cp ../repeater-module/target/repeater-module-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/repeater-module.jar 
        && cp ../repeater-console/repeater-console-start/target/repeater-console.jar ${REPEATER_TARGET_DIR}/repeater-bootstrap.jar 
        && cp ../repeater-plugins/ibatis-plugin/target/ibatis-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/ibatis-plugin.jar 
        && cp ../repeater-plugins/java-plugin/target/java-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/java-plugin.jar 
        && cp ../repeater-plugins/mybatis-plugin/target/mybatis-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/mybatis-plugin.jar 
        && cp ../repeater-plugins/dubbo-plugin/target/dubbo-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/dubbo-plugin.jar 
        && cp ../repeater-plugins/redis-plugin/target/redis-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/redis-plugin.jar 
        && cp ../repeater-plugins/http-plugin/target/http-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/http-plugin.jar 
        && cp ../repeater-plugins/hibernate-plugin/target/hibernate-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/hibernate-plugin.jar 
        && cp ../repeater-plugins/spring-data-jpa-plugin/target/spring-data-jpa-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/spring-data-jpa-plugin.jar

    repeater 日志配置文件如下:

    repeater的日志路径为:~/logs/sandbox/repeater/repeater.log  --》这是由于logback.xml 配置决定的 repeater-logback.xml文件内容如下:

    root@beta.ep.tx1 bin #more repeater-logback.xml 
    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration scan="true" scanPeriod="10000">
        <appender name="REPEATER-FILE-APPENDER" class="ch.qos.logback.core.rolling.Ro
    llingFileAppender">
            <file>${user.home}/logs/sandbox/repeater/repeater.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">        <FileNamePattern>${user.home}/logs/sandbox/repeater/repeater.log.%d{y
    yyy-MM-dd}</FileNamePattern>
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
        <root level="info">
            <appender-ref ref="REPEATER-FILE-APPENDER"/>
        </root>
    </configuration>

    3.3 Sandbox 部署

    https://github.com/alibaba/jvm-sandbox
    1. JVM-SANDBOX(沙箱)实现了一种在不重启、不侵入目标JVM应用的AOP解决方案

    2. 操作步骤:下载最新版本的JVM-SANDBOX

    wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip
     
    # 解压
    unzip sandbox-stable-bin.zip
     
    # 进入沙箱执行脚本
    cd sandbox/bin
     
    #在~/sandbox/bin/sandbox.sh 启动的cfg目录下有一个sandbox.properties文件,目录为/root/sandbox/cfg
    sandbox.properties 文件里面指定了user_module=~/.sandbox-module
     
    # 挂载目标JVM进程,这里以console应用为示例来挂载,一条命令搞定:
    sh ~/sandbox/bin/sandbox.sh -p `ps -ef | grep "console" | grep -v grep | awk '{print $2}'` -P 12250  【这个命令会将console JVM进程进行挂载】

    ~/.sandbox-module目录下可以看到:

    root@beta.ep.tx1 .sandbox-module # tree
    .
    ├── cfg
    │   ├── repeater-config.json
    │   ├── repeater-logback.xml #这个repeater 启动后的日志配置文件
    │   └── repeater.properties  #把repeater.properties里面的ip and port 修改为为console 所在机器启动的ip and port 
    ├── plugins
    │   ├── dubbo-plugin.jar
    │   ├── hibernate-plugin.jar
    │   ├── http-plugin.jar
    │   ├── ibatis-plugin.jar
    │   ├── java-plugin.jar
    │   ├── mybatis-plugin.jar
    │   ├── redis-plugin.jar
    │   └── spring-data-jpa-plugin.jar
    ├── repeater-bootstrap.jar
    └── repeater-module.jar #repeater 模块的启动jar

    Sandbox 日志配置:

    #more sandbox-logback.xml 
    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration scan="true" scanPeriod="10000">
        <appender name="SANDBOX-FILE-APPENDER" class="ch.qos.logback.core.rolling.Rol
    lingFileAppender">
            <file>${user.home}/logs/sandbox/sandbox.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
    >
    <FileNamePattern>${user.home}/logs/sandbox/sandbox.log.%d{yyyy-MM-dd}
    </FileNamePattern>
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} %SANDBOX_NAMESPACE %-5level %msg%n</
    pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
     
        <root level="info">
            <appender-ref ref="SANDBOX-FILE-APPENDER"/>
        </root>
    </configuration>

    4.Console部署后的启动页面如下图所示

    欢迎关注【无量测试之道】公众号,回复【领取资源】
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、
    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:


    添加关注,让我们一起共同成长!

  • 相关阅读:
    记一次生产数据库"意外"重启的经历
    我爬了链家青岛市北3000套二手房得出一个结论
    我用Python实现了一个小说网站雏形
    Linux下安装 Python3
    Lepus搭建企业级数据库慢查询分析平台
    Lepus搭建企业级数据库全方位监控系统
    shell浅谈之九子shell与进程处理
    shell中测试命变量是否已经定义
    getline数据来源你的三种方式
    awk中的system和getline的用法
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15438675.html
Copyright © 2020-2023  润新知