小记--生产服务优化过程

PM刷题小记 iQiyi PM刷题 对1-31PM题总结 1.移动端APP开发成本最高的是?(Native App) WebApp:针对iOS/Android优化后的web站点,用户不需要下载安装即可访问。 Native App(原生App):基于智能手机操作系统用原生程序编写运营的App。运行时是基于本地操作系统的,所以它的兼容能力和访问能力更好,拥有最佳的用户体验、最好的交互界面,但开发难度最大,开发成本和维护成本最高。 Hybrid App(混合App):是指半原生半web的混合类App,同时采用网页语言和程序语 阅读详情

本文记录了一次生产环境问题的排查和处理过程,虽然是件小事,但主要是由此引申出DevOps的意义和所需技能。

一、问题回顾

这里写图片描述

线上有钱用是一个在线注册、在线提交资料、自动审核、自动放款的的小额信贷产品。

1. 首先是进件压力上升

6月28在线投放稍微放量,当天注册用户是平时自然流量的10倍,认证资料进件压力大增,风控处理缓慢,由于风控是公司公共基础服务,所以对其他产品也造成了延迟响应影响。公司的一个产品期望风控优先处理他们的进件,因为他们是线下销售获客。于是我们临时暂停了有钱用注册业务和进件业务,直到晚上凌晨才放开。接着是风控加机器以应对突增峰值。

2. 服务接口响应缓慢

第二天早上一切正常,准备找找需要优化的点进行优化,中午正在去去吃饭路上,突然服务告警,根据健康检测告警提示,服务接口响应缓慢(监控检测要求5秒内响应),并且一直告警,于是乎赶紧会公司排查处理。查了一下最近访问响应耗时(目前监控还不完善),发现普遍耗时较多(从几秒到几十秒),已经远远超出正常耗时(几十毫秒)。初步判断是某些请求耗时较多,导致很多连接被长时间占用,从而其他请求也都进入了队列等待,导致延迟,趋向于DOS攻击情况。

这里写图片描述

幸好前一阵将http和dubbo接口调用情况都写入了ElasticSearch,于是使用ES查询了下平时耗时比较多的几个接口,发现都与公共服务的几个dubbo接口有关,于是乎基于dubbo方法维度配置了一下这几个dubbo接口的最大并发线程数量。上线完成后,效果很明显,平时耗时较少的接口也都恢复正常服务了,监控检测也正常了。为了应对更多的请求,有钱用业务前置也适当的扩增了实例。

3. 数据库IO压力上升,数据同步延迟严重

自从扩增了实例,优化了接口,后台服务所能承载的请求就更多了,表面一切正常。但是第二天早上10点一放开提现接口,运维就说数据库压力上升,主从同步延迟很严重,并且是从10点开始,但是没有更具体的描述了,只能自己排查。为了不影响其他业务,暂停了提现业务,然后等数据库压力下降,据说主从同步恢复执行了1个小时。

初步排查提现接口,发现就是插入了3条数据,发了一个MQ消息,就没有了,并且没有数据更新。然后查询ES,发现提现接口响应也很快,这就有点奇怪。然后怀疑是有攻击,于是通过ES筛选了下访问量大的IP和用户,然后分别查看每个IP下以及每个用户的访问详情信息,经过仔细分析也没有异常,频率正常,频次稍多点,耗时正常。然后就开始怀疑人生了…

这里写图片描述

经过上面的分析,提现接口上下都有几个其他接口请求,并且很有规律(我们的提现额度每天有限,需要用户抢的~>_<~)。既然数据库IO压力上升,那就与数据写入有关,并且应该是大量数据频繁写入。为了探明这几个接口是否真有问题,需要知道请求流量情况,但是晚上了,都下班了(包括运维),自己又没有权限查看生成环境nginx日志进行分析。既如此,自己动手丰衣足食,在请求入口拦截器将请求体大小写入ES。

写是写入了,但是一个个的数据值,我怎么分析走势和对比啊(ES数据还没配置可视化分析工具,近期准备自己写可视化工具呢,但是还没来得及写就需要用了)。

这里写图片描述

现在写也来不及,幸好有Excel,然后将数据导出到Excel,利用Excel的图标工具将请求流量和PV进行了可视化,经过可视化分析发现在今天早上10点流量暴涨。

这里写图片描述

然后自己将手机连上代理,自己就开始点提现,发现每次点发送提现验证码,除了会请求提现接口,还会附带其他5个数据上传接口,试了好几次都是这样。因为这几个接口上传的数据,后天都会进行异步处理,所以http耗时很少,响应很快。并且有几个都是全量上传,我也是醉了。现在修改客户端APP也来不及了,一个是都下班了,一个是发版还需要很多个小时。只能从服务器着手处理,于是乎采取了一个简单粗暴的方式,基于用户维度,半小时内重复请求直接丢包。

第二天早上效果很明显啊,数据库压力不再暴涨了,只有小幅上升。

4. 进一步的优化

  • 耗时较长的接口限制并发量(基于用户、IP、设备维度),防止DOS攻击。
  • 数据上传的接口限制并发量和请求流量(基于用户、IP、设备维度),防止DOS攻击。
  • 客户端APP优化数据上传,减少带宽占用,以便应对流量峰值或流量攻击。
  • 完善监控服务。

二、DevOps意义和所需技能

上面的问题排查和处理都是当天几乎是自己一个人在处理。如果自己只会业务功能开发,估计需要好几天才能处理完成。在快速发展的互联网+时代,有个众所周知的名词“敏捷开发”,在研发的世界中还有名次是“DevOps”。DevOps是一种互联网公司结合自身业务本质构思出全新工作方式的过程中所采用的实践,而他们的业务需求也很直接:以史无前例的节奏对自己的系统进行演进,有时候可能还需要以天为单位对系统或业务进行扩展。

如何做到快速高效处理生产服务紧急问题呢,又需要哪些技能呢?

1. 全局观

从业务需求出发点到研发实现,从研发实现到运维部署,以及服务基础设施,从业务前置到各个公共基础服务的业务和架构,都要做到心中有数,才能在关键时刻想到多种处理方式。

2. 工欲善其事必先利其器

  • 首先会使用第三方工具和脚本,不一定深入其髓,但是至少需要涉猎,最好能自己动手操作过。
  • 需要自己拥有开发工具和写脚本的能力,第三方工具和脚本不一定能找到,及时找到了,也不一定完全符合自己的所需,需要修改。
  • 工作中实现更多的自动化运维和监控工具,推荐使用开源的,同时期望自己写的工具也能开源共享。

3. 自信力+折腾

如果想实现好的DevOps需要让开发人员更多地控制生产环境。要想学会和拓展技能需要敢折腾,敢折腾才有机会。还要能折腾,折腾过程中会遇到前所未有的各种困难,你需要有足够的自信力和耐心克服。最终走向会折腾,熟能生巧,一方面是技能上熟练了,另一方面心理也被磨练的成熟稳重了,在后期的折腾中会更加高效。

4. 共享

自己再牛,也是有极限的,并且提升速度会越来越慢,一个团队都牛才叫牛。将技能和经验进行无私传递和共享,让更多的人学会,让更多的人超越自己,自己就又有了学习的榜样,前进的动力。


三、防患于未然

上面讲解了开发和运维,同时期望开发人员平时注重对业务的深入理解和拓展。另外在平时工作中期望大家能做到“防患于未然”或趋向于“防患于未然”,有时候只是一个顺手的事情,注重安全防范工作内容,“辛辛苦苦大半年,一下回到解放前”,起码还有点本钱东山再起,如果安全漏洞导致数据全部被删掉…呵呵哒

这里写图片描述


arXiv订阅进阶玩法:除了邮件,还能用RSS和Python脚本打造你的专属论文追踪器 本文介绍了arXiv订阅的进阶玩法,教你如何通过RSS和Python脚本打造个性化的论文追踪器。突破传统邮件订阅的局限,实现实时更新、精准过滤和自动化管理,提升科研效率。特别适合需要高效追踪最新研究进展的学者和开发者。 阅读详情

相关推荐

立创EDA实战:基于NE555的夜间氛围呼吸灯电路设计与模式切换

本文详细介绍了使用立创EDA设计基于NE555芯片的夜间氛围呼吸灯电路。项目核心是利用NE555产生PWM信号,并通过RC充放电电路实现LED亮度的缓慢周期性变化,形成呼吸效果。文章手把手教学,涵盖从电路原理分析、元件参数计算,到在立创EDA中进行原理图绘制、PCB布局布线,直至焊接调试的完整硬件设计流程,是电子爱好者入门实战的经典项目。

weixin_42153793的博客 124

解决生产页面接口响应速度太慢的问题小记

生产问题解决小记

weixin_42440011的博客 757

编写用户帮助/操作手册指南

一个新系统,需要写用户操作手册,该从何下笔?本篇是一篇教你编写用户帮助/操作手册的指南~

pytester的博客 3万+

【微服务系列】服务治理小记

本系列准备介绍微服务框架的相关内容,以我目前在用的kite框架为栗子,也扩展一些业界常见的实现,主要包括一下的部分: rpc框架基础 kite的具体实现 服务治理概述 其他实现细节及优化 微服务系列之前写过RPC基础和kite的具体实现两篇,服务治理的这篇拖得有点久。因为服务治理真的是个很大很深的话题,随着时间总是有不同的感悟。最终决定还是先写一篇,暂时地完成这个系列。后面可以再开新篇,毕竟写博客更多是为了总结记录反思进步。 文章目录流量治理负载均衡P2CEWMA衰减函数熔断断路器弹性熔断限流总结 .

shanxiaoshuai的博客 1006

ESP32连接OneNet云平台实现多设备联动控制完整示例

通过esp32连接onenet云平台,实现远程设备间的智能联动控制,利用MQTT协议完成数据通信,esp32连接onenet云平台后可高效稳定地上传与下发指令,提升物联网系统响应速度与自动化水平。

weixin_42360733的博客 547

044、镜头脏污与异物检测:产线 AOI 检测方案与 ISP 脏污补偿

文章摘要(148字) 本文针对镜头生产中的脏污检测问题,提出产线AOI检测与ISP补偿结合的解决方案。产线端采用明场、暗场、偏振三通道联合检测技术,将油污漏检率从8.3%降至0.2%。ISP端通过RAW域局部梯度分析和频域补偿算法,动态修复产线漏检的微小脏污。作者结合实战案例,详细分析了传统灰度阈值法的局限性,并给出多模态检测的代码实现要点,强调必须建立"产线拦截+终端补偿"的双重防护机制。

sundong_81的博客 227

java = 优化_JAVA性能优化工具小记

好记性不如烂笔头,戊戌年的最后一个工作日,把自己平时在开发过程中使用的一些java性能优化工具做一个简单的小结,主要包括 jvisualvm、jfr、gdb和查看内存对象信息的几个linux命令。注:当前系统属性Mac OS X 10.13.6,jdk版本 1.8.0_1511:jvisualvm(当前java自带的工具)可以看到jvisualvm不仅支持本地应用程序的追踪还支持远程。然后打开对...

weixin_42508215的博客 235

unitree-G1外接 USB 麦克风完整配置指南

首先,将type-c麦克风插入G1机器人的USB口后,记录下USB麦克风的卡号(card)和设备号(device),通常显示为 card 1: Device [USB Audio Device]

m0_47999117的博客 589

spark sql 本地调试_spark优化小记

R同学速成spark之后,扔过来一段spark app,每天定时的运行(崩溃)在EMR集群中。这个spark app主要负责离线处理数据,刚部署在集群中时,消耗500 core, 4T内存,每天4个小时可以完成任务。没过多久,随着数据变化,执行时间增常到12个小时以上,spark程序崩溃更是家常便饭,有时通过retry可以成功,如果retry也不行,就只能花钱加资源。本文并不是Spark性能优化指...

weixin_39718173的博客 241

SAP CDS View association 的工作原理,与数据库传统 join 操作的区别讲解

笔者前一篇教程,介绍了 SAP CDS View 里如何创建 association:本文就来一一对这些问题进行解答。首先我们来研究如何消费创建好的 SAP CDS View 中的 association 数据。在上图 ABAP Development Tool 里展示的 CDS View 界面,点击 F8 快捷键,进入 Data Preview 即数据预览界面。我们随便选中一条行项目,右键,发现右键菜单里,赫然有一条的菜单项。看来这个功能肯定和 association 相关了。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1002

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

出现该Bug的原因主要是 账号密码无法登录,但原先使用该代码测试qq或者163的时候是可以通过的!问题在于各个公司邮件所处理的代码方式不一样

码农研究僧的博客 3503

JAVA性能优化工具小记

好记性不如烂笔头,戊戌年的最后一个工作日,把自己平时在开发过程中使用的一些java性能优化工具做一个简单的小结, 主要包括 jvisualvm、jfr、gdb和查看内存对象信息的几个linux命令。 注:当前系统属性Mac OS X 10.13.6,jdk版本 1.8.0_151 1:jvisualvm(当前java自带的工具) 可以看到jvisualvm不仅支持本地应用程序的追踪还...

weixin_30293079的博客 185

液滴碰撞壁面的过程背景论文——bouncing反弹,spreading扩展,splashing飞溅。铺展过程介绍。还存在很多未解之谜。

【1993-德国-Phenomena of liquid drop impact on solid and liquid surfaces】液滴碰撞壁面的过程背景——bouncing反弹,spreading扩展,splashing飞溅。还存在很多未解之谜。还存在很多未解之谜。不同液滴形状碰撞过程。

qq_15963745的博客 199

spingcloud小记

1.什么是springcloud? springcloud其实没有进行硬编码,它是一直架构的体现,将原本一个整体的服务架构拆分成了无数的小模块,断开了原本一个整体架构直接的耦合程度,使各个小模块之间相互独立.,服务之间一般通过HTTP 的 RESTfuL API 进行通信协作.并使用springboot整合了许多其他的主流的框架. springcloud本身并没有进行代码的编写,它更像是一个容器将所有流行的框架进行了整合. 通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发

QiYang1024的博客 389

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Tomcat小记

1. Tomcat核心组件 2.常用配置修改 2.1 端口 2.2 修改内存 2.3 热部署 2.4 数据库连接池与数据源 2.5 Tomcat实现web管理 3.Tomcat配置单点登陆 4.Tomcat安全配置 4.1 关闭Tomcat服务器shutdown端口 4.2 隐藏版本信息 4.3禁用Tomcat管理页面 4.4自定义错误等页面 4.5AJP端口管理 4.6启用Cookie的HttpOnly 1. Tomcat核心组件 Tomcat的核心组件有两个,一个...

fateasstring的博客 351

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

陌生又熟悉的多年老友【Kafka】小记

这是一篇闲文小记,由参考多篇网友对kafka的理解,再回想自己的对kafka的应用不由得有感而谈。

m0_59806124的博客 813

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

接入chatGPT小记

由于业务需求,我们接入了 ChatGPT 作为生产力工具辅助工作。实际上,接入 GPT 的过程较为简单,只需在 HTTP 请求中加入授权 Bearer Token,配置无误后即可轻松调用,因此这部分就不再赘述。然而,业务方在实际使用过程中反馈效果并不理想。后来,有同事推荐了一个开源工具,效果明显更好。出于对比思考,我下载了该项目的源码,经过分析后我认为,其优势主要在于提示词的设计——他们的提示词非常优秀、值得借鉴。

qq_39004108的博客 232

记一次生产频繁出现 Full GC 的 GC日志图文详解

目录:1. 场景描述2. 正文2.1生产 GC日志文件2.2 JVM 内存结构解析2.3生产环境配置2.4 生产 JVM 内存参数设置2.5 图解分析一条 GC 日志2.6CMS...

码上修行 1416

项目投产小记

项目投产小记项目虽然还没完,但还是忍不住想说一些。项目名,我们暂且叫它A,在此之前,用户正在使用一个系统叫B,B是基于DOS用FOXPRO开发的,但您可别小瞧了它,B无论在人性化设计,操作方便性,业务覆盖,性能和稳定性上都算得上是很不错的系统。B系统从最初版本到现在已整整经历了十年的时间,替换B系统并不是它在使用上,业务等方面有什么问题,主要还是基于未来发展的考虑,B是基于DOS的,因此,B客

mudboy的专栏 1256

RabbitMQ优化配置小记

消息确认机制: @Bean @Scope("prototype") public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate template = new RabbitTemplate(connectionFactory); template.setMandatory(true); template.setMessageC

qq_38860828的博客 1750

关于vue项目优化个人小记

vue项目的编译优化和打包优化是一个不可避免的问题,下面是小记录。 1.在生产环境中,我们路由中的组件引用方式应该是 import (module.exports = file => () => import('@/pages/' + file + '.vue') ) 在开发过程中,我们的组件引用方式应该用require (module.exports = file => ...

weixin_34112900的博客 94

使用Opcache小记

opcache是个提升php性能的利器,宝塔用户直接在php扩展里面安装就行了。理论上php运行效率是可以显著提升的。当然我没有空去实际测试。最直观的就是服务器内存使用率下降了。 当然部署之后又有了新的麻烦,网站更新后私货看不到更新的东西,关闭缓存模块也一样看不到,人生在于折腾可不是吗。 对于研发环境呢我觉得不用装,装了反而麻烦事一堆。生产环境下我们就只能通过其他办法解决了。综合权衡下其实也不...

Yafully 297

近日踩坑小记

一、订单重复结算问题 1、订单设有标志位,区分已结算和未结算订单; 2、结算开始查询标志位,对未结算订单进行结算; 3、结算函数加锁; 4、结算开始加入redis缓存结算中订单 prefix+orderId ,结算中订单不重复结算,结算结算去掉缓存; 以上处理后仍存在重复结算问题: public synchronized void orderFinish(Orders orders);仔细检查后发现是传入订单的问题; 并发结算同一订单时缓存了结算前的订单信息(此时订单未结算),处理方式是结算时重新查询该订单

weixin_39617267的博客 239

springboot学习小记

思维导图:https://www.edrawsoft.cn/viewer/public/s/72a06689197636 1.springboot是一个快速整合第三方框架,简化XML配置完全采用注解化,内置http服务器(jetty和tomcat),最总以java应用程序进行执行(默认端口8080) 2.@RestController表示该类中的所有方法返回json字符创(@Controlle...

weixin_30609287的博客 173

关于Redis小记(待补充)

1、pipeline 使用看场景,对于批量提交请求且无需立即返回结果的需求较友好 2、生产环境慎用复杂命令,如keys、del、flushdb等,这些指令耗时,可能造成redis堵塞 3、自定义缓存,实现代码优化 ...

吱吱或姿姿的博客 154

Next.js 网站部署踩坑经历小记及前端站点部署技巧

前言 在入职两个月后,我开始了第一个完全由我一个人负责开发的网站项目。这个网站的用途是用于 宣传一个开源社区峰会 以及 沉淀峰会视频内容 ,在峰会进行期间还需要在网站进行 直播 。从网站的开发到部署上线,可谓是踩坑无数,最终实现的网站在这里 https://apisix-summit.org/ 背景 由于时间有限,整体网站的架构是基于 vercel 的一个网站脚手架 virtual-event-starter-kit 之上进行开发,因此并不需要从头构建项目。 这个脚手架使用的是 next.js 实现服务端渲

weixin_47077674的博客 5326
上一篇: SpringMvc/SpringBoot HTTP通信加解密
下一篇: 基于先序遍历 输出二叉树叶子节点的路径(非递归)
ShadowWalker
博客等级 码龄16年 78粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值