共计 2599 个字符,预计需要花费 7 分钟才能阅读完成。
王诚强,荔枝微课基础架构负责人。热衷于根底技术研发推广,致力于提供稳固高效的基础架构,推动了荔枝微课集群化从 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:一方面咱们过后刚好在做集群方面的实际,另一方面呢,也思考了集群资源管理上的劣势,比方资源隔离或限度,因为有的时候测试是不太分明本人须要多少资源的,不加限度的话有的时候会占用比拟多资源,还有就是工作状态、日志的收集还有就是我后面提到的一些集群的个性。
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!