今天继续昨天的文章,参加了次日的GopherChina,例行完成总结。python
关于对象存储,以前用过seaweedfs,可是对MINIO这个项目真是一无所知。于乐分享了下东道主探探在使用MINIO的整个过程。如今回想下来,最具备印象的是他们针对上线后的问题作的一些优化。首先在写过程作了小文件写合并成一个大文件的写的优化,另一个是读的过程作的优化,把meta信息存放在levelDB中。最后说出来的优化操做也就这两个地方,可是在整个过程当中如何找到瓶颈点的过程是颇为精彩的。首先是采集profile信息,mc和pprof,把酷炫的火焰图绘制出来了,而后告诉咱们,从这个图里面看不出什么东西。。。囧。。。而后经过最土的方式统计函数调用时长,经过分析时长关注到了是IO调用的问题,继而分析了下MINIO的写流程,想到了MINIO的写是随机写,当使用不上pagecache的时候,就会有性能问题了。从而使用了小文件合并大文件的方法。这个方法在文件系统的设计使用上也是很经常使用的。这里我学习到了一个fio测试工具,来测试io的性能。接着针对读流程,进行读压测,发现一旦不是顺序读,从N个节点上读取meta信息这个读操做会致使总体读操做性能下降,这个操做是能够优化的。综上,就在读和写两个方面作了优化。mysql
总体topic听下来就莫名有一条时间线牵着,从接到需求,技术选型,技术调研,部署,遇到问题,分析,尝试,最终解决方案。就好像跟着讲师一块儿从零搭建了一套对象存储系统,很是精彩。确实大量的小文件存储系统的设计和使用是很难的一件事情。回来以后,我就给MINIO加了个星星。git
这个讲师何源的气场就明显高于上个讲师了。这个topic的需求缘起我如今其实都以为有点意思。有一堆作教研的人员须要录入大量题目,可是他们以为使用Web页面录入效率过低,而且一旦修改,没有版本记录。因此就想到使用标记语言来代替表单录入,使用git进行提交管理,而且使用CI进行提交测试。这是多么极客的作法!!!至关于让运营人员写markdown了。哈。可能就和讲师说的,工程师就是魔法师,没有工程师解决不了的问题,若是有,那么就找两个工程师。可想他们公司的文化应该也是很推崇技术的把。golang
其实我以为,他们这个需求被知足最难的点是业务上能想到使用标记语言+git进行教研的录入。后续的技术就是围绕如何用Go实现自定义标记语言的解析和建立AST树。这一部分就是状态机概念,根据不一样的token,解析器进入不一样的状态,直到将文本解析完毕,而后进行语法树的建立。他中间的大篇幅PPT就是围绕代码展现提及。其实感受上去,想清楚了使用状态机模型,其余的东西也就所有完成了,都是细节实现的东西了。其实当时我还私下YY了一下,要是我作这个需求,好像golang channel的pipeline模型很适合这个模式,能作到解析和分析流式进行。不过也仅限于YY了。sql
BAT中的T的大杀器推荐topic。Tars框架已是一个很出名的项目了,不过以前也是没有了解。此次听下来全程乍舌,真牛逼!!不过私下想,这么庞大的一个框架,涵盖服务框架,服务治理,部署运营,调度等集于一身,也只有超级大厂能有此等人才和人力了。感受一个公司能够彻底照搬全收他们这一套,来应付开发+运维+架构的工做了。数据库
前面的n个ppt我听完只能海豹式鼓掌了。后面几个PPT倒是有一些实用的,在开发tarsgo过程当中他们注意到的点,好比尽可能不用反射,尽可能使用指针返回数据,如何优化Timer,使用sync.pool来缓存临时对象。这些在实际coding中都是要注意的点。缓存
一样,听完以后回来,他们的Tars和TarsGo多了我这颗星星。服务器
这个话题要是在去年,是否是应该要爆了场了。可是在今年。。。没有任何区块链底子的我,听的迷迷糊糊。整场听下来,算是普及之旅把。markdown
这个topic给我普及了什么是以太坊,什么是闪电网络。还给我普及了作区块链的人根本不知道谁是中本聪。后面还有洋葱路由的概念也是第一次听到,这是一种网络上匿名沟通的传递方式。网络
虽然讲了不少,可是对于我这个区块链小白来讲,太深了。也着实没有啥兴趣继续了解。
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在这几年的发展确实很快,不只仅是语言,周边也逐渐都完善起来了。
这个中间件是mysql的中间件,名叫Gaea。
刚看到是mysql中间件的时候,就有点嘀咕了,如今mysql的中间件方案已经那么成熟了都,还造轮子。。。后来看了下,这个Gaea看起来比mycat等多了很多功能。也转念想了想,大厂本身从零打造一个轮子也仍是有好处的,至少不是黑盒使用了。不过看到这个中间件的sqlparse使用的是TiDB的sqlparse,就让我对pingcap公司又多了几分敬重。
Gaea下个月才打算开源。一样,我也主要关注他们实现过程当中使用go的一些亮点。一个是配置热加载。经过atomic的Store方法实现配置的源自加载的方法我记下了。还有就是链接池,貌似一个goroutine一个connection的模式在高并发下是不可选的,都是对goroutine的浪费。好多服务框架都选择使用了goroutine链接池的方式来实现。关于链接池保活的方案他们不是使用平常的ping,而是使用建立一段时间后自动reconnect的方式来作的。这个感受仍是有点特别的。而后说了下Context的使用,这个话题此次会议已经有n个topic说过了。。。还说了下他们使用时间片来实现的session管理。
这个项目的星星等下个月他们开源了再给他们把,先欠着。
洋老是我之前在360的老同事了。这个topic也是我很期待的。毕竟他在花椒从零开始作起了技术中台。
洋总一来就讨论起了语言,放了几个PHP和Go语言的对比,讨论了下花椒不一样情境下对技术中台技术栈选型的思考。当下我看了看以前加的一些群,有看到这个ppt的也在讨论谁是世界上最好的语言的事情。我很认同洋总在语言选择上的观点的。收益!语言本质就是为业务服务的。没有业务收益的动做仍是少作为妙。并且考虑的条件越多,语言层面的收益会愈来愈小。
而后讨论的是中台应该作什么。如今中台这个说法真是很火,动不动就是一个业务中台。洋总眼中的中台是以业务高效为原则而高度定制化的。很接地气的说法,能让业务好好跑的中台就是好中台。然后介绍了他们给业务作的一些中台服务,gokeeper,总线服务,cron任务管理服务等。总体感受下来,他们中台服务作的很是细,不少业务的需求已经渗透进入了业务中台了。关于这个事情,洋总没有纯技术人的洁癖,反而很自豪说,如今咱们很乐于告诉业务,这个需求咱们也能作。我想,这就是经历了创业公司从零到一才能培养出来的实干风格把。
这是最后一个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,他在朋友圈的留言很有有趣,通过他本人赞成,这里做为彩蛋贴出来: