如何阅读 redis 源码

有的网友想要学习 redis 源码的方法,鸽了一个月,今天分享我的学习方法以及路径,学习步骤不限于 redis, 换成其它开源软件套路也是一样。强调一下,没有速成方法,没有捷径,只有苦行僧一般的坚持才能做好任何一件事情,与君共勉 ^^ 以前写过 redis 系列,感兴趣的可以订阅话题

Mehr lesen

如何应对不断膨胀的接口

难怪码农自嘲是 CRUD boy, 每天确实在不断的堆屎,在别人的屎山上缝缝补补。下面的案例并没有 blame 任何人的意思,我也是堆屎工^^ 如有雷同,请勿对号入座

案例

最近读一个业务代码,状态机接口定义有 40 个函数,查看 commit log, 初始只有 10 个,每当增加新的业务需求时,就不断的在原接口添加

Mehr lesen

Head Of Line Blocking 困扰两个月的线上问题

我们最近遇到一个问题,内部某个服务是有状态的,有些请求需要在内部做转发,但是请求偶尔发生超时,随机超时,并且没有任何规律,和 QPS 无关,一般 2s 内都恢复了。
经过两个月排查,不断的 narrow down, 最终排除业务代码问题,定位 root cause 是 tcp restranmit 引起的 HOL(head of line) blocking, 己经给 aws 提了 ticket, 至于重传的原因还在与 aws 确认中。

Mehr lesen

如何搭建 blog? 附带全部 Hexo + Nginx + Git 教程

个人 blog 欢迎访问:https://mytechshares.com/ , 内容同步自微信公众号。首先说下为什么自建 blog 站点:

Mehr lesen

Gopher 需要知道的几个结构体骚操作

我们知道 Go 没有继承的概念,接口结构体多使用组合,很多开源产品或是源代码都有大量的内嵌 (embeded field) 字段,用于特殊目的。本次分享的内容来自 grpc 与 go 源码

NoCopy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"sync"
)

func test(wg sync.WaitGroup) {
defer wg.Done()
wg.Add(1)
}

func main() {
var wg sync.WaitGroup
wg.Add(1)
go test(wg)
wg.Wait()
}

Mehr lesen

如何用 Go 实现 Jit compiler

原文作者是 Sidhartha Mani 首发于 Medium,曾由 jiangwei161002010 翻译后发布在 Go 语言中文网

Mehr lesen

Go error 处理最佳实践

今天分享 go 语言 error 处理的最佳实践,了解当前 error 的缺点、妥协以及使用时注意事项。文章内容较长,干货也多,建义收藏

什么是 error

大家都知道 error 是源代码内嵌的接口类型。根据导出原则,只有大写的才能被其它源码包引用,但是 error 属于 predeclared identifiers 预定义的,并不是关键字,细节参考int make 居然不是关键字?

Mehr lesen

Go Context 最佳实践

去年写了也许是 Context 最佳实践, 回头看有些遗漏,重新编辑整理,总结截至 go 1.17 的最佳实践

Mehr lesen

Go cmd 服务无法退出的小坑

上家公司的案例。先说下使用背景,服务在每台服务器上启动 agent, 用户会在指定机器上执行任务,并将结果返回到网页上。执行任务由用户自定义脚本,一般也都是 shell 或是python,会不断的产生子进程,孙进程,直到执行完毕或是超时被 kill

问题

最近发现经常有任务,一直处于运行中,但实际上己经超时被 kill,并未将输出写到系统,看不到任务的执行情况

Mehr lesen

Rust Fn FnMut FnOnce 傻傻分不清

上周文享了闭包你了解底层实现嘛? 我们要记住,闭包是由函数和与其相关的引用环境组合而成的实体

Mehr lesen