比atomic更方便的库:uber Atomic 2021-05-21 Go三方库 约 353 字 预计阅读 1 分钟 安装 1 go get -u go.uber.org/atomic@v1 旧版导入路径 从v1.5.0开始,导入路径go.uber.org/atomic是使用此软件包的唯一受支持的方式。如果您使用的是G 阅读更多
如何用Go完成无锁队列 2021-05-21 Go实践 约 3473 字 预计阅读 7 分钟 前言 队列(queue)是非常常用的一个数据结构,它只允许在表的前端(head)进行出队(dequeue)操作,而在表的后端(tail)进行入 阅读更多
字节缓冲池:bytebufferpool 2021-05-20 Go三方库 约 3966 字 预计阅读 8 分钟 sync.Pool的坑 内存泄漏 取出来的 bytes.Buffer 在使用的时候,我们可以往这个元素中增加大量的 byte 数据,这会导致底层的 byte slice 的容量可能会变得很大。这个时候 阅读更多
context使用实践 2021-05-19 Go实践 约 7760 字 预计阅读 16 分钟 如何使用 context context 使用起来非常方便。源码里对外提供了一个创建根节点 context 的函数: 1 func Background() Context background 是一个空的 context, 它不能被取消,没有值,也没有超时时 阅读更多
backoff指数退避重试算法实现 2021-05-11 服务治理 约 5696 字 预计阅读 12 分钟 指数退避算法 指数退避算法是适用于网络应用的标准错误处理策略,使用这种策略时,客户端会定期重试失败的请求,并不断增加各次请求之间的延迟时间。客 阅读更多
超时、重试和抖动回退 2021-05-10 架构 约 4226 字 预计阅读 9 分钟 故障时有发生 每当一个服务或系统调用另一个服务或系统时,都可能会发生故障。造成故障的因素可能多种多样。它们包括服务器、网络、负载均衡器、软件、 阅读更多
GRPC的重试机制:backoff算法 2021-05-10 GRPC 约 1350 字 预计阅读 3 分钟 指数backoff 当我们连接到一个失败的后端时,通常希望不要立即重试(以避免泛滥的网络或服务器的请求),而是做某种形式的指数backoff。 阅读更多
GRPC的超时控制机制 2021-05-10 GRPC 约 6045 字 预计阅读 13 分钟 超时控制 超时控制,我们的组件能够快速失效(fail fast),因为我们不希望等到断开的实例直到超时。没有什么比挂起的请求和无响应的界面更令人 阅读更多
容器环境的GOMAXPROCS 2021-05-08 Kubernetes 约 6339 字 预计阅读 13 分钟 CPU Affinity 熟系 Linux 后台开发的朋友都知道 CPU 亲和性(CPU Affinity)。CPU Affinity 是一种调度属性,它可以将单个进程绑定到一个或一组 CPU 上。 在 SMP(S 阅读更多
GRPC的健康检查 2021-05-07 GRPC 约 1102 字 预计阅读 3 分钟 介绍 Health checks用于探测服务器是否能够处理rpc请求。客户端到服务器的运行状况检查可以通过点对点或某些控制系统进行。服务器可能未准备好接受 阅读更多
Go的类型转换库cast 2021-04-29 Go三方库 约 3448 字 预计阅读 7 分钟 快速使用 先安装: 1 go get github.com/spf13/cast 后使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package main import ( "fmt" "github.com/spf13/cast" ) func main() { // ToString fmt.Println(cast.ToString("leedarjun")) // leedarjun fmt.Println(cast.ToString(8)) // 8 fmt.Println(cast.ToString(8.31)) // 8.31 fmt.Println(cast.ToString([]byte("one time"))) // 阅读更多
Go的map转struct库mapstructure 2021-04-29 Go三方库 约 4358 字 预计阅读 9 分钟 简介 mapstructure用于将通用的map[string]interface{}解码到对应的 Go 结构体中,或者执行相反的操作。很多时候,解 阅读更多
Gin的gzip中间件nanmu42-gzip 2021-04-29 Gin 约 4747 字 预计阅读 10 分钟 背景 最近在做一个 web 版的展示大屏,前端靠 HTTP(S)+JSON 和后端交互,部分图形是密集的地理点位和时间序列,HTTP 返回数据量较大,公网上加载速度不佳。 调研 考虑 阅读更多
Go在http开启gzip 2021-04-29 Go实践 约 2209 字 预计阅读 5 分钟 前言 我们知道一般无论是 CDN 还是 服务端的接口(nginx 配置gzip以优化站点资源加载速度),在响应返回的时候,都会配置 gzip 来压缩响应数据,以达到 阅读更多
HTTP协议中的Content-Encoding 2021-04-28 网络 约 4071 字 预计阅读 9 分钟 Content-Encoding & Accept-Encoding Accept-Encoding 和 Content-Encoding 是 HTTP 中用来对「采用何种编码格式传输正文」进行协定的一对头部字段。它的工作原理是这样:浏览器发送请求时,通过 Accept-Encoding 带上自己支持的内容编 阅读更多
压缩算法在构建部署的优化 2021-04-28 约 6278 字 预计阅读 13 分钟 背景 通常而言,服务发布平台的构建部署的流程(镜像部署除外)会经过构建(同步代码 -> 编译 -> 打包 -> 上传)、部署(下载包 -> 解压到目标机器 -> 重启服务) 阅读更多
Zstd压缩算法介绍 2021-04-28 编解码 约 3734 字 预计阅读 8 分钟 介绍 我们称 Zstandard 或 Zstd 是一种快速的无损压缩算法,是针对 zlib 级别的实时压缩方案,以及更好的压缩比。它由一个非常快的熵阶段,由 Huff0 和 FSE 库提供。这个项目是作 阅读更多
DEFLATE压缩算法原理 2021-04-27 编解码 约 8281 字 预计阅读 17 分钟 DEFLATE & INFLATE 当你键入 tar -zcf src.tar.gz src, 就可以将 src 下的所有文件打包成一个 tar.gz 格式的压缩包. 这里的 “tar” 是归档格式, 将多个文件组合成一个文件; 而 “gz” 指的就是 gzip 压缩格式, 阅读更多
常用的JSON压缩算法 2021-04-26 编解码 约 459 字 预计阅读 1 分钟 前言 无论使用何种编程语言,json格式的数据已被广泛应用,不论是数据的传输还是存储,在很多应用场景下,你可能想进一步地压缩JSON字符串的长 阅读更多
Protobuf原理介绍 2021-04-20 编解码 约 8830 字 预计阅读 18 分钟 序列化与反序列化 有些时候,我们希望给数据结构或对象拍个“快照”,或者保存成文件,或者传输给其他应用程序。比如,在神经网络训练过程中,我们会将 阅读更多