2021 北京 Gopher 大会 思考
本文会同步发在我的个人博客:[https://h1z3y3.me/posts/gophercon-china-2021/](https://h1z3y3.me/posts/gophercon-china-2021/) ,欢迎大家订阅我的博客。也欢迎大家转载,注明出处即可。
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/logo.png)
托 [团队 leader](https://fukun.org/) 的福,白嫖了今年 GopherCon China 的票,和历届大会相比,第二天分了两个分会场,
分享不同的内容,参会者可以根据个人兴趣自行选择参加。
然而不得不说,本次和之前几次的分享安排相比,多了一些针对自己公司产品的推广。
但不管怎么说,收获还是有的,印象比较深的 talk 有 PingCAP CEO 黄东旭分享的《全链路可观测性:从应用到 Go Runtime》,比较有趣;还有曹大曹春晖分享的《Go 语言的抢式调度》,内容确实很卷很深入。
大会提到的很多技术其实我们团队也早已经实践使用,比如鸟窝在《深入探究 Go Module》中分享如何使用 GOPRIVATE 从而使用自己的私有仓库;
Grab 公司在分享《Improving Go Backend Developer Experience In Grab》中提到的 CI/CD 我们也已经在我们大多数项目中使用。
我总结了讲师提到最多的关键词,一方面也能体现业内目前在流行什么:
* **K8S**:毋庸置疑,云原生时代的王者
* **API Gateway**、**L7 Banlancer**:处理南北向流量,两者定位不同又有一部分功能重合,APISIX、BFE 最近两年大家讨论比较多的开源项目
* **Service Mesh**:处理东西向流量,Envoy、xDS协议
* **微服务**:不再赘述
* **Tracing**、**Metrics**、**Logging**:及时发现服务问题
* **CI/CD**:加快应用的部署速度,解放开发者双手不可或缺的步骤
* **Rust**:没错,Gopher 大会确实多次提到了 Rust 语言
我针对我自己参加的几个分享谈一谈我自己的一些感受和思考。
大会的 PPT,可以在这里获取:[https://mp.weixin.qq.com/s/734ac0JeQtSrzcmZ1-so8w](https://mp.weixin.qq.com/s/734ac0JeQtSrzcmZ1-so8w)
## 《Generic in go》
大会第一场是跟老外连线,但是直播断断续续,我这蹩脚听力更听不懂了,体验不太好。但是针对泛型这个主题,在社区中有很多讨论,
也有一些争议,主要是泛型的支持者,和认为加入泛型破坏 golang 简单特性的反对者,
不过今年官方正式提出将泛型特性加入 Go 的
proposal [https://blog.golang.org/generics-proposal](https://blog.golang.org/generics-proposal) [https://github.com/golang/go/issues/43651](https://github.com/golang/go/issues/43651) 。
而且,golang 官方已经在 master 分支实现了泛型,鸟窝也在早些时间给出了 Go 泛型尝鲜的方法:https://colobu.com/2021/03/22/try-go-generic/
## 《MOSN在云原生的探索和实践》
MOSN 是一款网络代理软件,可以与任何支持 xDS API 的 Service Mesh 集成,也具备南北向流量代理的功能。
不得不佩服 MOSN 对 CGO 的调研和使用深度,其中介绍的 MOE(Mosn on Envoy)使得 MOSN 底层网络具备 C 同等处理能力的同时,
又能使上层业务可高效复用 MOSN 的处理能力及 Golang 高效的开发效率。
## 《浅谈全链路可观测性:从应用到Go Runtime》
我个人认为很不错的分享,由浅入深带领大家如何 Trace In Go Runtime,PPT 风格还有讲解风格都很有趣。
最终的实现方式我也没想到和我最近翻译的这篇文章相关
( [深入剖析 Golang Pprof 标签](https://h1z3y3.me/posts/demysitifying-pprof-labels-with-go/) ),
翻译时也没想到还能这么玩,当时听了确实也令人眼前一亮。
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/profile-label.png)
## 《Improving Go Backend Developer Experience in Grab》
算是 Grab 公司的经验分享,关于整个软件的设计、开发和交付流程。和 Go 的关系并不是很大,很多经验经验也很难进行复制。
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/build-times.png)
## 《利用夜莺扩展能力打造全方位监控体系》
夜莺也是国内应用很火的监控系统,和 Prometheus 相比,有一些优势吧,比如有自身的告警平台,
我们团队内部使用的基于 Prometheus 又另外开发的一套报警系统,目前也是开源,地址是 [https://github.com/Qihoo360/doraemon](https://github.com/Qihoo360/doraemon) 。
更多夜莺和Prometheus的对比可以看这篇分析文章,[《夜莺与Prometheus的对比》](https://www.yuque.com/ictc/manual/nr798n) 。
但是干货太少,全程介绍产品功能。
## 《如何构建易于拆分的单体应用》
由于项目的特殊性,我们组内大多数应用都是单体应用,也在尝试做一些微服务的拆分工作。这个分享虽然没讲 DDD,
但从现实例子出发,分析一个应用如何设计、开发,同时实战讲解了如何使用 go-kit 构建一个简单的应用,还是有些收获。
## 《深入探索Go Module: 实践、技巧和陷阱》
内容充实还不错,一些比较常见的用法我们团队也一直在用,我们的也是去年开始从 dep 全部换到了 go module,
所以积累了一些 go module 的使用经验,所以整个分享听下来也比较轻松。我之前也写了一篇文章介绍如何让 go module
使用 gitlab 私有仓库:[https://h1z3y3.me/posts/go-private-git-repository/](https://h1z3y3.me/posts/go-private-git-repository/) 。
鸟窝还介绍了一些之前基本没用过的子命令,比如 `go mod graph`、`go mod why`,收获最大的是终于弄明白了 go module 拉取依赖包的策略。
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/go-module-history.png)
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/go-module-xxx.png)
## 《深入理解 BFE》
也算是推广分享,介绍 BFE 产品,没什么干货。
我们 19 年也开源了一个七层转发的代理 [「HTTPS Layer」](https://github.com/Qihoo360/HTTPSLayer) ,
和 BEF 相比,功能基本类似,甚至可以说 80% 相同。最大的区别就是 BFE 基于 Go 生态,我们基于 Openresty 生态。
或许缺少了维护和宣传,我们并没有获得很高的关注,比较可惜。其实 HTTPS Layer 在我们公司内部也得到了生产环境的验证,
做了一些分布式部署之后,目前我们单机房峰值 QPS 也能达到 10w QPS,当然还预留了一些 buffer 的情况下。
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/why-bfe.png)
## 《Go 语言的抢占式调度》
曹大曹春晖的分享,很卷,讲解了 GMP 模型以及 Golang 的抢占式调度,干货又太干了,有点吸收不了。
主要内容是 golang 1.14 版本前后两种不同的抢占式调度模型,深入源码,通过编译后的汇编进行讲解,挺有深度的,之后会再仔细研究这方面的知识。
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/GMP.png)
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/tangping.png)
## 《K8S私有云建设实践》
公司的经验分享,不可复制,因为太客制化了。为了迎合公司现有平台,抛弃了很多 k8s 的原生用法,我个人觉得很鸡肋。
针对私有云建设,360 其实走在比较前面,之前还开源了 k8s 的多集群管理平台
[Wayne](https://github.com/Qihoo360/wayne) ,开源初期获得很多关注,但是后续也不没有持续更新,也比较可惜。
## 《Go 如何助力企业进行微服务转型》
go-zero 的维护者万俊峰分享,虽然经验之谈多一些,关于 Go 的讨论少,但是整体分享是好分享,收获很多,
也有些之后可借鉴的点。不多赘述,PPT 可以下载下来看,里面挺详细。
![](https://raw.githubusercontent.com/h1z3y3/h1z3y3.github.io/master/images/GopherCon-China-2021/monolith-to-microservice.png)
## 总结
从整体来看,本次 Gopher 大会还算成功,有些小插曲,但是瑕不掩瑜。只是希望之后能少一些对于产品的推广和介绍,
对于产品功能完全可以去看各自产品的文档,我能想到他们和 Go 唯一相关的就是这个产品是 Go 写的。
作为技术人花了钱到这里想看到的还是对于 Go 的一些可借鉴和可复制的实践经验,这个其实看下国外的 gopher 大会就能体会到了。
不管怎么说,虽然周末两天都没睡懒觉,7点早起就往会场赶,但是最后还是心满意足。我看大会全程有录像,
大家可以参考我的思考,去翻翻对应的 PPT 或者视频,相信也能有所收获!