关于后端:TarsBenchmark-服务性能压测利器

4次阅读

共计 3986 个字符,预计需要花费 10 分钟才能阅读完成。

作者|Eaton

导语| 在服务正式上线前,咱们须要确保服务上线后的可用性和稳定性,因而对系统的解决能力和稳定性进行全面的测试是十分必要的。压力测试是其中重要的一环,本文将介绍如何应用 TarsBenchmark 对 TARS 服务进行压测。

目录

  • 压测简介
  • TarsBenchmark 的应用

    • 装置部署
    • 服务压测
  • 总结

压测简介

在规范开发流程中,测试贯彻整个流程,包含但不限于单元测试、接口测试、集成测试、压力测试等。其中压力测试是服务上线之前的最初要害一环。

压测是通过一直给服务接口施加压力,测试服务接口性能,验证服务的解决能力和稳定性。咱们能够通过压测对服务的性能进行评估,比方服务最大并发量、能够同时服务用户数等。最初依据测试指标对服务正当部署、扩缩容,或是对发现的性能瓶颈进行优化。

TarsBenchmark 是基于 TARS 生态的一个压测工具,次要用于 TARS 服务的压力测试。并且反对与 TarsWeb 联合应用,提供敌对的操作界面对服务进行测试。上面将介绍如何应用 TarsBenchmark 对服务进行测试。

TarsBenchmark 的应用

TarsBenchmark 中蕴含 NodeServer, AdminServer 两个服务。

  • NodeServer: 为压测节点服务,用于压测的具体执行,对其余服务进行压测。能够在多个节点上部署,从而实现并行压测;
  • AdminServer: 用于治理压测节点,即治理 NodeServer,相似于 TARS 框架服务中的主控服务。

装置部署

咱们先来看看怎么装置 TarsBenchmark。

首先,下载 TarsBenchmark 源码

git clone https://github.com/TarsCloud/TarsBenchmark.git

TarsBenchmark 中提供了一键装置脚本,可能通过脚本间接将 TarsBenchmark 公布在 TarsWeb 上,在 TarsWeb 中集成压测性能,执行命令如下

./install.sh $WebHost $Token $AdminIP $NodeIP

其中,参数

  • WebHost 为 TarsWeb 部署地址;
  • Token 为在 TarsWeb 用户零碎中生成的 Token,可能在 http://${WebHost}/auth.html#/token 中新增并获取;
  • AdminIP 为要部署 AdminServer 的节点;
  • NodeIP 为要部署 NodeServer 的节点。

例如,TarsWeb 部署地址为 192.168.123.128:3000,并要将 AdminServer 部署在节点 192.168.123.128NodeServer 部署在节点 192.168.123.128,部署命令如下

cd TarsBenchmark
./install.sh 192.168.123.128:3000 abc123efg456ijk789 192.168.123.128 192.168.123.128

执行实现后,在 TarsWeb 上看到 benchmark 利用下蕴含服务 AdminServerNodeServer,即装置胜利,如下

服务压测

胜利装置后 TarsBenchmark 后,就能够在 TarsWeb 上对服务进行压测了。接下来咱们将以 HelloServer 服务为例,理解如何对服务进行压测。

首先,咱们须要定义 HelloServer 的接口

// Hello.tars
module Demo
{

interface Hello
{int testHello(string req, out string rsp);
};

};

进入压测界面

咱们关上 HelloServer 服务的治理界面,点击 Tab 栏的 接口调试 跳转到接口调试页面。如未上传服务 tars 接口文件,点击 增加 来上传。最初点击压测,即可关上压测界面。步骤如下图

点击 压测 后,跳转到压测界面,如下

能够看到函数列表中仅有一个咱们在接口中定义了的函数 testHello,点击页面中的入参构造和出参构造开展,如下图

能够看到,testHello 的入参和出参都是 string 字符串类型,和 HelloServer 接口文件中的定义是对应的。

接下来,点击右侧的 用例,就可能增加压测的测试用例了。

增加测试用例

点击 用例 后,会在 函数列表 下方显示该函数测试用例列表。如果是第一次增加,这里关上的列表会是空的,如下图

咱们点击 增加用例,在弹出窗口中给函数增加测试用例,传入参数为字符串 hello,如下

点击 确定 后,就能在用例列表中看到咱们增加的用例

点击 压测,会弹出压测配置界面,如下

咱们勾选 endpoints 中要测试的节点,这里 HelloServer 只部署了一个节点,因而只显示了一个。其余选项

  • 单 endpoint 连接数:即与后面勾选的每个 endpoint 服务建设的连接数,这里默认为 1,示意只建设一个连贯;
  • 单 endpoint 速率:即每个 endpoint 的申请速率,默认为 100,即每秒申请 100 次,能够通过增大该速率减少申请压力;
  • 压测时长:压测进行的工夫,默认为 20 秒。

配置结束后,点击 开始压测,即弹出压测进行界面,显示本次压测的指标,如下

这样咱们就通过 TarsBenchmark 实现了对 HelloServer 的压测。

进阶

后面例子中,咱们只介绍了 string 类型,并只是简略地增加了一个固定值作为测试用例。理论状况中,参数类型通常会比较复杂。TarsBenchmark 不仅反对 tars 协定中应用的数据类型,还针对局部数据类型反对随机参数生成。具体反对的数据类型能够参考官网文档 tars 通信协议。

对于罕用的 int, string, vector, map 这几个类型,增加用例的形式如下

// int
"a": 1
// string
"a": "string"
// vector<int>
"a": [1,2,3,4]
// map<string, string>
"a": {"test": "abc"}

特地地,为了躲避压测过程中的热 key 效应,防止后端申请落到同一台单机上,TarsBenchmark 反对对整型和 string 类型生成随机内容。目前反对两种随机形式:

  • 范畴随机值:如 "[1-100]",示意在随机抉择 1100 的数字;
  • 限定随机值:如 "[a,b,c,111]",示意在 a, b, c, 111 中随机抉择;

热 key 效应:局部业务场景下,后端会缓存热 key,将蕴含热 key 的申请定向到特定服务器单机上的服务,

上面咱们通过后面 HelloServer 的例子,来看看具体如何应用。

首先对于 HelloServer,咱们新增定义一个构造体 TestPacket,其中蕴含了类型为 int, string, vector, map 的四个字段 a, b, c, d。同时新增一个接口 testType,入参和出参都为 TestPacket 类型,如下

module Demo
{

struct TestPacket
{
    1 require int                 a = 0;
    2 require string              b = "";
    3 require vector<int>         c;
    4 require map<string, string> d;
};

interface Hello
{int testHello(string req, out string rsp);
    int testType(TestPacket input, out TestPacket output);
};

}; 

testType 接口的实现如下,能够看到,只是简略地打印日志,并将传入参数间接赋值给出参 output

int HelloImp::testType(const Demo::TestPacket & input, Demo::TestPacket & output, tars::TarsCurrentPtr current)
{
    TLOGINFO("HelloImp::testType| a:" << input.a
            << "| b:"       << input.b
            << "| c[0]:"    << input.c[0]
            << "| d[test]:" <<(input.d.count("test")? input.d.at("test") : "")
            << endl);
    output = input;
    return 0;
}

服务部署后,咱们须要先在 接口调试 页面从新上传 tars 文件。上传实现后,关上压测界面,即可在函数列表中看到 testHellotestType 两个函数。

接下来,和后面的示例一样须要增加测试用例。咱们点击 增加用例,会默认提供用例入参的构造,如下图

接下来咱们编写用例,这里对于整型和 string 类型,咱们应用后面提到的两种随机形式。用例如下

{
  "input": {
    "d": {
      "test": "hello",
      "a": "b"
    },
    "c": [
      2,
      32
    ],
    "b": "[test,hello,awsl]",
    "a": "[22-100]"
  }
}

最初进行压测,完结后查看服务的日志,如下图。

能够发现 ab 的值都是随机变动的,躲避了热 key 效应,这样压测过程的申请不会都落在同一服务器单机上,确保了压测后果的准确性。

总结

本文介绍了 TARS 服务的压测利器 TarsBenchmark,联合 TarsWeb,集成压测性能,不便开发者对 TARS 服务进行压测,验证服务的解决能力和稳定性。

TARS 能够在思考到易用性和高性能的同时疾速构建零碎并主动生成代码,帮忙开发人员和企业以微服务的形式疾速构建本人稳固牢靠的分布式应用,从而令开发人员只关注业务逻辑,进步经营效率。多语言、麻利研发、高可用和高效经营的个性使 TARS 成为企业级产品。

TARS 微服务助您数字化转型,欢送拜访:

TARS 官网:https://TarsCloud.org

TARS 源码:https://github.com/TarsCloud

Linux 基金会官网微服务收费课程:https://www.edx.org/course/bu…

获取《TARS 官网培训电子书》:https://wj.qq.com/s2/6570357/…

或扫码获取:

正文完
 0