栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

当Istio遇到mall之性能测试篇

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当Istio遇到mall之性能测试篇

Istio为应用部署增加了很多功能,包括流量策略、可观察性和安全通信。但是,强行在集群中添加Istio是有代价的。虽然Istio 基准性能测试提供了在实验环境下Istio的极限性能,但是为了判断Istio是否适合您的情况并做出明智的决定,我们认为使用广泛落地实践的典型电商业务场景进行的性能测试显得更为重要。

为了模仿真实的业务场景,我们挑选了mall-swarm项目作为性能测试基准项目。

mall-swarm项目是mall项目的微服务化版本,是一套比较典型的电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署,Github star 47.7k。

Istio选择1.6版本,并使用SolarMesh进行安装。SolarMesh是一款基于Istio的云原生流量监管平台,不仅提供应用网络观测能力,还有方便快捷的策略配置、安全可靠的Istio使用体验。同时,使用SolarMesh能快速安装Istio,并且在后续不断接入或移除Sidecar做对比试验的时候起到重要的作用。

首先准备1个K8s集群共有4个节点:

  • 1个master
  • 3个node
NAME          STATUS                     ROLES    AGE    VERSION
10.10.13.34   Ready,SchedulingDisabled   master   280d   v1.15.0
10.10.13.35   Ready                      node     280d   v1.15.0
10.10.13.36   Ready                      node     280d   v1.15.0
10.10.13.37   Ready                      node     280d   v1.15.0

每个节点的机器的主要配置如下:

  • CPU: 4核 Intel® Xeon® CPU E5-2690 v2 @ 3.00GHz
  • 内存: 8G

istio强依赖于kubernetes,云原生级服务更有利于istio的功能施展,先将mall-swarm项目改造成云原生微服务,也就是所有组件都部署到kubernetes的环境中。

$ kubectl get po -n mall
NAME                                       READY   STATUS    RESTARTS   AGE
elasticsearch-77d9b98ff6-t8xbq             1/1     Running   0          44h
mall-admin-deployment-758dcf6-4dqg4        1/1     Running   0          44h
mall-admin-web-686f5457bf-ltdgp            1/1     Running   0          44h
mall-auth-deployment-d6fcff7f6-crqdr       1/1     Running   0          44h
mall-gateway-deployment-945d96bf5-gmjh8    1/1     Running   0          44h
mall-monitor-deployment-868dd95495-pwtsc   1/1     Running   0          44h
mall-mysql-5bc5d5cf68-k5klr                1/1     Running   0          44h
mall-portal-deployment-699b6858cd-bwdm7    1/1     Running   0          44h
mall-search-deployment-5bc4cd9b5b-glk2f    1/1     Running   0          44h
mongodb-6d57cbb84b-d66vr                   1/1     Running   0          44h
rabbitmq-768fd8c669-rk67t                  1/1     Running   0          44h
redis-5b95b8c54b-l4l8w                     1/1     Running   0          44h

# 为了方便暴露了一些nodeport端口
$ kubectl get svc -n mall
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)              AGE
elasticsearch       ClusterIP   10.70.152.167           9200/TCP,9300/TCP    44h
mall-admin          ClusterIP   10.70.96.35             8080/TCP             44h
mall-admin-web      NodePort    10.70.44.19             8080:23399/TCP       44h
mall-auth           ClusterIP   10.70.60.16             8401/TCP             44h
mall-gateway        NodePort    10.70.154.213           8201:30201/TCP       44h
mall-monitor        ClusterIP   10.70.61.157            8101/TCP             44h
mall-mysql          NodePort    10.70.74.117            3306:33066/TCP       44h
mall-portal         ClusterIP   10.70.139.253           8085/TCP             44h
mall-search         ClusterIP   10.70.160.135           8081/TCP             44h
mongodb             ClusterIP   10.70.58.47             27017/TCP            44h
rabbitmq            ClusterIP   10.70.111.169           15672/TCP,5672/TCP   44h
redis               ClusterIP   10.70.194.34            6379/TCP             44h

工具与方法

测试工具选用jmeter。此次主要的验证为:在高并发(一定会超出极限)的场景下,有无istio对服务的影响。所以选择 200QPS 持续120s 的请求,分五次验证取平均的做法,对mall-swarm项目的商品推荐接口进行压力测试。

测试

未接入sidecar:

开始前pod的指标

CPU: 21m

内存: 1843Mi

CPU使用峰值平均数是 1609.2m 成功响应的平均时间为1169.2ms 平均error率是32.1%。

接入Sidecar

SolarMesh提供了Namespace级别的自动注入能力,只需要在SolarMesh的页面上开启自动注入就可以了。

开启自动注入之后,Sidecar将自动注入到指定Namespace下的所有Pod中。

$ kubectl get po -n mall
NAME                                       READY   STATUS    RESTARTS   AGE
elasticsearch-77d9b98ff6-t8xbq             2/2     Running   0          47h
mall-admin-deployment-758dcf6-4dqg4        2/2     Running   0          47h
mall-admin-web-686f5457bf-ltdgp            2/2     Running   0          47h
mall-auth-deployment-d6fcff7f6-crqdr       2/2     Running   0          47h
mall-gateway-deployment-945d96bf5-gmjh8    2/2     Running   0          47h
mall-monitor-deployment-868dd95495-pwtsc   2/2     Running   0          47h
mall-mysql-5bc5d5cf68-k5klr                2/2     Running   0          47h
mall-portal-deployment-699b6858cd-bwdm7    2/2     Running   0          47h
mall-search-deployment-5bc4cd9b5b-glk2f    2/2     Running   0          47h
mongodb-6d57cbb84b-d66vr                   2/2     Running   0          47h
rabbitmq-768fd8c669-rk67t                  2/2     Running   0          47h
redis-5b95b8c54b-l4l8w                     2/2     Running   0          47h

开始前Pod的指标 CPU: 30m 内存: 1869Mi

CPU使用峰值平均数是 1769.4m 成功响应的平均时间为1394.9ms 平均error率是9.4%。

总结

通过对比有无Sidecar的实际情况数据,我们可以发现:

在高并发压力测试的结果中,接入Sidecar的服务CPU使用相比没有接入Sidecar的服务有10%的CPU使用增长。

接入Sidecar的服务接口平均响应时间相比没有接入Sidecar的服务接口大约有19.3%的性能损失。

在没有Sidecar接入的情况下,接口出现高达32.1%的error率,在有Sidecar接入的情况下,这种error率被显著降低到9.4%。

综上所述,使用了Istio的服务确实会出现一些性能上的损耗,但是Sidecar一定程度下会保护接口,免于在高压环境下因Tomcat无法承受而大量地抛弃请求。而且此次测试是单机验证(每个服务只有一个replica),使用标准的Istio,如果采取一些调优方案,或许还会有一个比较大的改善空间。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/334395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号