简介

记录1次性能提升的经历,它最大的挑战不在于性能提升,而在于时间急,涉及的面广(比如:机房F5的SSL/TLS性能,机房互联网流量费和项目投入产出比等)。性能指标:至少支持10K QPS,10ms内服务应答,2+%的超时会被[流量方](BATJ中的一家)打低业务流量,10+%的超时封号。

背景

因EA整体的架构规划,部门A的试错尝鲜类需求被划分给部门B来实现。这是1个互联网引流的需求:[流量方]会将客户移动端的加密设备信息调用我司接口,我司需告知[流量方]这个设备是否需要看我司的广告。9.20号部门B和[流量方]做了2次性能压测,没通过:1200 QPS,60+%超时率;800 QPS,17+% 超时率。本计划9.22号上线,兼着部门A架构的我被安排进入项目。经多轮沟通分析,因该需求涉及的面比较广,需向多位部门长、CTO汇报请示,同时要向集团IT报备,再加之8天的国庆假期,最后于10.13上线该需求。

兄弟部门B的失误在于过于乐观、简单地看待了这个业务需求。通过了解生产环境现状、多轮和[流量方]&集团IT沟通后,摸清了大体的情况

现状分析

开始分析代码,以及整个链路的运行环境

解决方案

通过修改代码、变更Web容器提升单机性能,为后续横向scaling做好基础

性能压测

下图描述的主要是测试环境压测的情况。可以看出,测试环境的压测数据单机性能已经达到16+K 的QPS,但担心[流量方]的统计指标(主要是并发数)有出入,因此预估生产环境集群可以正常抗10K的QPS。在10.16日和[流量方]进行生产压测后,发现集群可以抗30K的QPS(这也是下图【3倍生产环境[流量方]实压转换比】的参考来源)。其实还可以再往上压,35K时[流量方]反馈响应耗时出现了波动,但互联网的宽带有限制,也担心机房F5的问题,同时已超额满足业务预期,就停止了生产的压测

总结

部门B确实做过一些压测,但测试目标不明确(众多的性能指标中,应该以该需求最核心的Web服务器响应耗时这个指标作为基线,来测试单台机器支持的最大QPS),测试工具不准确(当时用部门B的压测方法模拟1000 QPS,我查了下其实只有48的QPS),这也导致了上线前最后1关也就轻易的过了

另外,过于轻信了运维和安全同事他们对Openresty的压测指标(可支持80+w的QPS),测试环境压测时没有测Openresty的性能。不过还好,安全的同事心虚了,在和[流量方]生产压测前,当天下午生产环境压测了一下Openresty的性能,紧急去掉了Openresty节点。当时Openresty压测数据表明:在保证吞吐量的前提下,响应耗时只能是标准需求的接口延迟在200ms左右。关于Openresty的性能调优,或者是不是Openresty中的Lua脚本有性能问题(理论上编译型的Java会比解释型的Lua快),这又是另1个话题了

迎难而上,QPS提高22+倍的更多相关文章

  1. 将Web应用性能提高十倍的10条建议

    导读 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于 ...

  2. 王家林 Spark公开课大讲坛第一期:Spark把云计算大数据速度提高100倍以上

    王家林 Spark公开课大讲坛第一期:Spark把云计算大数据速度提高100倍以上 http://edu.51cto.com/lesson/id-30815.html Spark实战高手之路 系列书籍 ...

  3. 将 Web 应用性能提高十倍的10条建议

    提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上 ...

  4. 使用生成器把Kafka写入速度提高1000倍

    title: 使用生成器把Kafka写入速度提高1000倍 toc: true comment: true date: 2018-04-13 21:35:09 tags: ['Python', '经验 ...

  5. 京东iPad新品开售销量环比增22倍

    一年一度万众期待的 Apple 春季发布会终于在今天凌晨揭晓,Apple 新推的 Apple News.Apple Card.Apple Arcade 和 Apple TV+ 四大软件服务惊喜不断,随 ...

  6. 【转】Vim速查表-帮你提高N倍效率

    Vim速查表-帮你提高N倍效率 转自:https://www.jianshu.com/p/6aa2e0e39f99 去年上半年开始全面使用linux进行开发和娱乐了,现在已经回不去windows了. ...

  7. 一行代码让python的运行速度提高100倍

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差. “一行代码让python的运行速度提高100倍”这绝不是哗众取宠的 ...

  8. 一行代码让你的python运行速度提高100倍

    转自:https://www.cnblogs.com/xihuineng/p/10630116.html 加上之后运行速度快了十倍,我的天呐. python一直被病垢运行速度太慢,但是实际上pytho ...

  9. 使用 PyTorch Lightning 将深度学习管道速度提高 10 倍

    ​  前言  本文介绍了如何使用 PyTorch Lightning 构建高效且快速的深度学习管道,主要包括有为什么优化深度学习管道很重要.使用 PyTorch Lightning 加快实验周期的六种 ...

随机推荐

  1. 学会使用BeanUtils,提高你的开发效率

    一.关于BeanUtils 一说到BeanUtils,大家可能不清楚指的哪个BeanUtils.因为它在很多包里面都有,其中挺常用的就是 (1)org.apache.commons.beanutils ...

  2. (课堂笔记)第三章:F5 LTM 负载均衡理论

    BIG-IP LTM负载均衡理论 ------F5 BIG-IP LTM负载均衡策略---------- 1.1 LTM VS工作模式F5 BIG-IP LTM的内部对于数据包的处理方式,即是VS的工 ...

  3. [LeetCode]面试题53 - I. 在排序数组中查找数字 I(二分);面试题53 - II. 0~n-1中缺失的数字(二分)

    ##面试题53 - I. 在排序数组中查找数字 I ###题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 ...

  4. 学习 | jQuery全屏滚动插件FullPage.js

    简介 fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站. 主要功能 支持鼠标滚动 支持前进后退和键盘控制 多个回调函数 支持手机.平板触摸事件 支持 C ...

  5. Promise场景实例之图片加载

    所有图片加载完再添加到页面 { // 所有图片加载完再添加到页面 function loadImg(src) { return new Promise(function (resolve, rejec ...

  6. 我还在生产玩 JDK7,JDK 15 却要来了!

    自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15. 恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 ...

  7. Class对象、反射、动态代理

    Class对象是所有类的根源,Object是所有对象的根源. 编译后的新类会产生一个Class对象,保存在同名的.class文件中.每个类都有一个Class对象,它包含了所有的与类有关的信息.所有的C ...

  8. selenium的文档API

    你用WebDriver要做的第一件事就是指定一个链接,一般我们使用get方法: from selenium import webdriver from selenium.webdriver.commo ...

  9. 从C++入手,探寻java的特点

    java的特点 java语言建立在成熟的算法语言和坚实的面向对象理论的基础上,具有强大的应用系统设计能力,其具备的跨平台特型,其具备的跨平台特型.面向对象和可靠性.安全性等特点是它能够充分适应网络需要 ...

  10. 关于数学公式Markdown

    打开写博客(这都打不开就...) 再打开"选项". 选"启用数学公式支持"对(以后有用嘻嘻) 在默认编辑器里有Markdown选对. 然后就可以 \[\sum\ ...