技术干货 | 应用性能提升 70%,探究 mPaaS 全链路压测的实现原理和实施路径

简介: 全链路压测方案下,非加密场景下至少有 70% 的性能提升,加密场景下 10%的性能提升,并在 MGS 扩容完成后可实现大幅的性能提升,调优的结果远超预期。

封面图0827.jpg

业务背景

随着移动开发行业的步入存量时代,App 整体架构的负载能力、以及各个环节的优化逐步成为各个开发者们关注的重点。

压力测试就是实现以上功能的主要方案。一般可以基于压力测试:

  • 测试后端业务的负荷瓶颈;
  • 评估整体架构性能;
  • 业务稳定峰值;
  • 排查出各节点的薄弱关系;
  • 优化系统资源;
  • 避免短板效应;

为运营提供准确的用户承载量作为作证,避免活动/新应用的上线带来的突发流量造成的用户体验不佳。

今天,我们将为大家介绍全链路压测方案的是实现原理和实施路径。

全链路压测与原理

通常我们可以简单的把负载性能=单机性能*机器总量这一公式套用到预估的方案中,但是在实际的场景下,常常会涉及到大量的业务节点,如DNS,网关,数据库等环节,都有可能是导致整体业务性能的瓶颈,因而实际服务能力可能与预期存在较大误差。

一般用户会通过 loadrunner 等方案实现生产环境下的服务器性能压力测试,但是在 mPaaS 应用中,复杂的部署无法通过 MGS 网关,高昂的费用等难点应运而生,为了解决这些痛点。

mPaaS 团队这边依据多位客户的述求,提供出 MGS 全链路压测方案。

区别于以往的测试方案,全链路压测方案中最大的不同是视角上的不同,站在客户端角度上作为切入点,将整个服务端链路作为一个黑盒,以真实的 request 和 response 作为评估的依据,模拟真实的业务请求,真实的数据流量,真实的用户习惯,来达到得出尽可能真实的评估结果。

链路梳理

在一个标准的数据链路中,一般为以下模型

1.png

而在全链路压测中,我们把整体的服务端实现视为一个黑盒,因而我们所需关注的焦点聚焦在前半段,重点可以概括为:

1.客户端请求构建;

2.客户端请求发送并通过 MGS 网关;

3.客户端解析 MGS 网关返回的 response 并做出正确处理;

4.实现高并发的客户端请求集群。

以上再次梳理,可以归纳出以下难点

难点1 客户端请求构建

mPaaS 移动网关 RPC 通讯是在 HTTP 协议基础之上的实现的一种标准化接口方式,在复用 HTTP 请求标准的前提下,定义了一套数据交换格式,采用Header,Body 作为实际区分,可以近似理解为,通过Header 中的Operation-Type做为真实api指向,将body部分依据规则封装后进行转发。

在该步骤中,我们以 JMeter 作为实现方案,Jmeter 灵活的脚本特性可以良好的实现客户端的真实请求模拟。

难点2 数据加解密

mPaaS 移动网关 RPC 请求特有的数据加密方式构建请求中比较复杂的部分。客户侧已有的测试方案不能覆盖这部分能力,因此往往选择关闭网关服务端验签和加密功能实施压测。

这种方式的隐患在于无法估计加解密给网关服务器带来的计算压力。

根据经验,不同的加解密算法配置,对网关的吞吐量有 20% ~ 40% 影响。在此阶段,由金融线 SRE 团队基于用户生产环境定制开发的 JMeter 插件 MGSJMeterExt,该插件逆向实现了请求体的加密和解密过程,使得压测脚本的编排可以包括加密部分。

难点3 请求签名构建

mPaaS 移动网关 RPC 请求特有的签名校验机制也比较特殊。同数据加解密一样,目前客户侧无方案可覆盖这部分能力,往往选择关闭接口验签进行测试。同样借助 MGSJMeterExt,可以实现在 JMeter 中实现对报文的正确签名,并通过服务端校验。

难点4 压测集群环境部署

对于压测来说,需要的重点侧重于真实,真实的流量入口,真实的并发数量,才能得出真实的结果,而自行实现压测环境,高昂的集群部署费用,也成了不必要的开支.

因而我们推荐用户采用阿里云 PTS 作为压测平台,基于其他方案,具有部署简易,支持 Jmeter 脚本,流量真实等优势,也可为用户提供更为详实的压测报告。

概览

以上模型简单可以归纳为以下结构

2.jpeg

全链路方案及实施

Part1 前期准备及调研

在前期阶段,目标是为了为实际的压测提供相关的准备和数据支撑,确立压测目标和整体方向。

1.1 目标及数据准备

1.客户需要明确自身的压测目标和压测目的,基于压测目标,参照以往的运营数据,给出涉及到的具体业务类目和可能的用户行为习惯,在整体的业务中各习惯所带来的相关比重关系。

1.2 客户端准备

1.客户端这边需要依据相应的业务目标,整理出在客户端实现中可能涉及到的接口和数据流程,如是否包含前置步骤,如登陆等,是否包含强制的步骤,如首页的刷新等,通过抓包等收集该步骤中真实的 request 和 response,以及确定符合预期的值条件。

2.该步骤涉及业务结构的不同,亦可由服务端接口端完成该准备。

1.3 服务端准备

1.服务端这边依据1.2中统计的相关接口,做好相关的数据挡板,避免导致测试数据污染真实数据库。

2.由于在 mPaaS 全链路压测中,服务端被视为黑盒,因而需要实现对于服务端各业务的性能指标的监控,为后期的服务端调优作为依据。

1.4 MGSJMeterExt 插件准备

由于 MGSJMeterExt 需要依据实际网关环境进行定制开发,需要用户提供以下数据:

1.工作空间相关环境数据

2.加密算法和公钥

Q&A答疑

Q:如何实现压测脚本?

A:会由我们的专家团队和现场同学完成简单场景下的压测脚本培训,在实际的场景下,可能涉及到业务的多个环节,如登陆 token 的获取,一些明确的前置步骤,这一类由于涉及到复杂的业务场景,需要客户在阿里专家团队的协助下自行完成。

Q:为什么是全链路的?

A:虽然我们的压测脚本是基于客户端逻辑实现的,但是我们实际上是模拟了真实的数据请求,也会确认服务端的返回是否达到预期,涉及到整个完整的数据链路及节点。

Q:链路的指标如何实现埋点?

A:压测方案的对象是基于黑盒的,通过系统的 pts 指标,请求参数与返回的回报率,校验符合预期结果的成功率,来确认基于用户角度下的整个架构所能负载的性能,对于一些后端的指标,由于不同的客户采用的服务端的架构存在不少的差异,对于后端这类指标,一般对应的服务商都能提供相关的监控方案,也无需 mPaaS 这边进行处理。

Q:为什么使用 PTS?

A:mPaaS 团队实际上提供的是 MGS 的通讯解决方案,协助客户完成 PTS脚本的编写,并不强制使用 PTS,只需要能提供相关的 Jmeter 集群部署环境即可,且 PTS 相关资源需要用户自行采购,但目前 mPaaS 团队基于多个案列评估,相对而言,使用 PTS,有更高的性价比,且能提供更为符合预期的压测环境,完整的压测报告,故推荐用户使用 PTS 进行压测。

Q:有没有什么详细的标准,如2c4g情况下,或者4c8g下,应该达到怎样的性能指标?

A:压力测试本身即是为了明确在相关的系统资源下,可以达到的性能指标,由于服务端的架构不同,实际业务涉及的流程节点不同,不同环境下的性能存在着巨大的差异,这些即是使用压力测试的目的,需要通过压测才能明确真实的指标和评估各个节点的实际资源耗时。

Part2 Jmeter开发与脚本改造

我们归纳出了 MGS 通讯方案的特殊侧重点,因而我们需要在 Jmeter 完成这几点的改造

2.1 Header 改造

3.jpeg

在 Header 中,我们需要注意以下几点:

1.MGS 网关协议是依赖于一些 Header 字段的,因而需要确保网关参数齐全。

2.部分参数为固定值,可直接写死,相关的配置可以参考控制台下载的配置文件。

3.如业务有其他的 Header 依赖如 cookide 等业务上需要使用,也可直接添加,MGS 网关不会对 Header 信息进行过滤。

2.2 Url改造

4.jpeg

  

在 URL 中,我们需要注意以下几点:

1.URL 的实际指向应为 MGS 网关,而非实际的业务服务器,相关的配置可以参考控制台下载的配置文件。

2.目前所有到 MGS 网关的请求均为 post,如有 get 请求,也是由 MGS 进行转发时变为 get 的,在与 MGS 的通讯中也为 post。

3.Body 部分如无特殊需求建议如图所示即可。

2.3 Request改造

5.jpeg

在 Request 中,我们需要注意以下几点:

1.这里的加密/验签,依赖于 MGSJMeterExt 文件,需要引用该文件。

2.一般情况下仅需修改 //config 部分即可。

3.下述部分一般为统一方案,主要为了实现加密和验签,无需修改。

2.4 Response改造

6.jpeg

在 Response 中,我们需要注意以下几点:

1.在这里考虑到施压机性能,不会影响到服务端的评估能力,因此若无数据二次使用需求,或结果判断需求,这里可不写

2.如有相关需求,可在这里完成 Response 回参的二次处理

Part3 实际压测

大致的步骤可归纳为:

7.jpeg

3.1 PTS 及脚本性能调优

阿里云性能测试服务(PTS)提供了方便快捷的云端压测能力,在本次压测服务中,借助 PTS 实现互联网压力流量的输入。

有意思的点在于,加解密计算不仅给网关带来计算压力,也会给施压机带来了一定的计算压力。因此,第一个版本的插件和压测脚本在实施前,我们首先进行了针对试压机进行了的“压力测试”。

第一轮基础测试

PTS 试压机配置:

1.PTS 单 IP 单元配置

2.并发数 500(单机最高并发)

3.固定压力值流量模型

4.两分钟压测时常

从回收的压测报告看,TPS 结果并不高,但返回 RT 值并不高:

8.png

接下来观察施压机的性能表现,可以看到施压机的 CPU 使用率水位一直比较高,因此有理由怀疑加密计算压力给施压机的压力释放带来比较大的影响。

9.png

通过对重复内容加密结果的缓存,大幅降低了计算压力;同时,为了避免缓存设计引起内存问题,对缓存上限进行了限制。

第二轮测试

与第一轮的测试配置完全相同,仅更换了优化后的加密插件。从回收的测试报告看,场景 TPS 有 75% 的提升:

10.png

从施压机 CPU 性能看有一个明显的优化。

11.png

第三轮测试

有了第一轮的摸底和第二轮的优化情况,第三轮测试在配置上使用两台施压机满负荷进行压测,观察压测结果:

12.png

从结果看,压测脚本和编排过程符合预期,可以在客户生产环境进行正式的 PTS 云端压测。

3.2 生产环境压测摸底

在正式压力测试开始,进行了若干轮小规模的压力测试,观察后端系统的工作状态是否符合预期。摸底期间发现如下问题:

问题一:Nginx流量转发不均

从MGS容器的日志表现上看,部分容器始终获取不到任何请求,经过排查发现该问题由三个原因导致:

1)DMZ区Nginx转发配置少配了一个MGS容器IP;

2)DMZ区到每一个MGS容器IP的网络策略均需要开通访问权限;

3)Nginx转发规则设置为iphash,在单IP来源的测试情况,流量仅能转发到一个容器上。

配置了正确的IP列表、开通了网络权限以及修改转发规则后,该问题得到解决。

问题二:特定 MGS 容器基础 CPU 负载过高

前期测试发现,有一台 MGS 容器(mpaasgw-7)在静默状态下的 CPU 负载在25%,不符合预期。

登录容器发现存在一个 JPS 进程,消耗了大量的 CPU。怀疑是前期调测阶段调用后未正常释放。杀掉JPS进程后问题解决,为了避免其他问题,一并重启了该容器

注:JPS, Java Virtual Machine Process Status Tool),是java提供的一个显示当前所有java进程pid的命令,参见:https://docs.oracle.com/javase/7/docs/technotes/tools/share/jps.html )。

问题三:CoreWatch 监控平台无法访问

CoreWatch 控制台无法访问,浏览器中报 502 错误。重启 CoreWatch 容器后,页面可以加载,但始终处于加载中状态。

http://corewatch.*.com/xflush/env.js 一直处于pending状态。排查发现 ALB 实例监听配置存在错误,修正后问题得到解决。

3.3 生产环境压力测试&总结

在解决了 3.2 中的所有问题后,系统具备了压力测试的条件,正式压测会针对“加密场景”和“非加密”场景分别做压力测试。

由于生产数据不做外泄,以下仅对遇到的问题进行一些例举。

“加密”情况下测试

1.压测时发现在并发数 500 左右即出现 TPS 不做增长,代表着可能到达了瓶颈。

2.观察 MGS 网关容器的负载情况,整体 CPU 负载达到极限。

3.同一时间段的 MCUBE 容器 CPU 负载情况健康,其他性能指标(IO、网络等)也处于健康状态。

4.从上述情况看,加密场景下,主要性能瓶颈在 MGS 网关上,根据经验及流程分析,主要性能压力由报文加解密过程中的密集计算所带来。要解决这一瓶颈,需要对 MGS 容器进行扩容。

“不加密”情况下的测试

1.TPS 的增长在并发达到 1000 左右时停止增长。一般情况下,这种情况说明触及了系统容量的瓶颈。

2.观察 MGS 网关容器的负载情况,与加密情况下的情况不同,此时整体 CPU 负载均不高。

3.与此同时,根据网络组的反馈:压测期间互联网到 DMZ 区的 TCP Session数量是 DMZ 区到内网区的3~4倍,交易内网段的防火墙 CPU 压力较高。

4.结合上述三种表现,怀疑触及网络层面瓶颈。根据现场情况发现,DMZ 区 Nginx 转发到内网时没有采取长连接保持策略。修改Nginx配置,添加keepalive 1000配置,重新进行第二轮测试。

关于参数Keepalive说明:默认情况下,Nginx访问后端都是用的短连接(HTTP1.0),每一个新的请求,Nginx 都会新开一个端口和后端建立连接,后端执行完毕后主动关闭该链接。Keepalive参数会告知Nginx和后端服务器之间缓存的长连接数量,当新的请求进来时,可直接复用TCP连接,减少建立TCP连接所带来的性能影响。参见:http://nginx.org/en/docs/http/ngx_http_upstream_module.html。

总结

在上述问题优化后,非加密场景下至少有 70% 的性能提升,加密场景下 10%的性能提升,并在 MGS 扩容完成后可实现大幅的性能提升,调优的结果远超预期。

本文作者:阿里云 mPaaS TAM 团队(王泽康,北默,东雷,荣阳)

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

投稿指南 | 云计算领域最前沿资讯、技术,期待您的专业解读!

我们是谁?CSDN云计算是CSDN旗下官方账号,提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、机器学习、智能算法等相关云计算观点、云计算技术、云计算平台、云计算实践、云计算产业咨询等服务。内容平台方面,我们的目标读者主要…

DataWorks 功能实践速览03期 — 生产开发环境隔离

简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 往期回顾: DataWorks 功能实践速览01期——数据同步解决方案:为您介绍不同场景下可选的数据同步方案。DataWorks 功…

鸿蒙手表esim,鸿蒙手表终于来了!或将支持 eSIM,实现独立通话

原标题:鸿蒙手表终于来了!或将支持 eSIM,实现独立通话根据此前的爆料消息,华为将于 6 月份带来与鸿蒙相关的产品发布会,备受瞩目的平板、手表等新品也将亮相。临近产品发布,华为官方也开始了新品的预热。今…

Pull or Push?监控系统如何选型

简介: 对于建设一套公司内部使用的监控系统平台,相对来说可选的方案还是非常多的,无论是用开源方案自建还是使用商业的SaaS化产品,都有比较多的可选项。但无论是开源方案还是商业的SaaS产品,真正实施起来都需要考虑如何…

k8s 集群居然可以图形化安装了?

作者 | 小碗汤来源 | 我的小碗汤今天分享一个可以图形化搭建k8s集群的项目,不妨试一试~本项目是基于 Kubespray 提供图形化的 K8S 集群离线安装、维护工具。Kubespray:https://github.com/kubernetes-sigs/kubesprayKuboard-SprayKuboard-Spray 是一款可…

poi excel导入 判断合并单元格_Excel合并单元格,你需要知道的那些事

合并单元格,是我们经常使用的一个功能。借助合并单元格功能,我们可以制作跨列表头,可以对数据进行显示上的分类,使数据看起来更加清晰明了,让我们的Excel表格看起来更加专业。找到菜单栏的合并单元格功能,我…

当设计模式遇上 Hooks

简介: 数据结构与设计模式能够指导我们在开发复杂系统中寻得一条清晰的道路,既然都说 Hooks 难以维护,那就尝试让「神」来拯救这混乱的局面。对于「设计模式是否有助于我们写出更优雅的 Hooks 」这个问题,看完本文,相信…

PostgreSQL数据目录深度揭秘

简介: PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS),被业界誉为“先进的开源数据库”,支持NoSQL数据类型,主要面向企业复杂查询SQL的OLTP业务场景,提供…

深入浅出 Spring 架构设计

作者 | 三太子敖丙来源 | 敖丙前言为什么需要Spring? 什么是Spring?对于这样的问题,大部分人都是处于一种朦朦胧胧的状态,说的出来,但又不是完全说的出来,今天我们就以架构设计的角度尝试解开Spring的神秘面纱。本篇文章以由浅入…

海云健康:上云为10万家药店带去了什么价值?

“全国每5个人里,就有1个正在接受海云健康系统提供的服务。” 在海云健康(以下简称“海云”)的系统后台上,每一分钟就有10万笔的买药订单涌动。也许很多人没有听过海云健康的名字,但当他们走进社区药店时,已经在享受海云的“存健康”药店会员管理系统提供的服务。 海云创办于…

android系统手势app,8种iOS手势规定和14种android手势规定详解

不知道大家对ios系统和android系统的规定的原生手势有哪些吗?看到这样的标题,你能够回答出几个呢?其实,APP设计师和h5开发工程师对移动设备的手势的了解和理解是非常有必要的。只有掌握了这些平台的手势规定才能设计出符合用户操作…

mPaas 运维流程介绍

简介: 金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。在我们日常运维过程…

360借条通过CCRC权威认证,再获国家级认可

近日,中国网络安全审查技术与认证中心(CCRC)向360借条App颁发移动互联网应用程序(App)安全认证证书。通过该认证,表明360借条App在个人信息保护方面的工作再次取得了国家级肯定。 随着移动互联的蓬勃发展&…

ElasticSearch IK 分词器快速上手

简介: ElasticSearch IK 分词器快速上手 一、安装 IK 分词器 1.分配伪终端 我的 ElasticSearch 是使用 Docker 安装的,所以先给容器分配一个伪终端.之后就可以像登录服务器一样直接操作docker 中的内容了docker exec -it 容器ID /bin/bash 2.使用 elasticsearch…

装完系统还要装什么_家里装了空调还要装空气净化系统吗?会不会太浪费了?...

微信搜一搜舒适11今天这篇文章,小壹就向大家科普一下空调和新风系统,告诉大家为什么装了空调还要装新风机。1、空调是什么? 对此大家都能够脱口而出:空调就是用来制冷或制热的机器,能够改变室内温度,让我们…

移动端性能优化系列—启动速度

简介: 移动端性能对用户体验、留存有着至关重要的影响,作为开发者是不是被这样吐槽过,“这个 APP 怎么这么大?”、“怎么一直在 APP 封面图转悠,点不进去”、“进入详情效果有些卡”、“用 4G 使用你们的 APP&#xff…

三重框架构建和威胁情报及时可达,山石网科发布StoneOS 5.5R9

升级的StoneOS 5.5R9版本,在预测与发现、防御与控制、检测与分析、响应与管理四个角度,通过云端运营中心的情报赋能和统筹运维,策略助手的访问链接发现,边界流量过滤的IP快速分类与阻断,精确边缘策略对用户与应用的精细…

Apache Flink 在京东的实践与优化

简介: Flink 助力京东实时计算平台朝着批流一体的方向演进。 本文整理自京东高级技术专家付海涛在 Flink Forward Asia 2020 分享的议题《Apache Flink 在京东的实践与优化》,内容包括: 业务演进和规模容器化实践Flink 优化改进未来规划一、业…

云端攻防的最后战场,腾讯主机安全旗舰版发布

在刚刚过去的12月里,Apache Log4j 漏洞席卷全球,成为互联网安全领域暴热的话题。而Log4j的破坏力也十分惊人,全球数亿台设备都可能受到影响,攻击者仅需一段代码就可能远程控制服务器。而这场风波一直影响至今,几乎所有…

华为鸿蒙系统p40,华为鸿蒙OS系统正式亮剑!华为P40再次确认:双打孔+麒麟990+鸿蒙OS...

众所周知,华为Mate 系列、P系列产品一直都是华为高端旗舰机型,在整体外观设计、综合性能、拍照等方面,也都是华为最为顶尖的旗舰机型,但在售价方面却遭到了很多“性价比”用户的吐槽,纷纷吐槽华为Mate系列、P系列产品“…