当用户碰到问题时极少会选择反馈,沉默的是大多数,现在不少 APP 比如知乎都提供了摇一摇弹出用户反馈入口,减少进入功能模块的时间成本,不过遗憾的是,针对同一个问题一百个人有一百种描述方法,用户反馈的语法分析和文本分类是一个大工程。另外通过排查传统基础层的方法很难快速定位到问题,比如运营商光缆被挖断,导致某地区 CDN 图片异常告警居高不下,由于用户到后端资源的不透明性,问题可能出现在缓存配置可能是因为小运营商非法调度也可能出现在源站,当你排查一圈后突然恢复了,诸如此类问题,通过主动监测可以快速定位到问题
那么什么是主动监测呢?主动监测是使用 SDK 在 APP 编译或者运行时自动地对代码进行注入下发监测任务,模拟用户真实请求,然后动态采集上报数据的一种技术,主动监测可以根据需要均衡采集,避免全采样或者频繁上报数据导致用户移动数据流量的流失,它还支持 ping、traceroute、nslookup、抓包等网络性能问题定位的手段,另外可以提供完整的访问瀑布图包括错误元素
主动监测可以用于大网波动感知、CDN 监控、网络劫持监测
大网波动感知比较好理解,就是通过不同省份不同运营商的用户去探测访问节点,然后得到各地区到各运营商的平均延迟和丢包情况,从而判断区域间链路故障情况
通过主动监测可以让 CDN 服务更加透明,可以考核前期选型、后期质量达标情况,可以评估变更效果,比如回源使用 https、调整加速资源、调整解析调度策略等变更对用户页面加载速度的影响,可以检测出现异常时是否由 CDN 引起的,我之前碰到过一起支付成功页证书连接不安全的问题,由于下发资源是千人千面的,同时 JS 回调中混着非京东域名图片连接,传统排查方法在较为低效。另外在大促高峰时期,可能需要借助第三方 CDN 提供商抗量,我们可以监测对比各三方的加速效果,包括但不限于可用率、下载速度、覆盖率、DNS 解析时间、首包时间、建连时间,同时可以监测第三方证书配置情况
最后说说网络劫持监测, 流量劫持一般是通过链路劫持插入特定报文或者抢答,另外一种是 DNS 劫持,它返回非真实网站 IP 地址,这两种都会使得客户端获取到错误数据,进而显示广告或者点击弹窗跳转,网上有一个前端神器 Subresource Integrity, 它是通过生成文件的唯一 hash 值进行对比校验的,但是对于大体量公司来说,涉及到多团队协作推进和后期新增模块约束保证,难度比较大,这个时候可以借助主动监测监控和处理劫持问题,劫持数据返回时间会比正常的时延低一个级别,TCP 握手时候的 TTL 返回值会明显不一致,我们可以利用这些特点进行异常检测,另外可以利用白名单机制维护元素域名白名单、主机 IP 白名单、CNAME 信息,但是会造成 APP 动态加载配置数据膨胀,需要一定的取舍,重点保障核心利益域名
DNS 劫持涉及到买卖流量这个灰色产业链,想避免 DNS 劫持的话尽量不要使用运营商默认的 DNS, 可以使用移动解析 (HttpDns),它基于 HTTP 协议向公司的 DNS 服务发送域名解析请求,替代了基于 DNS 协议向运营商 Local DNS 发起解析请求的传统方式
BLOG 连接:www.liangsonghua.me
作者介绍:京东资深工程师 - 梁松华,长期关注稳定性保障、敏捷开发、微服务架构