背景

业务说明

接到一个业务需求,往DB表中某个字段里新增一些数据,该字段本来是text类型,发现根据业务需求来说,新增数据超过text类型的最大长度,因此需要对数据库表的该字段类型做变更,变更为了MEDIUMTEXT类型来解决业务需求;

数据流转

DB表的数据会通过数据处理转化到mongo中存储,然后mongo再加载到redis中,打点服务会从redis读取该数据,进行json encode,然后做业务处理;

问题过程

  1. 开发反馈打点服务sg、fk集群机器出现响应时间突增以及请求出现大量5xx,运维增加集群机器数量后发现响应时间以及5xx数量并未减少,观察到新开的机器以及旧机器的打点服务进程的go携程数以及占用的内存非常高,开发开始排查具体原因
  2. 运维开始将fk地区请求转到vg地区集群,fk地区的请求响应时间以及5xx下降,服务恢复正常,vg地区表现正常(因为vg的机器多,即使解析慢了还是够应付)
  3. 开发反馈上午某业务需求服务上线新功能会导致mongo中的campaign中的问题字段数据量变大,可能是此变动影响到打点服务,进行回滚相应变动后,观察到sg地区请求5xx的数量逐渐下降,运维开始新开机器并重启旧机器,服务逐渐开始恢复
  4. sg地区服务恢复正常,fk地区请求也迁回fk集群机器,打点所有地区服务恢复正常

问题原因

  1. 运营反馈ss素材报表ctr出现100%的问题,排查到是上线素材区分国家后导致
  2. 开发操作上线修复此问题,同时会导致mongo中的campaign中的某问题字段数据量变大,由于打点通过zeus redis获取campaign数据,并且会进行json反序列化操作,部分单子的该问题字段数据量增大到2M以上,导致打点反序列化效率下降,造成请求堆积,最终导致进程中的携程增加,占用内存资源不断增加,导致服务不可用

问题总结/改进

  1. 信息同步,核心系统出现问题首先在群里反馈该问题,看之前是否有其他项目上线(包括DB/配置变更)导致该问题;
  2. 业务流程梳理,对全流程进行梳理,知悉数据去向和使用,方便问题的定位分析,快速发现问题;
  3. 系统架构优化,打点服务解耦,反序列化效率提升, mongo中campaign信息的拆分,了解到目前有部分信息是独立表的,打点服务在启动的时候会去load数据到内存中;
  4. 个人觉得架构问题是大于流程方面的,但复盘会下来流程问题大于架构,不可否认流程问题得到解决可以避免类问题,但随着业务持续增长/迭代这些问题始终是要暴露出来的;

其他

  1. 咨询了之前UC的同事那边的打点服务,打点服务可以拆分为接受+处理两个模块,接受模块来解析接受请求,然后存储在中间件中(类似kafka,metaQ消息队列),然后处理模块消费处理,这样可以解耦,如果处理失败的话,可以从中间件中重复消费减少损失
  2. 公司的算法强依赖日志,因为日志的确实会导致算法模型训练不准;
  3. 由于公司之前的节约成本的考虑,目前的mongo数据是刚刚够用状态,如果不从成本考虑,mongo机器够多,打点服务就可以马上加机器应对这次事故;临时加mongo机器很慢,因为加了机器还是同步数据,一般加mongo机器大概是1个小时左右,因此出现事故的时候一般不会加mongo机器时间花费太久了;但如果mongo机器只是够用的状态,只加打点服务的机器的话,mongo数据库会顶不住,太多服务连接使用,所以在加打点服务机器的时候出现了服务起不来,因为把mongo弄挂了;
  4. 打点服务的使用方是SDK,SDK发现打点服务返回不是200的时候有重试机制,所以导致打点服务请求暴增,因此引起雪崩了;

【线上问题系列】DB字段类型变更导致核心服务不可用的更多相关文章

  1. 不停机修改线上 MySQL 主键字段 以及其带来的问题和总结思考

    起因: 线上 user 数据库没有自增字段,数据量已经达到百万级.无论是给离线仓库还是数据分析同步数据,没有主键自增 id 都是杀手级的困难.所以在使用 create_time 痛苦了几次之后准备彻底 ...

  2. Mysql中字段类型不一致导致索引无效

    修改后 详细见楼下链接 http://ustb80.blog.51cto.com/6139482/1287847

  3. 一次性搞清楚线上CPU100%,频繁FullGC排查套路

    “ 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题. 当然,这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统 ...

  4. Visio 2007中进行数据库建模时如何显示字段类型以及概念名称

    关于在VISIO中进行数据库建模时如何显示字段类型,以及注释的 1 如何显示字段类型:   在visio菜单上--->点击数据库--->选项--->文档    打开后选择表这项,在上 ...

  5. FIREDAC不能识别SQL的某些字段类型

    FIREDAC不能识别SQL的某些字段类型 经常见有网友有类似的提问:请问各位,在DataSnap中使用SQL数据SUM函数,如果是统计浮点型数值的话,返回是乱码,哪位是什么原因?  其实这不是DAT ...

  6. 放码来战!HMS Core线上Codelabs挑战赛正式开始

    亲爱的开发者,在1024程序员节即将到来之际,HMS Core准备了一场线上Codelabs挑战赛,现向你发出诚挚邀请,希望你能将新奇的想法和对产品的思考融入代码,用技术与世界对话. HMS Core ...

  7. 震惊!线上四台机器同一时间全部 OOM,到底发生了什么?

    案发现场 昨天晚上突然短信收到 APM (即 Application Performance Management 的简称),我们内部自己搭建了这样一套系统来对应用的性能.可靠性进行线上的监控和预警的 ...

  8. MySQL 分区表 partition线上修改分区字段,后续进一步学习partition (1)

    公司线上在用partition,有一个表的分区字段错了,需要重建,结果发现没有办法像修改主键字段或者修改索引字段那样直接一条sql搞定.而是需要建临时表,有down time,所以去仔细看了文档,研究 ...

  9. 如何有效的跟踪线上 MySQL 实例表和权限的变更

    介绍 从系统管理员或 DBA 的角度来讲, 总期望将线上的各种变更限制在一个可控的范围内, 减少一些不确定的因素. 这样做有几点好处: . 记录线上的库表变更; . 对线上的库表变更有全局的了解; . ...

随机推荐

  1. pycharm报错:ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory

    pycharm报错:ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory ...

  2. 什么是IDE(集成开发环境)?

    实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如: 编辑器:用来编写代码,并且给代码着色,以方便阅读: 代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程: 调试器 ...

  3. linq 数据库已存在,直接添加数据

    using System.Data.Linq;using System.Data.Linq.Mapping; namespace ConsoleApplication1388{ class Progr ...

  4. EurekaServer自动装配及启动流程解析

    在开始本篇文章之前,我想你对SpringCloud和SpringBoot的基本使用已经比较熟悉了,如果不熟悉的话可以参考我之前写过的文章 本篇文章的源码基于SpringBoot2.0,SpringCl ...

  5. electron——ipcMain模块、ipcRenderer模块

    ipcMain 从 主进程 到 渲染进程 的异步通信. ipcMain模块是EventEmitter类的一个实例. 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息. 从渲染器进 ...

  6. 【微信小程序】动态设置图片大小

    我们都知道微信小程序的组件image是用来显示图片的,它有一下几个属性:1.src              图片资源地址2.mode          图片裁剪.缩放的模式3.binderror   ...

  7. affine_trans_pixel 和 affine_trans_point_2d的区别

    affine_trans_pixel 和 affine_trans_point_2d的不同在于所使用的坐标系原点不同,affine_trans_pixel 使用的是像素坐标系, 即原点位于图像的左上角 ...

  8. Oracle 11G空表无法导出处理

    通过exp进行数据导出的时候,如果表的数据为空,则会出现警告,并且表也不会导出,不利于数据恢复. 可以通过以下方法进行解决: 一.使用ALLOCATE EXTENT,可以导出之前已经存在的空表 --查 ...

  9. 2.InfluxDB-InfluxQL基础语法教程--目录

    本文翻译自官网,官方文档地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) InfluxQL ...

  10. Jenkins的CI持续集成

    Jenkins的CI持续集成 全局配置 系统管理->全局工具配置,配置Git,JDK和Maven 1)解压maven到当前目录 tar zxf apache-maven-3.5.4-bin.ta ...