备案 控制台
开发者社区 开发与运维 文章 正文

10+倍性能提升全过程--优酷账号绑定淘宝账号的TPS从500到5400的优化历程

本文涉及的产品
公网NAT网关,每月750个小时 15CU
性能测试 PTS,5000VUM额度
简介: # 10+倍性能提升全过程--优酷账号绑定淘宝账号的TPS从500到5400的优化历程 ## 背景说明 > 2016年的双11在淘宝上买买买的时候,天猫和优酷土豆一起做了联合促销,在天猫双11当天购物满XXX元就赠送优酷会员,这个过程需要用户在优酷侧绑定淘宝账号(登录优酷、提供淘宝账号,优酷调用淘宝API实现两个账号绑定)和赠送会员并让会员权益生效(看收费影片、免广告等等) >

10+倍性能提升全过程--优酷账号绑定淘宝账号的TPS从500到5400的优化历程

背景说明

2016年的双11在淘宝上买买买的时候,天猫和优酷土豆一起做了联合促销,在天猫双11当天购物满XXX元就赠送优酷会员,这个过程需要用户在优酷侧绑定淘宝账号(登录优酷、提供淘宝账号,优酷调用淘宝API实现两个账号绑定)和赠送会员并让会员权益生效(看收费影片、免广告等等)

这里涉及到优酷的两个部门:Passport(在上海,负责登录、绑定账号,下文中的优化过程主要是Passport部分);会员(在北京,负责赠送会员,保证权益生效)

在双11活动之前,Passport的绑定账号功能一直在运行,只是没有碰到过大促销带来的挑战


会员部分的架构改造

  • 接入中间件DRDS,让优酷的数据库支持拆分,分解MySQL压力
  • 接入中间件vipserver来支持负载均衡
  • 接入集团DRC来保障数据的高可用
  • 对业务进行改造支持Amazon的全链路压测

主要的压测过程

screenshot.png

上图是压测过程中主要的阶段中问题和改进,主要的问题和优化过程如下:

- docker bridge网络性能问题和网络中断si不均衡    (优化后:500->1000TPS)
- 短连接导致的local port不够                   (优化后:1000-3000TPS)
- 生产环境snat单核导致的网络延时增大             (优化后能达到测试环境的3000TPS)
- Spring MVC Path带来的过高的CPU消耗           (优化后:3000->4200TPS)
- 其他业务代码的优化(比如异常、agent等)         (优化后:4200->5400TPS)

优化过程中碰到的比如淘宝api调用次数限流等一些业务问题就不列出来了


Passport部分的压力

由于用户进来后先要登录并且绑定账号,实际压力先到Passport部分,在这个过程中最开始单机TPS只能到500,经过N轮优化后基本能达到5400 TPS,下面主要是阐述这个优化过程

Passport 核心服务分两个:

  • Login 主要处理登录请求
  • userservice 处理登录后的业务逻辑,比如将优酷账号和淘宝账号绑定

为了更好地利用资源每台物理加上部署三个docker 容器,跑在不同的端口上(8081、8082、8083),通过bridge网络来互相通讯

Passport机器大致结构

screenshot.png

说明:这里的500 TPS到5400 TPS是指登录和将优酷账号和淘宝账号绑定的TPS,也是促销活动主要的瓶颈

userservice服务网络相关的各种问题


太多SocketConnect异常(如上图)

在userservice机器上通过netstat也能看到大量的SYN_SENT状态,如下图:

因为docker bridge通过nat来实现,尝试去掉docker,让tomcat直接跑在物理机上

这时SocketConnect异常不再出现

从新梳理一下网络流程

docker(bridge)----短连接--->访问淘宝API(淘宝open api只能短连接访问),性能差,cpu都花在si上;

如果 docker(bridge)----长连接到宿主机的某个代理上(比如haproxy)-----短连接--->访问淘宝API, 性能就能好一点。问题可能是短连接放大了Docker bridge网络的性能损耗

当时看到的cpu si非常高,截图如下:

去掉Docker后,性能有所提升,继续通过perf top看到内核态寻找可用的Local Port消耗了比较多的CPU,gif动态截图如下(可以点击看高清大图):

注意图中ipv6_rcv_saddr_equal和inet_csk_get_port 总共占了30%的CPU

一般来说一台机器可用Local Port 3万多个,如果是短连接的话,一个连接释放后默认需要60秒回收,30000/60 =500 这是大概的理论TPS值

同时观察这个时候CPU的主要花在sy上,最理想肯定是希望CPU主要用在us上,截图如下:

sy占用了30-50%的CPU,这太不科学了,同时通过 netstat 分析连接状态,确实看到很多TIME_WAIT:

于是让PE修改了tcp相关参数:降低 tcp_max_tw_buckets和开启tcp_tw_reuse,这个时候TPS能从1000提升到3000

优化到3000 TPS后上线继续压测

居然性能又回到了500,太沮丧了,其实最开始账号绑定慢,Passport这边就怀疑taobao api是不是在大压力下不稳定,程序员一般都是认为自己没问题,有问题的一定是对方 :) ,taobao api那边给出调用数据都是1ms以内就返回了(alimonitor监控图表)。

于是怀疑从优酷的机器到淘宝的机器中间链路上有瓶颈,但是需要设计方案来证明这个问题在链路上,要不各个环节都会认为自己没有问题的,当时Passport的开发也只能拿到Login和Userservice这两组机器的权限,中间的负载均衡、交换机都没有权限接触到。

在尝试过tcpdump抓包、ping等各种手段分析后,设计了场景证明问题在中间链路上。

设计如下三个场景证明问题在中间链路上:

  1. 压测的时候在userservice ping 淘宝的机器;
  2. 将一台userservice机器从负载均衡上拿下来(没有压力),ping 淘宝的机器;
  3. 从公网上非优酷的机器 ping 淘宝的机器;

这个时候奇怪的事情发现了,压力一上来场景1、2的两台机器ping淘宝的rt都从30ms上升到100-150ms,场景1 的rt上升可以理解,但是场景2的rt上升不应该,同时场景3中ping淘宝在压力测试的情况下rt一直很稳定(说明压力下淘宝的机器没有问题),到此确认问题在优酷到淘宝机房的链路上有瓶颈,而且问题在优酷机房出口扛不住这么大的压力。于是从上海Passport的团队找到北京Passport的PE团队,确认在优酷调用taobao api的出口上使用了snat,PE到snat机器上看到snat只能使用单核,而且对应的核早就100%的CPU了,因为之前一直没有这么大的压力所以这个问题一直存在只是没有被发现。

于是PE去掉snat,再压的话 TPS稳定在3000左右


到这里结束了吗? 从3000到5400TPS

优化到3000TPS的整个过程没有修改业务代码,只是通过修改系统配置、结构非常有效地把TPS提升了6倍,对于优化来说这个过程是最轻松,性价比也是非常高的。实际到这个时候也临近双11封网了,最终通过计算(机器数量*单机TPS)完全可以抗住双11的压力,所以最终双11运行的版本就是这样的。 但是有工匠精神的工程师是不会轻易放过这么好的优化场景和环境的(基线、机器、代码、工具都具备配套好了)

优化完环境问题后,3000TPS能把CPU US跑上去,于是再对业务代码进行优化也是可行的了

进一步挖掘代码中的优化空间

双11前的这段封网其实是比较无聊的,于是和Passport的开发同学们一起挖掘代码中的可以优化的部分。这个过程中使用到的主要工具是这三个:火焰图、perf、perf-map-java。相关链接: http://www.brendangregg.com/perf.html ; https://github.com/jrudolph/perf-map-agent

通过Perf发现的一个SpringMVC 的性能问题

这个问题具体参考我之前发表的优化文章 http://www.atatech.org/articles/65232 。 主要是通过火焰图发现spring mapping path消耗了过多CPU的性能问题,CPU热点都在methodMapping相关部分,于是修改代码去掉spring中的methodMapping解析后性能提升了40%,TPS能从3000提升到4200.

著名的fillInStackTrace导致的性能问题

代码中的第二个问题是我们程序中很多异常(fillInStackTrace),实际业务上没有这么多错误,应该是一些不重要的异常,不会影响结果,但是异常频率很高,对这种我们可以找到触发的地方,catch住,然后不要抛出去(也就是别触发fillInStackTrace),打印一行error日志就行,这块也能省出10%的CPU,对应到TPS也有几百的提升。

screenshot.png

部分触发fillInStackTrace的场景和具体代码行(点击看高清大图):
screenshot.png

对应的火焰图(点击看高清大图):
screenshot.png

screenshot.png

解析useragent 代码部分的性能问题

整个useragent调用堆栈和cpu占用情况,做了个汇总(useragent不启用TPS能从4700提升到5400)
screenshot.png

实际火焰图中比较分散:
screenshot.png

最终通过对代码的优化勉勉强强将TPS从3000提升到了5400(太不容易了,改代码过程太辛苦,不如改配置来钱快)

优化代码后压测tps可以跑到5400,截图:

最后再次总结整个压测过程的问题和优化历程

- docker bridge网络性能问题和网络中断si不均衡    (优化后:500->1000TPS)
- 短连接导致的local port不够                   (优化后:1000-3000TPS)
- 生产环境snat单核导致的网络延时增大             (优化后能达到测试环境的3000TPS)
- Spring MVC Path带来的过高的CPU消耗           (优化后:3000->4200TPS)
- 其他业务代码的优化(比如异常、agent等)         (优化后:4200->5400TPS)

整个过程得到了淘宝API、优酷会员、优酷Passport、网络、蚂蚁等众多同学的帮助,本来是计划去上海跟Passport的同学一起复盘然后再写这篇文章的,结果一直未能成行,请原谅我拖延到现在才把大家一起辛苦工作的结果整理出来,可能过程中的数据会有一些记忆上的小错误。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
rui__
目录
相关文章
技术君
|
2月前
|
Web App开发 监控 前端开发
如何优化淘宝直播 PC 推流端性能(下)
如何优化淘宝直播 PC 推流端性能(下)
技术君
113 3
技术君
|
2月前
|
缓存 前端开发 JavaScript
如何优化淘宝直播 PC 推流端性能(上)
如何优化淘宝直播 PC 推流端性能(上)
技术君
146 2
jsjsjjs
|
2月前
|
存储 缓存 监控
微信团队分享:微信后端海量数据查询从1000ms降到100ms的技术实践
针对大数据量带来的查询性能问题,微信团队对数据层查询接口进行了针对性的优化,将平均查询速度从1000ms+优化到了100ms级别。本文为各位分享优化过程,希望对你有用!
jsjsjjs
51 2
三分钟热度的鱼
|
2月前
|
运维 监控 网络安全
应用研发平台EMAS产品常见问题之小米辅助通道注册失败如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
三分钟热度的鱼
28 0
阿里云瑶池数据库
|
11月前
|
Cloud Native 关系型数据库 分布式数据库
客户说|PolarDB最佳实践:工期缩短2/3,揭秘极氪APP分布式改造效率神器
极氪APP引入阿里云PolarDB,21天完成数据库分布式改造
阿里云瑶池数据库
1423 1
auqbllxiu
|
运维
《支付宝APP亿级用户的 性能稳定性优化及运维实践》电子版地址
支付宝APP亿级用户的 性能稳定性优化及运维实践
auqbllxiu
108 0
《支付宝APP亿级用户的 性能稳定性优化及运维实践》电子版地址
开发V_I357O98O7I8
|
存储 算法 区块链
SolaRoad索拉迪/算力分红/系统开发/规则玩法/方案详情/源码说明
  智能合约,又称智能合同,是事件驱动的、有状态的、多方认可的、运行在链上的、能够根据预设条件自动处理资产的契约。智能合约的最大优点是使用程序算法代替仲裁和合同执行。
开发V_I357O98O7I8
74 0
中间件小哥
|
测试技术 视频直播 双11
干货分享:细说双 11 直播背后的压测保障技术
阿里云 PTS 站在双 11 巨人的肩膀上,是阿里全链路压测的延伸。PTS 通过伸缩弹性,轻松发起用户百万级别的流量,免去机器、人力成本;PTS 对流量的控制,能够实时脉冲,精准控制; 是应对视频直播快速攀升的流量脉冲的优秀方案。
中间件小哥
2575 1
干货分享:细说双 11 直播背后的压测保障技术
淘系技术小助手
|
Web App开发 设计模式 缓存
新工具开源!一款双11养猫5亿用户的互动引擎(附地址)
阿里巴巴历时2年自研开发的互动游戏引擎Eva.js正式开源,致力于让前端工程师更低成本的开发互动游戏,并已经在淘宝、天猫、支付宝、优酷、考拉、菜鸟、盒马等业务场景中使用。
淘系技术小助手
297 0
新工具开源!一款双11养猫5亿用户的互动引擎(附地址)
游客fpzxihfp4eq5s
|
运维 架构师 安全
支付宝全局架构师曹刚:为12亿用户设计架构是什么体验?
支付宝全局架构师曹刚:为12亿用户设计架构是什么体验?
游客fpzxihfp4eq5s
799 0
支付宝全局架构师曹刚:为12亿用户设计架构是什么体验?

热门文章

最新文章

  • 1
    Amazon Redshift数据迁移到MaxCompute
  • 2
    如何在 Ubuntu 20.04 上安装 Node.js 和 npm
  • 3
    星际之门SG1第一至十季/全集Stargate SG-1迅雷下载
  • 4
    Dubbo 在跨语言和协议穿透性方向的探索:支持 HTTP/2 gRPC
  • 5
    Ossimport 大数据量迁移方案总结
  • 6
    Weblogic的config.xml文件详解(原创)
  • 7
    【整理】在一亿个数中寻找出现频率最多的4个 <转>
  • 8
    CFS调度器中子进程被唤醒后的细节--实验和理论
  • 9
    在ashx页面中context.Session["xxx"]获取不到值的解决办法
  • 10
    jquery动态添加表单数据
  • 1
    DataWorks产品使用合集之怎么删除或更新已发布部署的文件实例?
    45
  • 2
    DataWorks产品使用合集之使用API调用ODPS SQL时,出现资源被定时任务抢占,该怎么办?
    38
  • 3
    DataWorks产品使用合集之如何通过REST API进行数据采集,并且自定义传入API的参数?
    41
  • 4
    DataWorks产品使用合集之同步Holo数据到ODPS的过程中,出现部分数据的值变为星号(),是什么原因?
    31
  • 5
    DataWorks产品使用合集之数据地图里如何导出某个工作空间下的所有表明细?
    33
  • 6
    DataWorks产品使用合集之执行了ALTER TABLE语句,但是没有看到添加的字段,是什么原因?
    21
  • 7
    DataWorks产品使用合集之如何新增MongoDB数据源并设置鉴权?
    17
  • 8
    基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
    12
  • 9
    DataWorks产品使用合集之SAP数据源怎么通过向导模式配置同步任务?
    23
  • 10
    短信服务 platform-sms 0.6.1 发布
    22
  • 相关课程

    更多
  • 大数据分析之企业级网站流量运营分析系统开发实战(第二阶段)
  • 大数据分析之企业级网站流量运营分析系统开发实战(第四阶段)
  • 大数据分析之企业级网站流量运营分析系统开发实战(第三阶段)
  • 云数据库优化十大典型案例
  • 云拨测产品能力与应用场景解读
  • 线上Linux服务器优化经验
  • 相关电子书

    更多
  • 支付宝APP亿级用户的 性能稳定性优化及运维实践
  • 网易 NEI 接口管理解决 方案
  • 高可用实践:从淘宝到上云的差异
  • 相关实验场景

    更多
  • 基于Hologres+PAI+计算巢,5分钟搭建企业级AI问答知识库
  • 利用大模型大规模分发技术,实现AIGC在线应用秒级弹性
  • 5分钟轻松打造应对流量洪峰的稳定商城交易系统
  • 使用EDA架构部署在线外卖订单系统
  • 网站用户流量分析—适用于电商网站、资讯网站、游戏主站等各类Web站点场景
  • 基于Serverless架构的盲盒抽奖系统
  • 下一篇
    通义千问API入门教程

    PHP网站源码深圳外贸网站制作横岗网站开发福田英文网站建设南山百度关键词包年推广大芬网站建设坑梓网站优化软件平湖网站排名优化宝安模板制作深圳百姓网标王推广大芬网站建设龙华企业网站改版坪地外贸网站设计塘坑网站改版宝安SEO按效果付费惠州网站改版福田网络推广永湖网站关键词优化福永阿里店铺运营南联百度标王横岗阿里店铺运营民治网站优化软件塘坑网站关键词优化大鹏网站推广系统惠州企业网站建设平湖SEO按天计费石岩seo排名南澳外贸网站建设丹竹头英文网站建设大鹏网站制作设计大浪百搜词包歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化