ProtoBuf最近几年也算比较流行,它是一种语言无关,平台无关,并且可以扩展,并结构数据序列化的方法。相比JSON/XML这类文本格式的,ProtoBuf是二进制的,更快更高效。对于这么好的特性,Gin当然是支持的。 ProtoBuf数据结构 ProtoBuf的数据结构都是通过.proto文件进行…
前几天一个小伙伴在公司 slack 问到如下 Golang 代码为什么会卡死(Go Playground): 这个问题很有意思,大概涉及到 Golang 中以下三个概念: byte 是什么 goroutine 如何调度 Golang GC 时会发生什么 本文尝试简单解释下为什么上面的程序会卡死。 首…
编译自 Custom JSON Marshalling in Go。 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:",omitempty", 当字段的值为空的时候,我们可以在序列化后的数据中不包含这个值,而json:"-"可以直接不被JSON序列化,…
性能问题可以分为两种类型: On-CPU: 线程花费在CPU上的时间。 Off-CPU: 线程阻塞在I/O、锁、计时器、页交换等场景中的等待时间。 Off-CPU性能分析砖窑用来测量和研究off-CPU时间,所以它不同于CPU profiling只检查线程在CPU上的运行时间,而是专门研究阻塞的线程…
基于分区和副本集的相关知识,初步了解Kafka的数据存储、同步原理 Kafka基本架构 上图为Kafka的典型架构图,对于消息的生产以及消费逻辑不在本文的讨论范畴,主要就Broker的数据存储做以浅显的总结。首先解释一下常见的相关专业术语: Broker:消息中间件处理节点;每个Kafka服务节点称…