免费CDN-网易_上篇_解决之道_性能-网易云捕性能踩坑解决之道上篇、

网易云捕性能踩坑解决之道上篇

  来源:网络 发布时间:2020-08-03 20:01:05时间:08-03 20:01

  从零开始设计开发一个日处理数据8亿的大数据高并发实时系统,哪些性能问题需要特别注意?这里我们一起梳理一下,本文中我将以PE,SA同学戏称的DDOS系统—网易云捕设计开发实践中两年的时间里碰到的真实问题,踩过的坑及解决问题的方法和大家一起讨论如何解决这些问题。文中不会大谈特谈架构设计,只是会在提及问题出现的场景及解决方法时初略带过,没有场景的谈架构设计都是耍流氓。本文着重列举在云捕业务场景下我们碰到的一系列性能问题以及解决问题的思路,帮助一部分有类似场景的人少走弯路,抛砖引玉,欢迎各路大神批评指正。
   为了便于读者轻松的理解后续的描述,有必要开始之前先熟悉云捕的业务场景,我这里简明扼要的介绍一下。
   有统计显示,Crash的出现比率非常高:63%的用户碰到过移动APP crash,在首次启动碰到crash时,21%的用户会卸载App,另外,Crash发生在使用过程中,70%的用户会给予差评。Crash已经成为移动App开发的最大障碍,App开发中进行质量跟踪同样有很多难以解决的问题:用户投诉闪退,但却无法重现;QA投入大量时间测试,还是无法解决各类crash问题;Android机型太多太杂;产品要求快速上线,搭建一个crash收集平台耗时耗力;使用国外的产品,网络不好,崩溃上报问题很大并且使用其它公司的产品,数据安全又难以保证。在此情况下,网易云捕应运而生了,使命就是为了助力移动端的开发者打造高品质APP,精准捕捉APP的每一次质量问题。
   为了实现上述目的,在调研竞品后我们发现云捕需要实现以下功能:
     1 实时展示崩溃、异常、卡顿问题详情,设备信息,崩溃卡顿分类;
     2 实时准确统计分析各类崩溃、异常、卡顿问题次数、影响人数,启动人数,比率等多方位趋势图,实时报警让用户全面掌握产品质量状况 ;
     3 实时准确统计今日问题统计,今日Top3实时展示24小时Top3问题统计排序;
     4 实时准确统计每个崩溃累计的类型设备型号分布图,系统版本分布图;
     5 崩溃、卡顿堆栈实时自动还原;
     6 demo实时展示;
     7 解决方案实时推荐;
     8 用户自助接入,前期不需要审核;
 看上面的需求不难发现,有几个关键词大数据,高并发,实时,准确。为了很好的实现这个需求便有了下面的架构设计图:
 了解完业务场景,看完架构设计图,下面的例子就比较好理解了,为了系统性,下面一个个组件的介绍问题及解决方案。

   DDB篇:
   案例一:某周六,数据量急剧增加,收到哨兵报警:Cause: java.sql.SQLException: Get null from pool;
   解决方案:首先通过命令show process或者show status查看链接数,检查数据库连接数设置及释放正常后,问了其它同事也没有碰到这个问题, 联系DBA同学修改连接数后恢复正常。据DBA同学描述现在一个QS最大可支持1024个链接,可以通过增加QS的数量来提高链接;

   案例二:云捕需要在插入数据的时候根据数据类型实时生成一个类型,某日排查问题发现插入的记录条数和DDB节点数一致
   解决方案:仔细查阅ddb文档发现设置多节点ddb设置UNIQUE key插入不能保证唯一,只能在单节点的集群上保证唯一性。多节点集群需要业务方自己实现,利用redis提供的setnx来实现分布式锁后解决问题,读者也可以通过zookeeper来实现,请自行google;

   案例三:数据插入延迟比较高
   解决方案:1 请DBA同学升级DDB硬盘为SSD硬盘;
        2 批量插入替代单条插入,并且批量插入要控制好batch的数字否则会出现下面的异常;
   Cause: java.sql.SQLException: condition number is: 1124, exceed max value:1024 或者Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (26124567 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.

可以事先通过控制台可以查到部分阈值,查不到的也可以联系DBA同学确认一下。