`
chenjingbo
  • 浏览: 456463 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于dump的本地缓存上线问题记录

 
阅读更多

具体的代码在 

基于dump的本地缓存实现.

 

本来以为很简单的一次上线,没想到前后弄了差不多一个下午.最主要的问题有三个

 

问题一 MD5校验不通过

这个问题在daily完全没问题.但是到了线上就悲剧了..刚开始以为是不同机器上,计算md5值不一样造成的..后来我在不同机器算了几次,发现都是一样的...继续查,才发现是自己考虑不周..

这个问题,最初的错误在于

写道
客户端在dump数据流和对应的md5值的时候,发了两次http请求.

 

这本身没有什么问题,但是我在服务端缓存了一份计算好的MD5的值,然后每次客户端在dump数据流的时候,会重新更新这个MD5值..这看上去也没什么问题.但是

写道
线上的机器有多台,如果客户端在dump 数据流的时候,请求到了服务器A,而在请求对应md5值的时候,请求到了服务器B..那么,dump数据流顺带更新的是服务器A中缓存的MD5值,而在服务器B中的md5值是老的..这样的结果就是,md5值不匹配.

 这个属于典型的自己埋雷自己踩.解决方式也很简单

写道
解决方案很多,我觉得比较靠谱的有两种,一是缓存的md5值放在分布式缓存中,而不是本机缓存. 二就有点取巧了.在组建dump数据流的时候,在byte流最后放一段固定16进制字节码.就比如class文件的开头是CAFEBABE一样.客户端就截取这个字符串,然后做校验.

 

问题二  hessian版本不一致

这个问题其实在发布的时候并没有直接遇到.我是在遇到 问题三的时候,怀疑了导致问题三的原因是不是hessian版本不一致.之前我在服务端使用的hessian版本是最高的 hessian4.0.7版本.但是我在客户端查看的时候,发现很多其他的dependency依赖了hessian 3.0.13. .最后请教了一下同事,好像说这边hessian版本默认就是3.0.13.因为其他版本经常会有bug. 比如看毕玄的这篇文章 

http://www.blogjava.net/BlueDavy/archive/2009/08/06/290003.html

最后的解决方案就是,统一版本 hessian3.0.13

 

问题三 nginx 安全模块的一个坑

在线上,客户端启动初始化的时候,一直报 hessian反序列化出错.中间折腾很久,最后发现,线上的nginx安全模块为了防止utf7漏洞,自动在请求留中加了 \r\n .具体如下



 

哎,整一个悲剧..

 

  • 大小: 10 KB
分享到:
评论

相关推荐

    dump文件生成工具DumpTool

    DumpTool主要用来在用户机器上对目标进程生成dump文件,定位“卡死”、Crash等问题。 (1)MiniDump: 表示生成一个包含必要信息的dump文件,文件大小约200-500k,具体Flag =MiniDumpNormal|...

    C++生成dump文件

    C++ windows工程中 简单生成 dump文件,以便问题定位

    线程dump、飞行记录制作.zip

    手工制作飞行记录、远程方式制作飞行记录、制作JavaDump、分析JavaDump 手工制作飞行记录、远程方式制作飞行记录、制作JavaDump、分析JavaDump 手工制作飞行记录、远程方式制作飞行记录、制作JavaDump、分析Java...

    heapdump分析工具

    通过heapdump工具分析服务器堆分配问题

    Dump文件编辑中文版

    Dump文件编辑中文版 分析DUMP文件数据 修改数据

    dumptxt转换工具

    dump转换到txt文件

    C++_Core_dump问题定位方法

    core dump 问题定位方法

    dump--txt互转

    dumptxt互转

    Dump转txt工具

    Dump转txt.exe工具

    js javascript dump 调试

    dump_src.js是原版的(网上找的)回弹出一个页面显示调试 显示效果比较好,但是比较卡(对象成员太多的情况),有的环境不适合弹出页面. 示例: dump(变量); dump.js 是我修改的,返回一个字符串(类似于php的dump) 示例: ...

    Dump文件转txt

    Dump文件转txt

    hexdump Python2版本

    python源码,可直接使用 使用方法: import hexdump print hexdump.hexdump('hello,world') 输出效果: 00000000: 68 65 6C 6C 6F 2C 77 6F 72 6C 64 0A | hello,world. ...基于老外的版本修改的,代码不太好看 呵呵

    DumpTxt互转工具

    DumpTxt互转工具

    c++ 自动dump AutoDump

    在日志明显不足的时候,把进程中相关数据DUMP下来分析就是一个比较实用方便的方法。很多应用都会提供这类功能,以便在程序出现问题时可以把相关的数据发给开发者,方便开发者分析问题。

    基于rtmpdump的rtmp包转解码打包ts(h264+aac)

    基于rtmpdump的rtmp包转解码打包ts(h264+aac),通过rtmpdump收流,调用系统接口,转码音视频数据包成h264视频和aac的音频。供封转ts使用

    dump文件查看分析工具

    用于分析dump文件,很好用的一款内存分析工具,可以用来分析OOM等问题

    C++ 生成Dump文件

    利用C++生成Dump文件,以后程序崩溃了,可以找到哪个函数出的问题。非常好用,企业级的应用!

    DUMP_C++_dump_

    c++捕获内存相关的错误,生成dump文件

    高通core dump解析工具

    高通core dump解析工具。仅自己上传做个备份。

    dump命令 备份文件系统

    dump命令用于备份文件系统 ,dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。 语法格式:dump [参数] 常用参数: -0123456789 备份的层级 -b 指定区块的大小,单位为KB ...

Global site tag (gtag.js) - Google Analytics