一个500人使用的后台服务站点优化过程

  三天小假稍作调整,停下来思考下曾经的一次优化经历,结果上是好的,过程也是曲折的,在稍微大点的公司,一切都是需要靠证据说话的,下面直落正题——

  一、背景:

  由于项目的票量上涨,客户来电量的增加,尤其是天气不好的时候,航变外呼的急剧膨胀,目前的后台处理系统在经历了3年的风风雨雨之后越来越重,服务中心的MM们隔三岔五的反馈后台系统在业务高峰期出现频繁的卡顿和不可用。

  二、后台系统卡,博主经过沟通和分析,觉得主要是这么几个方面:

  问题来了

  1.代码问题,该异步的没有异步,同步调用导致页面整体加载时间长

  2.由于功能太多,页面有没有一千也有八百,代码内部出现没有侦测到的死循环导致服务器CPU飙高,内存爆炸

  3.网络问题,服务中心由于人数众多,没有在公司的总部大楼而是放在房租较便宜的地方,而服务中心的目前投入不是很大,网络带宽上存在一定问题

  三、拿到问题的思考:

  针对第一个问题,从程序员的角度看,还是比较大的嫌疑的,但是后台大部分功能都是报表类的处理页面,实际上异步没什么太大必要,对页面加载本身没有实际的提升,有一点嫌疑。

  针对第二个问题,博主跟进多次之后,发现实际上在服务中心卡的时候,实际上同期的CPU和内存并没有发生什么异常,这个铁证如山可以排除。

  针对第三个问题,博主去服务中心实地体验过,确实在发生卡顿和不可用时总部这边并没有什么异常,因为运营商务的也需要使用这个后台系统,他们实际并没有受到影响。嫌疑很大。

  四、问题的处理方法:

  从嫌疑最大的入手,联系了运维大爷表示了一下想要他们实地去看下我们服务中心的网络是否存在问题。然而运维大爷口头答应,实际上并没有一个实际行动,当时博主有点不开心了,但是没办法,我又管不到他们,用这种请求的方式去要求他们协助,实际上就是拖拖拖。

  在人员架构十分冗长的公司,需要推动一件事,那就需要证据和意义,然后叫上需要配合的对方领导,让他们来决定需不需要去完成这件事。

  那第一步,我需要的是证据。

  着手搭建一个监控系统,这个监控系统需要帮我完成这么几件事,

  1.能够追踪到每一次请求的请求时间耗时和请求的来源

  2.需要在总部和服务中心之间的网络有一个对比

  3.请求的耗时需要是发起请求到接收到响应流的这段耗时

  4.需要将每次请求的客户端响应耗时和服务器端的响应耗时进行匹配形成对比

  五、开工干活:

  1.这个监控系统的数据埋点如何收集:

  答:设计了一个windows服务小程序,安装在需要收集数据的相关机器上,这个服务每次开机自动开起,每隔100秒模拟一次页面请求(请求的页面从客服反馈出来的常用页面中甄选出来五个),从发起请求的时候开始计时到接收到整体的响应流之后结束,将耗时记录下来。

  由于需要每一次客户端和服务器端的响应需要匹配起来而且需要区分请求来源于服务中心还是总部的机器,因此发起请求的时候会将请求的时间和一个唯一标识以及区分服务中心和总部的标识通过get方式带到服务器端。

  请求结束之后,服务器端会将唯一标识,加载时间和区分标识保存到redis服务器上,最终落地到数据库中。windows服务在请求完成之后会将客户端收集到的数据通过接口记录到redis中,最终落地到数据库中。

  2.数据拿到之后如何实时进行监控到:

  答:收集到数据之后的数据展示,博主这边采用了比较能够清晰呈现的Highcharts JS图表库。

  Highcharts个人使用下来的感觉就是很方便,数据绑定的多样化和报表呈现的多种格式,博主只能用实用这两个字来形容。

  最重要的是各种数据源之间的对比用起来非常的直观,四个字,高下立判。

  六、后记:

  监控系统搭建完毕之后,一切都变得如此清晰,下面的优化方案就很清晰了,在业务高峰期的服务中心报表所呈现出来的加载耗时只能用惨来形容,客户端请求基本都在4s左右得到反馈,而服务器端的耗时基本稳定在1s内,同期对比,总部这边的客户端加载时长在2秒左右,服务器端的耗时在1秒内。

  邮件向领导们汇报下当前的现状和优化的方案,得到认同之后,运维大哥很快的实施了起来,很快负载加上了,网络也进行了调整。

  七、感悟:

  1.看似难以推动的问题,找到痛点,就能一击致命。

  2.控制变量法,永远都是面对问题最稳健最让人信服的方法。

  3.幻想无数不如动次真格,事情只要去做了,实际上会没那么难

时间: 2024-11-01 23:57:53

一个500人使用的后台服务站点优化过程的相关文章

总结之踩过的后台服务报500的坑

有时候遇上服务报500的错误,500错误是内部服务器错误.根据工作中所爬过的坑,小结一下目前遇到的服务报500的情况大致有下面几种: 1.数据库异常:1)检查数据库服务器,是否能够正常连得上,数据库机器或者是否挂了:2)检查服务上的数据库相关的配置,是否正确:3)检查swagger,看swagger页面是否能够正常访问,swagger里面的后台接口能否正常获取到数据库里面的数据:4)如果数据库正常.配置正常,swagger也能获取到数据,而且查看日志的时候,发现日志报某些表不存在,但是登上某一台

Parse 构建移动APP后台服务(一)

目前正在开发的产品告一段落,有时间总结下经验,也顺便分享一下我们主要使用的平台-Parse. 什么是Parse? Parse是一群美国人开发的专为移动APP服务的云计算平台,与现有的其他云计算平台相比,Parse除了提供Restful的service 之外,也提供了官方的iOS和Android SDK.个人认为高质量的client端SDK是Parse区分与其他云服务的核心优势.为什么呢?看完我的文章就知道了. 为什么要用Parse? 先想想开发一个简单的需要保存用户数据的APP,你需要做什么.非

后台服务标准化运营

版权声明:本文由廖念波原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/148 来源:腾云阁 https://www.qcloud.com/community 为什么要服务标准化 一套互联网后台服务的开发和运营涉及到非常多的细节: 访问其他服务模块,服务端IP如何管理?网络报文格式是怎样的? 有哪些配置文件? 用到哪些第三方的库? 业务逻辑和基础框架是如何分离的? 对外提供怎样的网络接口?怎么对外提供接口API和文档? 运

Android中如何像 360 一样优雅的杀死后台服务而不启动

Android中,虽然有很多方法(API或者shell命令)杀死后台`service`,但是仍然有很多程序几秒内再次启动,导致无法真正的杀死.这里主要着重介绍如何像 360 一样杀死Android后台服务,而不会再次启动. 一.已知的 kill 后台应用程序的方法 android.os.Process.killProcess(pid); activityManager.killBackgroundProcesses(pkgName); kill -9 pid 这三种方法都可以“杀死”后台应用程序

OData(01) - 使用OData高效构建后台服务

使用OData高效构建后台服务 如题本文是要说OData的,无论了解还是不了解都可以看下,本文的前半段无论是做NET还是JAVA或者其他的朋友都同样适用,不过还是以NET为样例说明,后半段就有点晦涩看大家心情了. 开发后台的问题 这里要先称述下后台服务的发展历程,从WebService的出现后到现在出现了很多后台服务相关的概念及框架概念有服务化.Restful.微服务等等,NET中的框架例如WCF.WCF数据服务.WCF Rest.MVC最后到WebAPI. 到目前为止,无论出现了多少概念还是框

开源一个golang小程序商城后台(moshopserver)

开源一个golang小程序商城后台(moshopserver) golang和c/c++比起来是一门新的语言,一直想学,网上搜集了一些资料,有些人说很容易上手,确实是这样,和C/C++比起来,少了很多乱七八糟的语法.学一门新的语言,最好的方法就是动手写一些东西,最近小程序也比较火,也想学一下,网络上搜索的一些开源项目,基本上没有golang实现的,大部分都是nodejs和java写的,那么我就来实现一个golang版的吧,一石二鸟. 开发小程序前后端都需要开发,自己的前端经验很少,搜索了一些开源

微信小程序后台服务的发布

首先需发布小程序后台服务需要满足以下条件: ①服务的域名必须为备案的Https网站,支持二级域名不支持IP地址加端口的域名 ②其次部署服务的服务器系统环境需支持TLS1.2以上 一.Https网站 需要将普通的Http网站转换为Https网站,则需要ssl证书,将证书直接绑定到网站上即可,获取证书的途径主要有以下几种: 将Http网站就需要有以下几个途径: (1)在腾讯云或阿里云去申请,由于有效期只有一年,到期后需要重新申请替换,也比较麻烦,此处就不做讲述 (2)购买收费的ssl证书,这个简单易

问题解决系列: 后台服务流量控制- 控制访问别的服务的速度

互联网的后台提倡大系统小做,微服务化.所以后台服务之间相互依赖,我依赖别人的,别人也依赖我的,这很正常. 但是后台服务讲稳定性.只有一切可控,才能谈稳定性. 为了不冲垮下游的服务,我们有两种做法:一种是下游服务做一个自我保护(具体实现方法下次再写),一种是上游保护下游. 比如A服务向B服务发送消息,B给A分配了每分钟3000条消息的访问量.那么A如何控制自己每分钟的访问量在3000次以内呢? 基本思路: 这是个分布式的问题,A服务可能包含了堕胎机器,所有的机器共享一个设定的配额 3000次/每分

highchart访问一次后台服务返回多张图表数据

本文承接上一篇,我们制作动态图表的时候,往往需要的不止一张图表,如果每张图表都与服务接口做一次交互的话未免太过频繁,这无论对前后还是后台都是一种压力,本文介绍一种一次访问返回多组数据的方式来减少前台与后台服务的交互,闲话少说,查看动态效果  →.→ 详细代码 ←.← 如上文所示,highchart 的 chart 属性可以添加 events 事件,上文中我们插入的事件为: events: { load: function () { var series = this.series[0]; var