1
grzhan 37 天前
点赞,近期刚好在看 VictoriaMetrics 的源码,感觉受益匪浅,很多性能优化技巧可能自己也需要做些 benchmark 再思考验证。
翻译工作如果有需要的话我可以帮忙做一些。 |
2
GoRuby 36 天前
👍
|
3
cloudfly OP @grzhan 嗯,源码确实优秀,我读完也是受益良多。如果单纯看 Go 语言的性能优化技巧,作者写的 fasthttp 推荐下,fasthttp 功能纯粹些,容易阅读,一些代码技巧都是他的风格。
VictoriaMetrics 另外优秀的地方是一些设计没走寻常路,比如 不用 wal ,不用 mmap ,这两点是大多数 db 都引擎会无脑使用的。然后也不用 facebook 开源的 Gorilla 时序数据专用压缩算法,采用 SN 架构做集群。 就感觉这个作者真是每个细节上都认真做了思考,没有照搬其他 db 。 |
4
grzhan 36 天前
@cloudfly 是这样,老毛子做东西抛去了很多繁文缛节,同时没有过多封装和抽象,读的时候感觉应跳出一些思维定式和权威崇拜的桎梏,很多主流的方案未必没有优化的空间。
以及 VM 作者让我感觉 Go 的上限其实不低,即便不用 C++/Rust 也还是可以通过 Go 写出性能满足生产要求的代码(当然前提还是对于计算机系统、网络等有足够深刻的理解) 我应该会把 VM 系统性读完后去把记录的一些优化技巧和调参梳理下,自己写 benchmark 多进行验证(比如频繁使用 sync.Pool 以及序列化时将数据梳理在一个大 []byte 里带来的局部性…),然后再去看看 fasthttp 的部分……当然,更进一步来说,通过这种阅读也更进一步认知到自己对于系统、网络理解上的不足,后续还是要继续钻下去。 |
5
grzhan 36 天前
像 mmap ,作者在 18 年时候就提过 Golang 使用 mmap 的问题: https://valyala.medium.com/mmap-in-go-considered-harmful-d92a25cb161d
但我最近看源码发现其实现在 VM 还是会用到一点 mmap 的,并在注释中说明在实际生产环境中这么写还是 ok 的: https://github.com/VictoriaMetrics/VictoriaMetrics/blob/025eec2cb00381b5292d34601f96d7fcf7503191/lib/fs/reader_at.go#L81 具体情况如何后面我想写点 benchmark 梳理看下。 |
6
liuliancao 36 天前 1
看了下 翻译的真好 就是左上角那个中文手册左边的那个 victoria 单词拼错了 哈哈
|
7
Jzdoxc 36 天前
文档写的很棒👍
|
8
cloudfly OP @liuliancao 哈哈哈😂,感谢感谢
|
9
cloudfly OP @grzhan 牛逼,你看得比我细致多了。我是为了解决生产环境的压力,要做一些源码定制,倒逼着自己把源码读了个大概。
mmap 那个我几年前也看到了,这次也翻译放手册里了。 用 Victoria Metrics 之前,我用了一年半的 m3db ,这家伙 90 多万行代码,各种过度抽象,感觉自己在读 java 。性能还不及 vm 的 1/10 。 |
10
grzhan 35 天前
@cloudfly 我也不大习惯类似很多 Java/C# 项目这样的复杂的抽象,也可能是自己脑子不好不大擅长设计这些 hhh
包括 Kubernetes 源码也有点这味,相比于阅读 VM 以及 Go runtime 的代码,会很不适应。 |
11
VictoriaMetrics 31 天前
感谢分享
|
12
VictoriaMetrics 31 天前
> 就感觉这个作者真是每个细节上都认真做了思考,没有照搬其他 db 。
老板听到应该会很开心 |
13
cloudfly OP @VictoriaMetrics 哦?你现在在给作者打工嘛?
|