GopherChina2020个人总结
GopherChina2020个人总结
仙雾如果你是新入坑的gopher那么建议一定要看一下Go Programming Patterns这个演讲。本次大会讲框架的比较多,听下来感觉go-zero做的比较完善,也更适合小公司或者个人上手,而且作者比较有激情。然后推荐那个Go编译器的、TiDB遇到的问题的、还有探探的。最水的是一个老外的Go in the Cloud - Why People Choose Go for Cloud Computing。。。
由于大会第二天分了两个会场,所以一个人只能听到部分的演讲,所以我在会场1和2反复横跳,挑着听了一些。比较遗憾的是阿里的那个EDAS的没听到,据说讲的比较好。
现场偶遇了前同事666,一开始带着口罩还没太确认,后来坐下来发微信才确认。
探探 ttdb
探探是本次大会的联合主办方,是一个年轻人社交的app,呃,其实他们的现场的宣传片里面好像还有60多岁的使用者。如果让你设计一个系统,扫描两个人经过的地理位置,从而进行匹配出擦肩而过的人,你会怎么设计?
他们介绍了自己的数据库的一些实践经验:- sql解析上的优化,比如做谓词下推等
- 列存储,selection阶段利用cache coherence提升性能
- 故障检测没有选择去中心化的gossip,而是使用的中心化的超时检测,故障恢复时候避免所有请求打到一个新的从节点导致峰值,而是偶尔将请求给从节点,保持热数据。
- 利用这个库来进行goroutine的泄漏检测。
Go Programming Patterns
这个演讲里面的内容其实是我们平时代码里面都常会用到的一些小技巧还有一些控制反转等理念,尤其建议新接触Golang的同学都可以听一下,重点体会一下看开源代码学习好的编程模式的这种理念。另外,作者应该是比较熟悉各种语言的特性,所以对Golang也有很多吐槽。- functional option,这个应该应用是最为广泛的pattern了,几乎各大开源项目里面都用,很好地解决了可选参数必选参数区分,内部结构封装不破坏,使用时自注释等一系列问题。
- go generation,因为不支持泛型(至少在2021年之前),所以很多时候利用好go generation是很必要的。
- 错误处理,这里他提到rob pike的一个上古文章建议大家看看,但是我不确定他指的是哪一篇,不过go1.13新增加了
errors.Is
和As
两个用来帮助处理函数,同时fmt.Errorf
里面支持通过%w
来wrap一下error了。 - kubernetes visitor、装饰器、pipeline等就看ppt吧,讲的比较清楚。
Grab Food
Grab也是GopherChina的老赞助商了,Grab是东南亚的超级巨无霸,可以理解为美团+支付宝+滴滴+高德地图。
他们先是介绍了他们的Grab-Kit服务框架,和其他框架一样,支持各种middleware,validate、trace、throttling等,还支持chaos来模拟失败(捣乱猴?)
然后介绍了Grab Food内部的ML Pipeline:- 候选集合
- 过滤
- 重排序
- 后排序
先引用Google的文章列了下当前机器学习的痛点,介绍了他们的chimera系统是如何做到持续集成、持续训练、持续交付的自动化的,做到了ML-ops。并提到了他们用了一种multi arm bandit AB test来解决模型的适应性问题。
go-chassis
这个是我司的人讲的,略过。Functional options and config for APIs
这个演讲内容和前面第二个撞车了,看前面那个就行。百度BFE
这个老兄的因为主要不是什么技术型的演讲,所以我没怎么听就跑了,里面介绍了一些做技术管理的东西。go-zero
又是一个搞框架的,不过这个老兄挺有意思,他说自己70后还在笔耕不辍的写代码。他这个go-zero是他们公司内部使用过程中迭代出来的东西,不是其他一些框架可能是脱离具体业务的产物。听下来感觉go-zero的功能还是很完善的,的确一站式解决了一些开发上的boilplate代码,而且他上来就是说我希望自己团队里面风格尽量统一,所以才有的这个东西。除了这个框架本身,我印象比较深的是他其中加入的一些自己产品中的解决问题方案。Go+
由于布道师许式伟本人没来,找了个人临时讲,效果就不好,没有讲清楚为Go+替代Python搞数据科学的必要性,虽然堆了一堆PPT。。。Go+的运行可以使用转换成Go语言编译运行,也可以转换成字节码直接运行,性能差一点,感觉这个很鸡肋直接python不好么。而且当前不支持interface,没有runtime优化。PingCAP-Go runtime related problems in TiDB production environment
这个演讲中提到的问题其实在我们工作中也遇到了,演讲者是golang internals的作者。
第一个问题是golang的goroutine调度导致时延变大,其实这个我理解并不算是问题,或者说golang的goroutine调度实现就是如此,golang不像别的语言是原生支持了协程,同时也就绑定了他的实现,很多其他语言是通过库的方式来做的协程,调度器其实是可以根据需求来换实现的。所以如果要在go里面解决调度问题,要么就只能把高优先级的给绑核了。
第三个问题是GC的bug,
第四个是NUMA的使用的建议,GC不是NUMA aware的,在allocation里面的帮助扫描触发之后,在众核环境下表现很差。这个现在版本已经优化了。Go语言编译器简介 史斌
这个老兄就很硬核了,是给golang提交代码最多的50人之一,拥有Go的git库的提交权限,也年年收到go官方的邀请去美国开会。
他提到了Go语言其实用的是自举,而不是走LLVM这种通用的方案,所以很多在LLVM那边做的优化,golang的编译器都没有,需要添加(大佬你的提交就是这样来的吧)。golang从源码到汇编有48道工序,他讲的话估计三天都不够。最后他选了前端、中端、后端的优化讲了一下自己的patch,还是挺有意思。GORM 剖析与最佳实践
这个应该是国内做的最好的golang开源项目了,作者介绍了GORM2.0的重构和设计和一些最佳实践,感兴趣的可以仔细看下,当前暂时没用之后用了再回头看看。