代码改变世界

GopherChina第二天小结

2019-04-29 07:35 by 轩脉刃, ... 阅读, ... 评论, 收藏, 编辑

GopherChina第二天小结

今天继续昨天的文章,参加了第二天的GopherChina,例行完成总结。

基于MINIO的对象存储方案在探探的实践

关于对象存储,之前用过seaweedfs,但是对MINIO这个项目真是一无所知。于乐分享了下东道主探探在使用MINIO的整个过程。现在回想下来,最具有印象的是他们针对上线后的问题做的一些优化。首先在写过程做了小文件写合并成一个大文件的写的优化,另外一个是读的过程做的优化,把meta信息存放在levelDB中。最后说出来的优化操作也就这两个地方,但是在整个过程中如何找到瓶颈点的过程是颇为精彩的。首先是采集profile信息,mc和pprof,把酷炫的火焰图绘制出来了,然后告诉我们,从这个图里面看不出什么东西。。。囧。。。然后通过最土的方式统计函数调用时长,通过分析时长关注到了是IO调用的问题,继而分析了下MINIO的写流程,想到了MINIO的写是随机写,当使用不上pagecache的时候,就会有性能问题了。从而使用了小文件合并大文件的方法。这个方法在文件系统的设计使用上也是很常用的。这里我学习到了一个fio测试工具,来测试io的性能。接着针对读流程,进行读压测,发现一旦不是顺序读,从N个节点上读取meta信息这个读操作会导致整体读操作性能降低,这个操作是可以优化的。综上,就在读和写两个方面做了优化。

整体topic听下来就莫名有一条时间线牵着,从接到需求,技术选型,技术调研,部署,遇到问题,分析,尝试,最终解决方案。就好像跟着讲师一起从零搭建了一套对象存储系统,非常精彩。确实大量的小文件存储系统的设计和使用是很难的一件事情。回来之后,我就给MINIO加了个星星。

参会

从零开始用GO实现Lexer &Parser

这个讲师何源的气场就明显高于上个讲师了。这个topic的需求缘起我现在其实都觉得有点意思。有一堆做教研的人员需要录入大量题目,但是他们觉得使用Web页面录入效率太低,并且一旦修改,没有版本记录。所以就想到使用标记语言来代替表单录入,使用git进行提交管理,并且使用CI进行提交测试。这是多么极客的做法!!!相当于让运营人员写markdown了。哈。可能就和讲师说的,工程师就是魔法师,没有工程师解决不了的问题,如果有,那么就找两个工程师。可想他们公司的文化应该也是很推崇技术的把。

其实我觉得,他们这个需求被满足最难的点是业务上能想到使用标记语言+git进行教研的录入。后续的技术就是围绕如何用Go实现自定义标记语言的解析和创建AST树。这一部分就是状态机概念,根据不同的token,解析器进入不同的状态,直到将文本解析完毕,然后进行语法树的创建。他中间的大篇幅PPT就是围绕代码展示说起。其实感觉上去,想清楚了使用状态机模型,其他的东西也就全部完成了,都是细节实现的东西了。其实当时我还私下YY了一下,要是我做这个需求,好像golang channel的pipeline模型很适合这个模式,能做到解析和分析流式进行。不过也仅限于YY了。

参会

高性能高可用的微服务框架TarsGo的腾讯实践

BAT中的T的大杀器推荐topic。Tars框架已经是一个很出名的项目了,不过之前也是没有了解。这次听下来全程乍舌,真牛逼!!不过私下想,这么庞大的一个框架,涵盖服务框架,服务治理,部署运营,调度等集于一身,也只有超级大厂能有此等人才和人力了。感觉一个公司可以完全照搬全收他们这一套,来应付开发+运维+架构的工作了。

前面的n个ppt我听完只能海豹式鼓掌了。后面几个PPT却是有一些实用的,在开发tarsgo过程中他们注意到的点,比如尽量不用反射,尽量使用指针返回数据,如何优化Timer,使用sync.pool来缓存临时对象。这些在实际coding中都是要注意的点。

同样,听完之后回来,他们的Tars和TarsGo多了我这颗星星。

闪电网络-BTC小额支付解决方案

这个话题要是在去年,是不是应该要爆了场了。但是在今年。。。没有任何区块链底子的我,听的迷迷糊糊。整场听下来,算是普及之旅把。

这个topic给我普及了什么是以太坊,什么是闪电网络。还给我普及了做区块链的人根本不知道谁是中本聪。后面还有洋葱路由的概念也是第一次听到,这是一种网络上匿名沟通的传递方式。

虽然讲了很多,但是对于我这个区块链小白来说,太深了。也着实没有啥兴趣继续了解。

Go Modules in day to day life

Goland老外的分享。这个老外的语速比Dave明显快了不少。还好身边全程有个台湾小哥哥做翻译,而且内容多为演示,基本没有漏get什么信息。

老外首先介绍了下GoMod。由于我司统一使用glide,对于go mod确实了解不多。但是看了一下具体的使用演示,感觉它解决了依赖版本冲突的问题,而且有个GOPROXY,能很方便解决墙、私有Go库的问题。就是有个地方我觉得有点奇怪,如果我的这个包版本升级了使用v2,我竟然需要去修改import的内容,增加个v2标记。感觉这个有点奇怪。

golang的官方对依赖的模块既然推荐使用了go mod,并且在1.13把go mod作为默认的包管理工具,我希望我司后续也能拥抱go mod。

然后就是老外对GOLAND的使用,让场下不少人都感叹:我们平时用的是Goland么。。。我就在感概了,我们刚接触golang的时候,那个时候有个小太极liteide就很了不起了。Golang在这几年的发展确实很快,不仅仅是语言,周边也逐渐都完善起来了。

用Go构建高性能数据库中间件

这个中间件是mysql的中间件,名叫Gaea。

刚看到是mysql中间件的时候,就有点嘀咕了,现在mysql的中间件方案已经那么成熟了都,还造轮子。。。后来看了下,这个Gaea看起来比mycat等多了不少功能。也转念想了想,大厂自己从零打造一个轮子也还是有好处的,至少不是黑盒使用了。不过看到这个中间件的sqlparse使用的是TiDB的sqlparse,就让我对pingcap公司又多了几分敬重。

Gaea下个月才打算开源。同样,我也主要关注他们实现过程中使用go的一些亮点。一个是配置热加载。通过atomic的Store方法实现配置的源自加载的方法我记下了。还有就是连接池,貌似一个goroutine一个connection的模式在高并发下是不可选的,都是对goroutine的浪费。好多服务框架都选择使用了goroutine连接池的方式来实现。关于连接池保活的方案他们不是使用日常的ping,而是使用创建一段时间后自动reconnect的方式来做的。这个感觉还是有点特别的。然后说了下Context的使用,这个话题这次会议已经有n个topic说过了。。。还说了下他们使用时间片来实现的session管理。

这个项目的星星等下个月他们开源了再给他们把,先欠着。

花椒直播基于golang的中台技术实践

洋总是我以前在360的老同事了。这个topic也是我很期待的。毕竟他在花椒从零开始做起了技术中台。

洋总一来就讨论起了语言,放了几个PHP和Go语言的对比,讨论了下花椒不同情境下对技术中台技术栈选型的思考。当下我看了看之前加的一些群,有看到这个ppt的也在讨论谁是世界上最好的语言的事情。我很认同洋总在语言选择上的观点的。收益!语言本质就是为业务服务的。没有业务收益的动作还是少做为妙。而且考虑的条件越多,语言层面的收益会越来越小。

然后讨论的是中台应该做什么。现在中台这个说法真是很火,动不动就是一个业务中台。洋总眼中的中台是以业务高效为原则而高度定制化的。很接地气的说法,能让业务好好跑的中台就是好中台。而后介绍了他们给业务做的一些中台服务,gokeeper,总线服务,cron任务管理服务等。整体感觉下来,他们中台服务做的非常细,很多业务的需求已经渗透进入了业务中台了。关于这个事情,洋总没有纯技术人的洁癖,反而很自豪说,现在我们很乐于告诉业务,这个需求我们也能做。我想,这就是经历了创业公司从零到一才能培养出来的实干风格把。

参会

Golang在知乎中的应用

这是最后一个topic,我却很有性质听完了,因为我是知乎的忠实粉丝。

很高兴知乎技术栈从python转成golang。这个topic分享的就是他们在转语言重构过程中的一些实践经验。

其实整个重构过程也是中规中矩的,创建新服务,然后测试,测试完成了,切流量。最终的重构结果是喜人的,节约了80%的服务器资源。

后半部分的PPT我觉得是亮点。我之前也做过重构,深知重构是最最难的一件事情,没有之一。他们的一些经验我很很认同。首先,重构和优化不要同时做!!!这个我感同身受,如果你修自行车的时候,头脑里面想的是摩托车,你这个车子肯定四不像了。其次,他们的这个“panic&recover 不推荐,但真香”。这个观点和我之前发的一篇文章[文章]不谋而和,我也是在一个项目中践行了panic+recover的方式,一下有找到知音的感觉。还有一个封装goroutine的方法,也是我之前很痛苦的,痛苦的点在golang中对goroutine的管理在外部是不可控的,知乎这种做法等于使用了panic+recover做到了在内部随时控制跳出goroutine的方法。他们还有一个亮点,在golang中调用python,就是使用golang调用cgo,再调用c,再通过c调用python。这个链条是真没想到。不过奈何讲师最后告知,这个做法的效率极低,他们最后还是把所有的python库也都切换为golang了。

参会

总结

今天的干货topic很多,学到的招数也有几个了。这次大会让我感觉到golang在很多公司都已经开始开花了。我记得在刚接触golang的时候,大家挂在口中最多的就是试试,看看。现在这么多公司在实际生产项目中都使用到了golang,真是最好的背书了。

写完了11点多了,听完这次大会,真心有冲动把我手头的一个数据处理逻辑比较重的项目改为golang。耳边又响起了洋总的业务收益论,冷静冷静。。。

彩蛋

我们组一个小伙也参加了这次的gopherchina,他在朋友圈的留言颇有有趣,经过他本人同意,这里作为彩蛋贴出来:

参会

参会