Kubernetes下web服务的性能测试三部曲之二:纵向扩容

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 在前文单实例的基础上,对服务做横向扩容,再用Jemeter验证扩容效果

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

本篇概览

实战步骤

  • 今天的实战用以下几种方式提升单个Pod性能:
  1. 内存资源从256M提升到512M;
  2. 内存资源从512M提升到1G;
  3. 内存资源从1G提升到2G;
  4. CPU资源从0.1提升到1;
  5. CPU资源从1提升到2;

注意:每次纵向扩容之前,需要停止和删除原有的deployment和service,扩容后,第一次测试的成绩请丢弃,因为JIT在理论上对结果有影响;

如何停止和删除原有的deployment和service

  • 执行以下命令即可先删除service,再删除deployment:
kubectl delete service tomcathost && kubectl delete deployment tomcathost

内存资源从256M提升到512M

  • 打开上一章我们搭建web服务时创建的tomcat.yaml文件,内容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcathost
spec:
  replicas: 1
  template:
    metadata:
     labels:
       name: tomcathost
    spec:
     containers:
     - name: tomcathost
       image: bolingcavalry/k8stomcatdemo:0.0.5
       tty: true
       ports:
       - containerPort: 8080
       resources:
         requests:
           memory: "256Mi"
           cpu: "100m"
         limits:
           memory: "256Mi"
           cpu: "100m"
  • 如上所示,找到resources节点下的两个memory节点,将值从"256Mi"改成"512Mi";
  • 执行AB测试:
ab -n 20000 -c 100 http://192.168.119.153:30008/getserverinfo
  • 得到的结果如下:
Concurrency Level:      100
Time taken for tests:   68.527 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      3700000 bytes
HTML transferred:       1040000 bytes
Requests per second:    291.86 [#/sec] (mean)
Time per request:       342.635 [ms] (mean)
Time per request:       3.426 [ms] (mean, across all concurrent requests)
Transfer rate:          52.73 [Kbytes/sec] received
  • 接下来用JMeter压测,得到结果如下:
# Samples Average Median 90% Line 95% Line 99% Line Min Max Error % Throughput Received KB/sec Sent KB/sec
20000 489 294 1100 1608 3696 0 10899 0.00% 188.8/sec 30.61 25.45
  • 如上所示,内存翻倍后对吞吐量的提升非常明显;

继续提升内存

  • 继续修改tomcat.yaml的内存参数,记录下来每次AB和JMeter的测试结果,这里就不赘述了,稍后在表格中统一给出;

升级CPU

  • 继续修改tomcat.yaml,将内存恢复为256Mi,将CPU从100m改成1000m,也就是从0.1CPU改为1CPU,然后再从1CPU改为2CPU,分别记录下来每次AB和JMeter的测试结果;

小结纵向扩容

  • 下面的表格将前面每次修改后的测试结果列举出来了:
内存 CPU 吞吐率(AB) 吞吐率(JMeter)
256M 0.1 33.77 31.21
512M 0.1 291.86 188.80
1G 0.1 326.19 324.58
2G 0.1 340.61 340.10
256M 1 81.36 80.61
256M 2 86.62 82.11
  • 从上述数据可以看出:
  1. 内存扩容在1G之前是有显著提升的,但过了1G提升就不明显了;
  2. CPU资源增大到原有的10倍后,吞吐量有3倍左右提升,继续加倍CPU资源,也无法带来明显提升;
  • 这里要注意的是此次测试的后台代码很简单,并未涉及RPC、数据库、缓存等,数值不能作为生产环境的参考,因为每个实际的业务都有其自身的特征,此处仅提出一种扩容和验证扩容效果的手段;
  • 至此,纵向扩容的测试就完成了,接下来的章节,咱们一起测试一下横向扩容的效果;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
28天前
|
安全 测试技术 网络安全
如何在Python Web开发中进行安全测试?
如何在Python Web开发中进行安全测试?
|
28天前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
33 4
|
2月前
|
XML JSON 数据安全/隐私保护
Web服务
【10月更文挑战第18天】Web服务
60 9
|
9天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
59 19
Selenium IDE:Web自动化测试的得力助手
|
11天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
88 17
Selenium:强大的 Web 自动化测试工具
|
10天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE是开源的Web自动化测试工具,适用于Chrome、Firefox等多款浏览器。它提供简单的录制与回放功能,用户可通过录制浏览器操作自动生成测试脚本,支持导出为多种编程语言,便于非专业测试人员快速上手,有效提升测试效率与质量。
77 6
Selenium IDE:Web自动化测试的得力助手
|
2月前
|
XML JSON 安全
Web服务是通过标准化的通信协议和数据格式
【10月更文挑战第18天】Web服务是通过标准化的通信协议和数据格式
165 69
|
28天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
1月前
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
47 3
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
60 3
下一篇
DataWorks