• 飞机找不到,流量哪去了?记一次移动WAP网关导致的问题


    这几天随着客户端一个新版本发布,运维发现CDN的流量猛跌:

    话说流量就是金钱,流量就是工资。领导很生气,后果很严重。没什么好说的,赶紧查!一开始怀疑服务端有问题,先受伤的总是我们,当然这也是没错的,因为发出去的版本泼出的水,当然先排查能迅速解决的问题。屎劲查(IIS日志分析、CND日志分析……此处省略N个字),确实发现了个bug,但修复后发现流量并没有恢复。

    于是运营统计了下用户的意见反馈信息:

    发现大部分用户都是说cmwap下面有问题,于是赶紧在测试环境试了下,果然重现了,既然重现了按理说问题很好查了,其实这时我已经比较肯定是客户端的代码有问题了。于是开始排查客户端上传的错误日志,但不知道是错误信息记录不完整还是上传不及时,客户端的一些错误码并没有指引我们走到正确的路上……客户端开发也说新老版本代码没区别。

    既然服务端没问题,客户端也好好的,那么只能怀疑是cmwap网络中间传输有问题了,因为cmwap的确是比较奇葩的。我开始怀疑cmwap是不是把http什么请求头过滤掉导致的?就在我茅厕顿开的时候,客户端发现了:

    说是bug也不完全算。客户端发现新老版本有个区别就是请求服务端的时候多带了一个http头:Accept-Encoding:gzip

    我们都知道:

    据HTTP协议,如果你可以处理GZip格式,并且希望服务器以GZip的格式来返回内容,需要在HTTP的请求的Header中声明"Accept-Encoding"为"gzip",如果服务器可以将内容压缩为GZip格式,那么服务器返回的Response的Header中将会设置"Content-Encoding" 属性的值是gzip,同时将返回的内容压缩为GZip格式。

    但是事实却发现移动的WAP网关似乎没有按套路出牌,要不就是把gzip给吞了但同时又压缩了,要不就是返回了Content-Encoding但是没压缩,而且似乎并不是每次都会有问题。至于具体细节,客户端上传的错误信息没有价值,我也没好意思找他们要代码联调。反正测试环境把gzip去掉是好了,等着故障报告吧。

    从这次故障我得出三点式泳衣是有益的:

    1、上线前的集成测试的重要性;

    2、错误信息记录准确完整的重要性;

    3、用户反馈的重要性(新打的客户端包正在给反馈的用户在测试)。

    PS:哪位大神对移动WAP网关比较了解,不吝赐教,总感觉这还不是真相,但跟mh370失联一样真相只有一个!

    PPS:对不起大家,我标题党了。为mh370上的所有人祈福,奖金没了可以再赚,生命只有一次。

    欢迎访问我的新博客:http://zhanjindong.info/2014/03/13/cmwap-accept-encoding-issue/

  • 相关阅读:
    一文学会Go语言
    只用120行Java代码写一个自己的区块链
    精通libGDX游戏开发-RPG实战-欢迎来到RPG的世界
    精通libGDX游戏开发-RPG实战-开发游戏的基本前提
    libGDX开发环境搭建-Android Studio 最新版
    linux下redis的最佳实践(Master-Slave)
    使用Redis实现高并发分布式序列号生成服务
    [libGDX游戏开发教程]使用libGDX进行游戏开发(12)-Action动画
    [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader
    [libgdx游戏开发教程]使用Libgdx进行游戏开发(10)-音乐和音效
  • 原文地址:https://www.cnblogs.com/zhanjindong/p/3599360.html
Copyright © 2020-2023  润新知