Wireshark 默认支持识别 MySQL 协议,但是当 MySQL 端口不是 3306 时,Wireshark 就不会自动识别了。只需要需要手动选择解析协议。话不多说,见下图。 这里我的 MySQL 端口是 20393,选择协议为 MySQL,确定后即可。支持多条规则识别。 识别后的效果如下 ...
阅读全文 »

为什么要有 code reviewcode review 有很多好处: 促进个人进步。如果有技术水平强的人帮你 review 代码,那简直是前世修来的福分。如果组内没有高手,组员之间互相 review,共同进步。 找出隐藏的 bug。 当局者迷,旁观者清。自己没意识到的错误,别人可能一下子就看出 ...
阅读全文 »

备注:本文讨论的范畴是服务端日志。 常见的日志级别有 trace/debug/notice/warn/fatal 这些吧(不同的日志库叫法不一,大同小异) trace 很少用 debug 的话,应该是开发阶段会用到的。 类似单步调试,只是通过 log 的形式 打印出来。如果写了也不用删掉,反正在线 ...
阅读全文 »

背景介绍由于历史原因,我们部门的 MySQL 中间件既有 Mycat, 也有 Cobar。 Cobar 号称支持事务, 但是居然不支持 START TRANSACTION 和 BEGIN 显式地开启事务。 单库事务完全支持,分布式事务不能保持强一致性。 分布式事务采用两阶段执行,即分为执行阶段和 ...
阅读全文 »

缘起最近整了个 Go 版 redis-cli, 完了之后给同事分享了下。TL 问能否整个 web 版的 redis-cli, 即在网页上命令行式地操作 redis。 回想起有个工具叫 gotty, 能让命令行工具运行在网页上。 网页和后端通过 websocket 的方式实时通信,效果能媲美原生终端操 ...
阅读全文 »

为何造新轮子?有时候,我想查下线上的 redis 数据,但是我不能直接在内网访问生产环境的机器,我只能通过跳板机登录上我拥有权限的机器,而我拥有权限(开发权限)的机器上并没有安装 redis-cli。这时候我只能请求运维同学帮我装一个,虽然对他们来说只是敲一条命令的事情, 但是每次都麻烦别人,不是很 ...
阅读全文 »

今天介绍的三种不同的 md5 计算方式,其实区别是读文件的不同,也就是磁盘 I/O, 所以也可以举一反三用在网络 I/O 上。 ReadFile先看第一种, 简单粗暴: 123456789func md5sum1(file string) string { data, err := ...
阅读全文 »

最近在对我们的网关服务(gateway)进行压力测试时,发现网关服务产生大量的 TIME_WAIT. Gateway 是用 go 实现的,通过 HTTP 方式与后端服务进行通信,也就是说使用了 net/http 包。 在我的理解中,net/http 是默认保持长连接的,按理说不会有这么多 TIME_ ...
阅读全文 »

一般而言,我们用 etcd 的 watcher 时,都是像下面这样用,永不休止。 12345678910111213141516171819202122232425262728import ( "time" "context" "github.com/coreos/etcd/client")func ...
阅读全文 »