一次生产事故的优化经历

在一次正常的活动促销之后,客服开始陆续反馈有用户反应在抢标的时候打不开网页或者APP,在打开的时候标的就已经被抢光了,刚开始没有特别的上心,觉得抢标不就是这样吗,抢小米手机的时候也不就这样吗?随着活动继续推进,有更多的用户强烈抗议,用户领了加息卷或者抵现卷之后抢不上标的,认为是平台作假故意不让使用以达到节省资源。


分析过程

其实以前也会有陆续的用户反馈不减少,给客户以小米抢手机为例子忽悠了过去,这次用户反馈太过强烈,才让我们重视了起来。我们前端一共三款产品,app、官网、H5,其中app使用量最大,官网其次,H5平时使用量极少但是做活动期间流量会暴增(活动一般都是H5游戏居多,H5也便于推广营销),前端的三款产品都是分别使用lvs负载到后端的两台web服务器中(如下图),这次用户反馈基本在web和app端,所以重点观察这四台服务器。

once1.png

首先怀疑网络带宽是否被涌满,找到网络工程师通过工具来监控,在抢标的时候带宽最高使用率只有70%左右,随排除之;再次怀疑web服务器是否抗不住了,使用top命令查看官网负载的两台服务器,在抢标的瞬间会飙到6-8左右,抢标后也慢慢的恢复了正常,app两台服务器高峰到10-12,随后也恢复正常。

跟踪web服务器业务日志,发现在数据库更新层报请求不到新的数据库连接或者数据库连接已经用完,认为是数据库的最大连接数太小,于是调整mysql数据库最大连接数为以往的3倍;下次抢标的时候继续观察业务日志,发现已经不报数据库链接的相关错误了,但还是很多用户反馈抢标时候打不开页面。

继续跟踪web服务器,在抢标时使用命令(ps -ef|grep httpd|wc -l)查看httpd得连接数有1千左右,随机查看apache配置文件中设置的最大连接数为1024(apache默认的最大连接数为256),原来抢标期间连接数已经到达最大连接数,很多用户在抢标的过程中已经获取不到http连接导致页面无响应或者app一直在等待中。于是调整apache配置文件中的最大连接数为1024*3。

在抢标过程中继续观察,apache的连接数在抢标的时候仍然可以飙到2600-2800之间,根据客服反馈,仍然有很多用户反馈抢标的问题,但比之前稍微好一点,但是有零星的用户反馈已经抢到标的,最后又给回退了。然后继续观察数据库服务器,使用top命令和MySQLWorkbench查看mysql主库和从库的各项负载吓一跳(如下图),mysql服务器主库的各项指标均已经达到峰值,而从库几乎没有太大压力。

mysql_before.jpg

跟踪代码发现,三端的业务代码全部连接主库,从库只有后台的查询业务在使用,于是立刻启动改造;将除过抢标过程中的查询外,其它页面或者业务的所有查询改造为查询从库,改造之后观察,发现主库的压力明显减少,从库的压力开始上来了。如下图:

mysql_after.jpg

根据客服的反馈,改造之后抢到标回退的问题几乎没有了,抢标过程中页面打不开或者打开慢的问题有一定的缓解但仍有部分用户反馈此问题,根据上面各项目分析结果得出:

  • 1 负载的两台服务器均已经达到处理的极限,需要配置更多的服务器来负载。
  • 2 mysql主库的压力明显减少,但是从库的压力却上去了,需要将现在的一主一从已从改为一主多从的模式。
  • 3 彻底解决这些问题,需要综合考虑平台的整体优化,如:业务优化(去掉业务中热点)、增加缓存、部分页面静态化(可以使用雅虎和谷歌的前端优化规则,网上也有很多的测试网站可以评测)等等。

当时根据这些情况写了一份优化的报告,见下文:


优化报告

1 背景

随着公司业务不断发展,业务量和用户量的激增,官网pv也从最初的xxx-xxx到现在的xxx-xxxx,APP活跃用户更是大幅增加;因此也对平台目前的技术架构有了更大的挑战。特别是近期平台标源紧张的情况下,满标的时间更是越来越短。服务器的压力也越来越大;因此需要升级目前的系统架构,以支持更大的用户量和业务量。

2 用户访问示意图

userVisit.jpg

目前平台有三款产品面对用户,平台官网、平台APP、平台小网页;其中平台官网和平台APP的压力比较大。

3 存在的问题

用户抢标的时候问题集中在以下几个方面
1、网页或者APP打不开
2、网站或者APP打开慢
3、抢标过程中转账成功后,因为服务器负责压力大更新失败,再次退款
4、数据库连接数用完,导致满标后添加投资记录失败,回退标的进度

4、分析

通过对近期的服务器参数,并发量,以及系统日志等进行深入的分析,得出:
1、平台官网、平台APP抢标过程中服务器压力巨大,其中平台APP问题更加突出,抢标高峰期间单台APP服务器apache最大连接数已经接近2600,接近apache最大的处理能力

2、数据库服务器压力巨大。数据库压力主要在两个时期比较突出
1)当平台做活动的时候,官网、小网页、APP访问量巨增,导致数据查询量跟着巨增,当到达数据库处理极限时,就会表现出网站打开慢等问题;
2)当用户抢标的时候,用户抢标的压力又分为两个阶段:抢标前和抢标中。抢标前,因为满标速度很快,用户提前打开抢标页面不断刷新,这样数据库的查询压力会不断增大,如果抢标的用户量非常大,会导致在抢标之前将数据库连接数用完;抢标中,单次购买大概会涉及15张左右表进行更改查询,每个标的份额1000万大概每次会有100-200人左右购买完成满标,以中间值150人计算,在几秒的时间内需要对数据更新2000-3000次(仅仅是更新,不包括查询 ),产生大量并发,可能会导致更新失败或者连接超时,从而影响到用户投标和系统正常满标。

5 解决方案

1、web服务器解决方案
单个用户访问web服务的示意图

once1.png

目前网站和平台APP均是采用了两台服务来做均衡负责,每台服务器中安装了apache来做服务端接受处理,每台apache最大可以处理大约2000条连接。因此理论上目前网站或者APP可以处理大于4000个用户请求。如果要支持同时1万的请求,则需要5台apache服务器来支持,因此目前缺少6台web服务器。
升级服务器后的访问示意图
once2.png

2、数据库解决方案
当前数据库的部署方案
once3.png

1)主从分离解决主库80%的查询压力。目前平台官网、APP均连接mysql主库导致主库压力倍增,把服务中的查询全部迁移到从数据库可以大量减轻主库的压力。

2)增加缓存服务器。当从库查询到达峰值的时候,也会影响主从的同步,从而影响交易,因此对用户经常使用的查询进行缓存以达到减少数据库的请求压力。需要新增三台缓存服务器搭建redis集群。
once4.png

3、其它优化
1)官网首页静态化,从cnzz统计来分析,首页占比网站的整体访问量的15%左右,对于首页不经常变动的数据通过静态化来处理,提升官网打开的流畅度。

2)apache服务器的优化,开启gzip压缩,配置合理的链接数等

3) 去掉投资过程中的更新热点:标的进度表。每次投标成功或者失败都需要对标的进度表进行更新,多线程更新的时候就会出现乐观锁等问题。去掉过程中的更新,只在满标后将标的进度信息保存在标的进度表,优化投资过程中对数据库的压力。

6 服务器升级方案

1、平台最大的压力来自于数据库,需要将现在的一主一从,改为一主四从。官网/app/小网页产生的大量查询,由虚IP分发到三台从库,后台管理查询走另外的一个从库。数据库需要新增三台服务器
数据库升级后的示意图
once5.png

2、增加缓存减少数据的压力,需要新增两台大内存的缓存服务器
once6.png

3、需要新增三台web服务器分解用户访问请求

app需要新增两台服务器
在抢标过程中app服务器压力最大,需要新增两台服务器,配置完成后的示意图
once7.png

官网需要新增一台服务器
官网在抢标过程也有一定的压力,需要新增一条服务器,完成后示意图如下:
once8.png

总合计之后需要购置8台服务器,其中有两台要求有大内存(64G以上)

公众号回复“优化”,可下载完整版word优化报告

备注:所有优化方案投产后,问题解决,抢标无忧!


作者:纯洁的微笑
出处:http://www.ityouknow.com/
版权归作者所有,转载请注明出处


作者:纯洁的微笑 
出处:www.ityouknow.com 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

本文如对您有帮助,还请多帮 【推荐】 下此文。 
如果喜欢我的文章,请关注我的公众号

分类: 系统架构
标签: 优化

本文转自纯洁的微笑博客博客园博客,原文链接:http://www.cnblogs.com/ityouknow/p/6369051.html,如需转载请自行联系原作者

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

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

相关文章

mysql over rank_SQL学习笔记 - 窗口函数OVER

Window Function 窗口函数Perform calculations on an already generated result set ( a window).(在已生成的结果集上执行计算)Aggregate calculation(without having to group your data)(允许使用聚合函数时不用进行GROUP BY分组&#xf…

用boost库实现traceroute小工具

参考了网上几个 traceroute的实现版本,存在一些缺陷,比如没有做超时处理,或者只能在window下使用。自己用boost实现了一个traceroute小工具,在window下正常运行。 先来看下面实现的原理。这些说明来自维基百科。traceroute&#x…

Win系统利用本地安全策略全面禁止360等软件的安装与运行-1

这个理论应该也可以用在域对下设域用户上.各位不知道有没有这种经历,机子让别人玩了一上午,回来发现,自己干干净净的系统多了一堆某某安全助手,某某杀毒,某某手机助手等等,最可恨的还是不知一系列的&#x…

php配置文件php.ini的详细解析(续)

file_uploads On //是否允许文件上传 upload_tmp_dir "d:/wamp/tmp" //上传文件的临时目录,默认为“/wamp/tm…

服务器iis7.5 配置文件,使用注册表项 - Internet Information Services | Microsoft Docs

Internet 信息服务使用的注册表项的说明07/21/2020本文内容本文介绍了 Microsoft Internet Information Services (IIS) 在 Windows 上使用的注册表项。原始产品版本: Internet information Services原始 KB 数: 954864简介本文还包含有关如何修改注…

access考试素材_NCRE考试当天常见问题处理办法及各科目注意事项大汇总

温馨提醒为了方便大家在21-22号讨论考试抽中的题目,请自觉加入QQ群:776167039考试当天常见问题及处理办法大汇总问题一:考试当天忘记带身份证和准考证原因:这种情况,要么是忘了,要么真没有提前领到准考证。…

腾讯开源手游热更新方案,Unity3D下的Lua编程

写在前面\\xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。\\2016年12月末,xLua刚刚实现新的突破&…

设置安全性根据Folder关联的条目模板设置上传文档安全性

文章结束给大家来个程序员笑话:[M] 在XT上可以设预条目模板(EntryTemplate)来到达模板化制控上传文档安全性和属性等信息的作用。而EntryTemplate本身可以与Folder相干联(一个Folder可以关联多个EntryTemplate)&#x…

surfaceView中的线程问题

问题描述我在surfaceView中的surfaceCreated方法中start线程,但是当我start一个其他activity后,又finish掉那个acvitity回来,又会走到这个surfaceCreated方法,这时候走到线程的start方法,它会报错Thread already exist…

1加6投屏_6月1日起驾考要加项目?真相是这样

来源:新闻晨报近日网上流传一则消息让还没考出驾照的朋友们瑟瑟发抖网传消息称,上海、海南、陕西、贵州、浙江等地驾考科目二于6月1日起加项,因而“朋友们要抓紧时间报名,录入旧系统”。网传消息截图上海6月1日起科目二考试增加到…

Java this关键字

this 关键字有三个应用:  1.this调用本类中的属性,也就是类中的成员变量  2.this调用本类中的其他方法  3.this调用本类中的其他构造方法,调用时要放在构造方法的首行 来看下面这段代码: public String name;public void sh…

linux下查看线程数的几种方法

1、 cat /proc/${pid}/status 2、pstree -p ${pid} 3、top -p ${pid} 再按H 或者直接输入 top -bH -d 3 -p ${pid} top -H手册中说:-H : Threads toggle加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。 4、ps xH手册…

网站等保测评针对服务器,互联互通测评知识分享之信息安全建设要点

原创 医疗测评实验室 中国软件评测中心 1周前医院互联互通测评,即国家医疗健康信息互联互通标准化成熟度测评,近年来随着政策的要求、需求的驱动、技术的更迭、价值的引领,越来越被业内人士接受和认可,测评热度也水涨船高。国家卫…

树樱花满树繁花

废话就不多说了,开始。。。 学院的樱花开了,花开的很盛,满树的繁花扬张着天春的力活。 武汉三月的时候樱花就开了,武大的学同在空间里发各种玩游的照片,真是羡煞旁人。大连的天春来得晚,但究终还是赶上了。…

pandas合并groupby_pandas实践之GroupBy()

官网地址:https://pandas.pydata.org/docs/reference/groupby.htmlpandas中对数据进行分组操作的方法,官方有很详细的教程。下面的案例是真实遇到的问题,看一看用pandas是如何解决的。构造数据import pandas as pdimport numpy as npdf pd.D…

自学 web 前端人怎么找工作?

1,你做过的项目可以体现你的价值。2,你的个人博客可以反映你的思考。3,你的GitHub页面可以展示你的项目。4,你项目中的代码可以看出你编程的风格。1,2,3,4之间有交集。当你能证明,你…

《Breakfast At Tiffanys》

"生活中似乎有些男性想象着能拯救和引导一个年轻美丽纯洁善良却迷茫的女子,有些女性也想象着能用自己的善良与包容来安慰一个才华横溢却饱经苦闷与贫穷的男子,老实说,这很有成就感。虽然我的语气有些讽刺,但我相信在这些“光…

项目不需要SVN控制的时候,该怎么办

今天要用一个项目,当项目不需要SVN控制的时候,我们一般怎么办哪?可能很多人设置Windows显示隐藏文件,然后将项目中的所有.svn文件删除。下面,从网上找了个非常简单的方法第一步:建立一个名字叫做remove-svn…

erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术

文章转载自微信公众号CSDN,作者冰清-小魔鱼,版权归原作者及刊载媒体所有。在定量遥感或者高光谱遥感中,信息提取主要用到光谱/波谱分析技术。本专题对光谱/波谱分析中涉及的流程及一些技术进行讲解,包括以下内容:基本概…

Zipkin-1.19.0学习系列1:java范例

2019独角兽企业重金招聘Python工程师标准>>> 官网地址: https://github.com/openzipkin/zipkin http://zipkin.io/ https://www.oschina.net/p/zipkin 截止到2017/1/4为止,最新版本为: Zipkin 1.19 下载地址: https://github.com/openzipkin/zipkin/arc…