京东金融移动端全链路压测历时三个月,测试和服务端同学经过无数日日夜夜,通宵达旦,终于完成了移动端链路的测试任务。整个测试有部分涉及到公司敏感数据,本文只对策略部分进行论述。

1.系统架构与策略

在聊性能测试之前,简单的对金融系统架构进行简单的梳理。京东金融App架构较为复杂,为了说明问题对架构进行简化和抽象。

金融App客户端主要是通过原生主框架和运营平台(乐高)配置搭建组成App客户端;主框架和运营平台(乐高)通过调用网关接口连接各个业务系统。实现整个业务正常运转。金融App移动端618专项测试包含App客户端专项测试和App链路服务端性能两部分内容,本文主要对App链路服务端性能进行简单说明。

京东金融App业务模拟示意图

根据架构特点和业务特点,将金融移动App链路服务端性能测试。共分为三个阶段,服务端基础能力测试、服务端相关业务链路测试、服务端全链路预演等三个阶段。

2.测试方案及实施要点

通过对移动端业务的特点和架构综合分析,将移动端链路分为三个阶段进行测试,每个测试阶段侧重点和目标不同,通过分阶段实施,一步步测试和验证金融App链路是否能够完成并满足618业务要求。

在本次618备战服务端测试主要分三个阶段,第一阶段主要进行服务端能力和故障模拟;第二阶段主要进行业务能力测试和业务链路性能测试。第三阶段主要进行全链路压测,模拟线上用户在高并发下服务端各业务的表现及业务升降级演练。

1)服务端能力及服务故障模拟阶段

服务端第一轮性能测试,涉及核心业务网关和乐高基础能力性能测试。

通过模拟正常业务、业务超时、应答错误,业务方无响应、业务数据包超大,业务数据包丢失,业务数据包不完整、接口限流等业务能力。DB不可用、连接数占满、硬盘,应用服务器硬盘沾满、应用服务器cpu过高、内存过高等系统资源问题,以及乐高或网管系统扩容和缩容测试。

通过模拟各种异常情况验证系统基础能力是否满足高峰期间业务流量。

基础能力测试

第一阶段性能测试难度较大,一则是因为基础能力测试和传统业务测试在思考方式上有较大差异;另外基础能力测试需要模拟各种异常情况,需要高度抽象各种业务情况,需要编写各种模拟代码,对传统测试能力要求较高。

2)基础能力业务测试和业务链路性能测试

服务端第二轮性能测试,包含两部分内容,一部分主要是对第一阶段测试基础能力(乐高、网关)系统接入真实的业务进行业务性能测试。在接入业务时测试时,网关系统接入下游业务策略是选择高峰时期top30的业务接口进行进行测试。乐高系统通过线上流量复制,按照线上调用业务模板的比例进行等比配置,覆盖所有模板实例,确保趋近于模拟线上真实业务模板实例和后台接口测试乐高系统。

在选择接入下游系统数据和接口时,选择的策略不同,测试的结果差异较大,所以采用什么样的选择策略就显得尤为重要。

另外一部分是App基础业务、高频和关键业务性能测试,这部分主要通过对单业务或者单业务链路的测试,验证该业务链路是否满足系统要求。这部分和大部分公司日常的性能测试方案和方法一致。在此不再赘述。

另外在此阶段有一个非常重要测试演练,不断要测试集群的性能,还需要进行单机的性能,根据扩容行测试,评估和预测扩容机器。

3)测试服务端全链路预演

基于前面两个阶段对基础能力性能测试和基础业务、高频业务、基础业务、活动等业务的性能测试和评估,各业务根据618移动端链路流量预估,形成整体移动端链路压测方案。关于全链路压测网上的方案非常之多,本文不在赘述。

在第三个阶段,除了验证业务支撑能力,能不能满足预估流量;还需要重点关注高峰时段流量对App业务影响,并根据压测情况对业务实时升降级处理。如果超过预估流量或者发生意外时,那些业务可以进行降级,如果降级,会不会影响到其他业务等等。

此阶段重要的一个任务就是演练,模拟演练618洪峰流量对业务对App的影响,性能测试需要测试和评估出每个业务升降级的临界数据,配合开发和运维同学在测试过程中进行故障模拟和演练。

3.总结

全链路压测和平常压测的一个很重要的区别是,全链路压测是证明容量规划的准确,流量控制策略得当。流量控制策略最核心的可以做到限流分流降级,限流分流降级说起来很容易,但需要开发、测试同学在前期做好大量工作,业务是否做到解耦和具备升降级能力,测试同学是否通过测试准确的验证容量规划的合理性,业务升降级的临界值是否合理得当等等。

4.感谢

整个任务完成之时,还害怕哪块没准备好,有点担心。但在6月1号写完此文,内心无比坚定的认为这次备战肯定是成功的。写此文一则是为了总结经验,二则是为了感谢为此次备战准备了三个月身边的小伙伴。

感谢为保障这次测试任务的所有移动端测试同学,在那么短的时间,那么少的人手,完成了几乎是平常工作量2倍的工作,你们是最棒的,感谢你们。

感谢移动端开发,帮忙一块梳理业务,每个边边角角都帮我们补充到。喜欢你们认真的样子。

感谢服务端的同学,不厌其烦的配合我们一次次调试差问题,和我们一起加班,一起看星星,一起看日出,一起悲伤,一起欢乐。

当然必须再此感谢所有参与这次移动端链路功能专项测试,客户端专项性能测试,服务端的同学。

写在后面的话:完美的遗憾

整体来说本次移动端链路备战非常成功,但有个小小的遗憾,在618当天晚上八点活动中因为瞬间业务(5秒)访问新高,触发熔断机制,导致业务失败率较高。出现瞬间访问过高的原因是因为活动结束后,用户瞬间返回主页面,导致主页面业务访问量过高。

建议后期在业务设计时一定要考虑业务完成的情况,尽可能建立多层级的业务分流机制。避免业务完成时的瞬间访问量发生。同时也要建立自动降级的策略,防止业务瞬间访问量上升导致的降级策略失效的问题。

作者:土司阿哈
链接:https://www.jianshu.com/p/2e79b546d321
来源:简书

【转】京东金融App端链路服务端全链路压测策略的更多相关文章

  1. HTTP服务端JSON服务端

    HTTP服务端JSON服务端 最后更新日期:  2014-5-18 Author: Kagula 阅读前提: CMake工具的基本使用 内容简介: CPPCMS是个开源Web开发框架,通过它可以很容易 ...

  2. 恩布企业IM PC端,服务端公布 1.16 版本号

    恩布企业IM PC端,服务端公布1.16版本号,开源企业IM.免费企业即时通讯软件:主要版本号更新内容: 恩布服务端核心程序,添加进程守护保护机制,确保系统7*24持续稳定服务: 服务端添加内存数据库 ...

  3. Node.js 应用全链路追踪技术——[全链路信息获取]

    全链路追踪技术的两个核心要素分别是 全链路信息获取 和 全链路信息存储展示. Node.js 应用也不例外,这里将分成两篇文章进行介绍:第一篇介绍 Node.js 应用全链路信息获取, 第二篇介绍 N ...

  4. 微信支付(APP支付)-服务端开发(一)

    微信支付,首先需要注册一个商户平台公众账号,(网址:https://pay.weixin.qq.com/index.php/home/d_login) 目前微信支付的接入方式有四种方式:公众号支付,A ...

  5. 客服端与服务端APP支付宝支付接口联调的那些坑

    根据支付宝官方提供的文档的建议: TIPS:这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串orderString传给客户端,客户端直接传给SDK发起请求.文档和Demo是为了示例效果在 ...

  6. 微信支付(公众号支付APIJS、app支付)服务端统一下单接口java版

    一.微信公众号支付APIJS: 要完整的实现微信支付功能,需要前后端一起实现,还需要微信商户平台的配置.这里只是涉及服务端的代码. jar包:pom.xml <!-- ↓↓↓↓↓↓↓↓ 支付相关 ...

  7. 微信支付(APP支付)-服务端开发(二 )

    如果你已经可以微信支付成功,那么你已经成功90%,剩下的就是订单确认问题了. 接上一篇文章,今天我们来谈一谈,订单查询与确认: APP端支付成功之后,会再次向服务端发起请求,确认付款订单时候成功,同时 ...

  8. 【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found -- The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

    问题描述 使用NodeJS的后端应用,开发一个Mobile App的服务端,手机端通过REST API来访问获取后端数据.在本地编译好后,通过npm start启动项目,访问效果如下: 但是,当把项目 ...

  9. SimpleRpc-客户端与服务端工作模型探讨

    前言 本篇文章讲述客户端与服务端的具体设计细节.有细心的小伙伴发现,客户端和服务端的工作方式不一样:服务端是多线程计算模型,利用工作线程完成数据的读取,而客户端是单线程(利用Reactor线程完成数据 ...

随机推荐

  1. python的包管理软件Conda的用法

    创建自己的虚拟环境 conda create -n learn python= 切换环境: activate learn 查看所有环境: conda env list 安装第三方包: conda in ...

  2. 发送短信验证码的JAVA代码

    package com.moretickets.platform; import com.alibaba.fastjson.JSONException; import com.alibaba.fast ...

  3. Java基础--线程创建方式

    线程的创建主要有两种形式,通过继承Thread或者实现Runnable接口,本质上没有太大区别. /** * @date: 2019/7/16 **/ public class ThreadOne i ...

  4. HDU5036(bitset加速传递闭包+期望)

    HDU5036 题解 题目链接 思路: 求出破坏or打开所有门所需要的期望炮弹数量,那么根据期望的线性性质,我们可以求出每一个门的期望值最后累加起来就行了. 我们最后的目标就是求对于一个门\(i\), ...

  5. Java并发(八)计算线程池最佳线程数

    目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...

  6. 201671010425邱世妍 团队评审&课程总结

    实验十四 团队项目评审&课程学习总结 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

  7. cmds挖掘redolog

      select member from v$logfile;   exec dbms_logmnr.add_logfile(logfilename=>'+CMDSDG/cmds/onlinel ...

  8. 如何将wordpress的the_title()进行大小写处理

    有时我们在做wordpress网站时需要将标题的大写字母改成小写字母或小写字母转为大写字母方便调用,那么要如何改造呢?我们知道Wordpress the_title()函数默认回显标题,标准写法是&l ...

  9. HTML实现调用百度在线翻译API

    HTML实现调用百度在线翻译API 本文章已收录于:   <!doctype html> <html lang="en"> <head> < ...

  10. [Algorithm] 122. Best Time to Buy and Sell Stock II

    Previous one: https://www.cnblogs.com/Answer1215/p/11974453.html Say you have an array for which the ...