王诚强,荔枝微课基础架构负责人。热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者。

本文根据2021年4月10日深圳站举办的【腾讯云原生技术开发日】 线下活动中,【荔枝微课】基础架构负责人“王诚强”关于“基于kubernetes搭建分布式压测系统”的演讲整理而成。

关注【腾讯云原生】公众号后台回复【lzwk】,可获得该演讲PPT。

大家好,今天想和大家分享的主题是基于kubernetes搭建分布式压测系统。 从背景、原理、实现、效果和未来方向5个方面讲解了荔枝微课在基于 kubernetes 搭建分布式压测系统上的实践和思考。

背景

荔枝微课作为一个高速发展的平台,面临着业务流量越来越大的冲击,特别是在去年疫情期间遭遇成倍流量增长的情况,是通过什么方式轻松渡过难关的?以我在荔枝微课落地云原生的经历来说,为什么我们要去实践云原生架构呢?只是因为是业内技术趋势吗?

其实这个是源于业务需要的,基础架构最重要的是稳定高效,在我最早接手并负责荔枝微课基础架构时,第一个季度的目标居然是应急响应,但我们都知道应急响应是治标不治本的,而要治本根治的话那么就要对改掉整个底层基础架构,这也是为什么荔枝微课会去做云原生实践的原因。

而在做这个实践的时候,我们还需要一个工具来衡量,那就是分布式压测系统。我们早期使用过本地压测、CVM伸缩组压测等方案,但是他们有着本地资源能力有限、伸缩组申请变更麻烦、伸缩速度较慢、压测脚本和报告管理混乱,经常无存档等缺点。于是我们采用了现在的基于 kubernetes的分布式压测方案。

分布式压测方案借助的三个技术

原理上来讲,需要借助三方面的技术:

编程技术

这里我们选择了我们团队较熟悉的python,不同团队可以有不同的选择;

压测引擎

我们用的是Locust,因为它是用python写脚本,其实也可以更换成jmeter之类的其它压测引擎,

kubernetes

主要利用它的服务编排技术来进行一个资源上的调度,经过我们测试,如果是普通集群,在需要弹出集群物理节点的情况下,全部就绪需要90秒,但是使用弹性集群,则可以压缩到15~20秒,所以推荐使用弹性集群。 整个技术框架原理上,压测节点分为主节点(master)、从节点 (slave)和监控节点(monitor)三种类型:

主节点

负责任务管理和数据采集聚合,本身不进行压测任务

从节点

负责压测任务

监控节点

从主节点将结果通过webhook传递给web服务处理端;

另外这些节点的状态、日志都会通过k8s的api进行采集。 根据压测任务里主从节点所申请的资源,集群将提前伸缩好节点,并将任务分配到不同节点,以达到动态提高压测能力的目的。

压测流程

右边为用户所感知到的过程,压测集中包括多个压测场景,通过编写压测脚本和配置压测参数的方式生成压测任务,并最终生成压测报告。

左边为python控制集群来生成任务的过程,具体是渲染生成不同任务的yaml文件后,生成相应的 job pod,然后持续将 pod 状态 、日志和压测曲线结果反馈在页面上。

整个过程所使用的技术并没有多高深,主要是在集群应用上的一种探索。

实现方法

使用yaml编排job服务,举例slave节点来说,主要是声明一个job类型的工作负载,将生成的任务从节点名以及任务生成的命名空间渲染上去,然后设置我们的压测基础镜像以及启动命令,这里我们用到了 kubernetes 的几个技巧,一个是通过hostAliases进行内部解析,这样可以对一些内网代理进行压测,另一个是声明申请资源CPU,以便在任务启动前提前伸缩好物理节点提供资源,还有一个是通过configmap挂载可执行文件,这样可以注入参数在变化的启动命令,而不需要重新构建镜像。

然后说一下我们的代码框架,主要是分为这几个模块:

  • k8s模块,提供一些如创建销毁命名空间或pod、查看状态、拉取日志等api功能;
  • 基础镜像,较为简单,主要安装了一些基础通用的库,然后开通了一些内部使用的端口;
  • 任务编排声明文件,包括了我上面说的几种节点服务;
  • 任务核心方法类,主要是将上述的流程代码实现,提供了一些方法,这里限于篇幅就不具体展开了。

然后最后我们来看下效果:

这是我们压测系统的管理界面,现在看到的是压测集,方便集中管理。

这是创建压测场景,并基于该场景编写python压测脚本,并可设置我们的任务参数。

这是压测任务详情页,可以看到压测参数、状态以及节点情况和查看日志。

这是压测过程中实时生成的图表,可以基于图表情况进行分析。

未来改进方向

  • 引擎类型或版本允许选择更换;
  • 批量定时分阶段的自动压测计划;
  • 将所有涉及资源图表关联进来,形成更为详尽的报告;
  • 任务资源限制与使用审批;
  • 报告分析结论存档,相关问题追踪处理结果存档;
  • 相同条件的多次压测结果对比展示;
  • 使用更为云原生的方式管理任务的生命周期;

Q&A环节

Q:这个压测系统对于测试人员有什么要求吗?

A:需要会使用编程语言编写压测脚本,并有一定的分析思考能力,通过进一步封装的话也可以降低这部分的要求,但编程的话能力会更强更灵活,比如一些复杂条件或者像要动态使用账号的情况。 ## Q:你们的压测会需要多少资源呢,是怎么控制的呢?

A:我们这套系统,是根据任务需要自动申请资源的,任务结束时也就自动销毁了,不会出现说一直占用消耗资源的情况。 ## Q:这个对于服务在哪个云有要求吗?

A:虽然我刚才说到的集群是TKE的,但kubernetes作为一项开源的、通用的标准化技术,只要能提供该服务的云理论上都可以。 ## Q:你们压测会压生产吗?大概多久压一次?脏数据怎么办?

A:我们压测会在尽量不影响用户的情况下定期进行线上压测,大概是每月一次,新项目上线前也会在测试环境压,也有专门的压测集群来压,脏数据的话也是要清的,我们有机器人用户,可以针对这些用户进行脏数据清理。 ## Q:我们公司已经有用几台服务器来压测,想问下为什么要用kubernetes集群呢?

A:一方面我们当时刚好在做集群方面的实践,另一方面呢,也考虑了集群资源管理上的优势,比如资源隔离或限制,因为有的时候测试是不太清楚自己需要多少资源的,不加限制的话有的时候会占用比较多资源,还有就是任务状态、日志的收集还有就是我前面提到的一些集群的特性。

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统相关推荐

  1. jmeter 高并发测试报告_Windows下JMeter分布式压测环境搭建

    JMeter是Apache组织开发的开源项目,设计之初用于性能测试,同时它在实现对各种接口的调用方面做得比较成熟,因此,常被用于接口功能测试和性能测试.它能够很好的支持各种常见接口,如HTTP(S). ...

  2. 基于Kubernetes的分布式压力测试方案

    压力测试是用来检测系统承载能力的有效手段.在系统规模较小的时候,在一台空闲的服务器上使用[ab],[wrk],[siege]等工具发起一定量的并发请求即可得到一个初步的测试结果.但在系统复杂度逐步提高 ...

  3. 荔枝微课如何引流?荔枝微课如何操作?荔枝微课怎么增加人气?

    荔枝微课是一个非常稳定的平台,我们在荔枝微课上开课也可以赚取相关的收益,今天就和大家说说荔枝微课如何去引流.运营以及荔枝微课如何操作? 一.定位 引流操作前,得先明确自己的领域,当你的内容可以给用户解 ...

  4. 【学习笔记】《基于φ-OTDR的分布式扰动传感系统定位算法研究-北交-通信与信息系统-吴》重点笔记

    目录 一.绪论 1.1 引言 1.2 分布式光纤传感技术 1.2.1 基于瑞利散射的分布式光纤传感技术 1.2.2 基于拉曼散射的分布式光纤传感技术 1.2.3 基于布里渊散射的分布式光纤传感技术 1 ...

  5. 性能测试搭建Jmeter分布式压测与监控

    对于运维工程师来说,需要对自己维护的服务器性能瓶颈了如指掌,比如我当前的架构每秒并发是多少,我服务器最大能接受的并发是多少,是什么导致我的性能有问题:如果当前架构快达到性能瓶颈了,是横向扩容性能提升大 ...

  6. 搭建 Apache Jmeter 分布式压测与监控

    1.前言 对于运维工程师来说,需要对自己维护的服务器性能瓶颈了如指掌,比如我当前的架构每秒并发是多少,我服务器最大能接受的并发是多少,是什么导致我的性能有问题:如果当前架构快达到性能瓶颈了,是横向扩容 ...

  7. JMETER性能测试从入门到精通高级篇 - 分布式压测部署之负载机的设置(详解教程)

    1.简介 千呼万唤始出来,这一篇感觉写了好久,总想写的清楚明白简洁,但是还是洋洋洒洒写了好多,希望大家喜欢吧!本来打算将这一篇文章是放在性能测试中讲解和分享的,但是有的童鞋或者小伙伴们私下问的太多了, ...

  8. 基于TCPCopy的仿真压测方案

    基于TCPCopy的仿真压测方案 一.tcpcopy工具介绍 tcpcopy 是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的 ...

  9. 新浪微博百万用户分布式压测实践手记

    作者:聂永,新浪微博技术专家.负责移动端消息应用架构底层基础设施维护和优化等,目前致力于推广性能驱动模式推动系统健康发展的理念. 本文为<程序员>原创文章,未经允许不得转载,更多精彩文章请 ...

最新文章

  1. 【iOS官方文档翻译】iOS蓝牙的基本概念
  2. 吸引:由《你的知识需要管理》编辑过程想到的
  3. tomcat的部署及session绑定反代
  4. github 克隆项目过慢
  5. C语言 串口通知消息,编程模式·观察者模式、事件通知、消息队列三者区别
  6. 变量是否在数组内c语言,函数内创建的数组在调用后,是否就不存在
  7. php 单选框选中事件,html中的checkbox和radio事件选择用法详解
  8. 理查森外推法 matlab,数值代数–理查森外推法.doc
  9. 用scrapy框架爬虫时遇到的错误ValueError: Missing scheme in request url: //scpic3.chinaz.net/Files/pic/pic 9/2021
  10. JavaScript学习(二十)—DOM中常用的属性
  11. linux和windows下安装python拓展包及requirement.txt安装类库
  12. asp.net页面生命周期之页面的终结阶段
  13. 766.托普利茨矩阵(力扣leetcode) 博主可答疑该问题
  14. NMS非极大值抑制原理——目标检测
  15. 计算机类毕业设计选题推荐 springboot+vue宠物医院管理系统 java宠物预约挂号系统 微服务 宠物挂号系统 宠物医院预约挂号系统 springboot宠物诊所
  16. ffmpeg 分割和合并
  17. 6个让你10T硬盘立马爆掉的资源网站,再也不需要去百度上找资源了
  18. 中国Top20天使投资机构和中国Top20VC投资机构
  19. 计算机图形学实验二交互式绘制多边形
  20. 管理者神功之“九”阴真经

热门文章

  1. ffmpeg_Cropping Video(剪裁视频)
  2. 消防工程师答题做试题模拟真题微信小程序,margin:25px 50px 75px 100px;
  3. 网上药店需要戴上“紧箍咒”
  4. matlab习题及答案,MATLAB习题及答案
  5. 怎样查看计算机主题,快速查看win10电脑中的主题壁纸保存位置的方法
  6. 洛谷P1710地铁涨价
  7. Detectron2迷幻问题解答 - 持续连载
  8. 解决Linux 系统,出现不在sudoers 文件中,此事将被报告的问题
  9. XigmaNAS(原 NAS4Free) 发布 11.2.0.4.6625 版本
  10. [笔记]Centos/Ubuntu/Windows/Docker 安装使用Aria2及Aria2基本使用