最近碰到一些很难解决的技术问题:某海外美国节点调用接口失败,偶发性的掉线,影响终端业务,客户体验不好。这也是经常我们在做技术维护的时候遇到的问题。这次发生的最大的难点是不是批量性的,是单点。
这类问题要解决的关键思路:
- 技术问题任何时候都要全面的看,先梳理架构,从 TCP 模型开始,一步一步的建立排错解决思路。a. 网络层---偶发性,非持续性,就需要模拟真实业务环境采集数据做好监控,这个监控节点尽可能寻找跟业务真实环境一致,如果不一致,数据没有任何参考意义。如果一致,大概率有参考意义,从 ping 、MTR 、DNS 、request\TLS 握手请求、加载速度等各个维度持续监控收集数据,并设置告警规则。如果业务有规律的波动,在告警规则的配置上,就考验技术了,阈值一般不能解决这类问题,需要算法来排除规律波动的噪音。 第一步可以先静态收集数据,等待下一次问题出现。
b. 应用层---做好做好代理层、应用服务器 http 日志采集,一般至少要 10+个 header 字段来规范 http 请求日志,具体参考 aliyun WAF 的官网日志字段管理,比较规范了,够用。
c. 主机系统层、数据库层:应用中间件运行日志、数据库慢查询日志、错误日志等。
这些数据全了,理论上数据对得上问题场景,应该是可以找到原因,不幸的是,公网网络环境复杂,大部分时候很难数据和现象堆成,捕获到一致的数据来判断分析。
关于数据,我还想说一点,对于游戏、交易类型的业务,对网络延时、丢包质量非常敏感,建议在 app 端上或者是 web 端做一些网络诊断工具和自动上报诊断数据功能,否则很难通过拨测监控这种方式采集到精准的数据。
其实国内的网络环境稳定性网络链路质量比国外好不少,国外运营商多,尤其是小运营商,路由发布复杂,基建落后,变更多,很多问题很难快速解决。出海业务我们需要把业务基础设施数据层做的扎实一些,如果不做以上这些基本动作,很难,如果做了也不一定找得到原因,上帝保佑!
最后还想说一点,日志数据管理建议用 SLS ELK 这类的分布式实时搜索与日志分析平台,采集数据、存储数据、分析数据都很便捷,当然成本也可能很高,按需选型。
有这些数据了,下一步在做 AI 智能分析诊断和自修复也是有很大的好处,AI 数据需要标准化,接口化,缺不了这些标准动作。
最后一句:巧妇难为无米之炊,God bless us!
