Gopher China 2017 大会怎么样?

在上海举办的gopher china 2017怎么样?有收获吗?技术大牛的都是诚意分享的吗?
关注者
404
被浏览
39678

32 个回答

我是本次的讲师之一,和大家分享一下我的参会体验。

在准备阶段, @asta谢 很早就要求大家交第一版 ppt (大概是三月底),在大会前一周收了大家的第二版稿件,并且给出了自己的修改建议。我自己的第二版 PPT 发出去之后,谢大看完后觉得内容 OK,我就去忙自己的事情了。

结果在大会开始前两天的晚上,谢大告诉我说我的 ppt 比例有些奇怪,偏小,而现场的屏幕很大,担心会影响演示效果,我才发现确实有问题,应该是从 google doc 转成 keynote 的时候有些问题。我花了很长时间,重新做了一半的图,重新复制粘贴了所有的文字以及调整排版,弄到很晚才搞定,发过去之后,谢大当时还是在线的,估计是还在检查别人的 PPT。很惭愧这个格式的问题是被别人发现的。谢大检查的比我还仔细。

在会议期间,由于我司有一个展台,大多数时间我都在展台那边和各位 Gopher 交流,还抽空跑出去见了好几个客户,以及和三个面试候选人聊了一下。所以基本上只有在零星时间能去会场听一下,错过了好几个我感兴趣的 Talk :(,只能在有空的时候看看其他讲师的 PPT。

从各位讲师的 PPT 来看,两位国际友人的 Talk 都是专注在语言层面,其他的讲师大多是从一线业务出发,偏重架构和一些才过的坑,我看了之后还是挺有启发,特别是几个讲微服务的 Talk(很惭愧,我之前对微服务并不了解,看完之后还挺有兴趣的)以及讲金融、证券行业的 Talk。

我觉得参加技术会议,不是只有讲纯技术的 Talk 才有收获,很多一线的技术经验更加宝贵和实用,这些都是不断踩坑才得到的。虽然有时候业务类型相差比较大,并不能直接用上,但是他山之石可以攻玉,很多思想都是可以借鉴的。

最后说一下我自己的 Talk。如果让我纯去讲语言的细节或者是像 Dave 一样讲一些 black magic,坦白说我也不知道怎么讲,很多听众了解的都比我多很多。我是希望和大家分享我们在用 Go 开发过程中的一些经验,我们遇到过的坑,希望大家能够有一些借鉴,少走一点弯路,能达到这个目的我就很开心,这一点我还是能讲出一些东西的。

但是纯讲这些也很无聊,大家也不了解背景,不知道哪些场景下会遇到这些问题,不能很好的理解我们为什么要这么做,所以我把我们的场景也尽可能地以简单、轻松的方式让大家有一些了解。除了能帮助理解后面的实践经验外,还能让大家了解一点如何做数据库。从现场来反应来看,我这个选择还是比较讨巧,也是先介绍业务再介绍 Go 语言,大家听起来还是比较轻松有意思,可能很多码农都有一个做数据库/操作系统/编译器的梦,所以大家不排斥介绍数据库的话题。非常感谢大家对我的 Talk 的认可。

另外作为讲师还有一点福利,就是一起吃了一顿饭并且住在一起,有不少的机会能够相互交流,这种小范围的交流一般会比较深入,且大家私下聊天顾忌会少些,也更轻松些。我就是 @刘楠 答案中给 Francesc 查词典翻译菜名的那位,当时在尝试翻译鲜和腌笃鲜这两个词,实在不知道怎么说。。。最后告诉他是 salt pork and baby bamboo soup


注: 利益相关,PingCAP 是本次 GopherChina 的赞助商,


==========最后再插入一个软广===========

我们正在尝试把 TiDB 的开源社区做起来,目前已经有一个小的社区,几十个外部贡献者,我们接下来会尝试做一系列 Talk 和讨论会,把 TiDB 内部尽可能多的细节传播出去。

这样做一方面是希望能让大家通过 TiDB 这个例子能了解到数据库的内部机制,特别是一个分布式数据库如何实现,另一方面也让感兴趣的同学都能更好的参与我们的社区。

这个事情预计会在接下来的一两周启动。

作为一个刚学go的前端,作为极少数听完全部17个讲题的听众, 我还是很有必要来回答一发。
跟其他分享会议很不一样的是, gopher china大部分议题开篇就是why go...... 而讲到how to的时候,又多跟整个系统架构有扯关系。

侧面也反应了议题重合度太高, 跟讲师自家业务的耦合度太高。

接下来具体说说每一个议题。


1. Go 在大数据开发中的实战经验 七牛云 孙健波

其实说的就是七牛的pandora系统,有幸在别的地方听过,所以对这个系统,可能比其他人更了解多一些。这个系统太庞大,随便挑一两点都能讲上几个小时。

所以即使讲师水平不错,演讲能力也挺出色,会让人感觉是比较泛泛而谈,因为整个东西太大了。

why go

数据系统工具选型和整合

数据流动效率问题

how

内存 硬盘队列

保证数据一致性 <= 通过qconf保证 最终一致性

一些坑和方案 变长的失败等待时间


2. Go in TiDB 申砾 pingcap

what is TIDB

-> 混合型数据库 RDBMS and NoSQL

特性需求 高可用(物理断开),扩展性,ACID, 兼容SQL

architecture SQL Layer

这里有个非常酷的图,申总详细解释了从sql文本到结构,再到执行的过程。让人瞬间有种会了DB底层的错觉。

why go (又回到了经典的问题 )

goroutine

  • 对比了一下mysql的执行模式 执行sql单进程,不能很好利用多核cpu

然后跑了两个例子

  1. data scan
  2. hashjoin

讲了一些关于并行常见的问题

内存没释放导致的泄漏

端口没释放导致的泄漏

解决方案

  • block profile
  • timeout
  • context

关于使用内存的经验 -- 谨慎使用内存

tips: 看内存分配多少次, 而不是分配了多大空间

利用sync.pool 优化

为什么用gogo/protobuf而不是 golang/protobuf

貌似是说 golang的protobuf原子型问题,new出来的原子类型不是指针(这里没听懂,捂脸)


内存监控方面 -- 希望能管理到每个session的内存上限

Q&A 中有人问了session是指什么,申总回答说是指一个连接的client


最后是TiDB这个项目未来的展望和对golang的展望


提问环节,第一个问题是TiDB分布式架构, 申总说不是多master,one master已经足够了,目前看来没有超出这个架构的问题。

第二个问题忘记了

第三个问题是就是问session。


3. GO coding in go way 白明

唯三说go语言本身的的主题的其中一个。感觉说的挺好的,用的语言决定了思维模式

展示了埃拉托斯特尼算法 三种语言的实现方式

  • c是内存(数组)的操作处理
  • haskell 是通过函数递归
  • go 通过并发组合,为每一个素数建立一个goroutine, 然后做筛除

然后是说go语言的三个价值观。分别是 简单, 正交, 偏好并发

举了很多例子,有自己写的也有标准库的截图。看的出来很用心, 大量的去阅读过标准库和主流库的代码和风格。

选题切入蛮有意思, 但是演讲能力和节奏把握需要提升。

4 understanding the interface Francesc Campoy

唯三说go语言本身的的主题的其中一个。听的巨开心,说到了很多细节很平时不怎么注意的点。

上来先举了乐高积木的例子

然后说了concrete types & abstract types

what happen union two interfaces --> bigger interfaces

然后说了一下why do we use interface

  • 写通用算法
  • 隐藏实现细节
  • 提供拦截指针 (providing interception points 应该是这个意思吧)

这个时候给出了两个观点

  • the bigger the interface, the weaker the abstraction
  • be conservative in what you send , be liberal in what you accept

大概就是说越大的interface,抽象能力越弱; 约束你的返回值,不约束你的接受的参数

给了四个不同参数类型的函数作为对比,还和现场做了互动。

貌似选择interface{} 类型参数的人最多(我也是算这个,捂脸),然后具体分析了一下优劣。


然后对比了四种返回类型


然后将这种接受-返回的概念和TCP的send receive做了类比。

然后对比了静态调用和动态调用

再然后是说 chaining interfaces

最后就是回顾和总结了, why interfaces

水平有限,不是很跟的上。

总体上给我的感觉就是大神写go还是还注重这些细节的,把坑挖得很深。


5 NSQ 重塑之路

先说了一些痛点,然后why go

然后是一些优化的细节

服务端改进

  • 改造channel
  • improve write performance --组提交方式
  • ...

消费端改进

copy all data from topic channel to consume channel -> cursor

其他优化

超时处理

减少timer (timer 堆出入 对cpu的损耗

架构优化

etcd 元数据 meta data service

动态 ISR

然后说了 负载均衡的问题

然后说了分布式系统的测试和追踪(分布式的trace和test 是大家非常关注的点,感觉下一届可以拎出来单独说)

  • 发现可能的分布式系统的问题
  • 把节点从网络中随机剔除
  • 写入和读取 不停的重试
  • 有没有丢, 有没有重复, 超时情况

然后是对比了 Kafka RocketMQ NSQ(redesign)

然后是在有赞的业务应用场景

最后是回顾。

总体说的还是很不错的,涉及一些细节,但总体上比较泛,希望能深入一些核心的实现或者重要功能的细节。

6 基于Go的微服务架构(Spring开发者视角)

这个大家吐槽的多,但感觉切入角度挺好的, 讲从java切到go, 不仅仅是语言,还是关乎soa的周边生态这些。
虽然也是why go,但他这个是一直专注在why go上面,没跳出来过。

看ppt内容感觉也挺丰满的。

最大的问题是讲师演讲能力和节奏把控太差,准备不充分(可能是代写的ppt)

7 用Go搭建Kubernetes Operators

讲师想强调并且推广operators这种概念, 但似乎被误解成来玩k8s实操的。。

本身k8s和docker有gap, docker和go有gap,所以如果找不到一个好的角度来切入,来组织ppt和演讲节奏,就很容易被大家当成是混子啊。。。

吐槽完毕,说会议题内容本身。

首先说 app = code + config

然后说容器发展的两个阶段

  • 标准化
  • 调度(大概是这个意思

说了一下有状态应用和无状态应用的概念。

然后说管理有状态应用是非常困难的, 所以诞生了很多专门帮其他公司管理有状态应用的公司,例如es,spark...

然后由此引出了 Operator 概念

  • observe .e.g 当前集群节点数量, 节点版本
  • analyze
  • act

然后说到他们感觉这个根据这个概念, 实现了一个叫做etcd Operator库

  • resize
  • upgrade
  • backup
  • failover

8 哔哩哔哩的Go微服务实战 毛剑

开篇明义 why go

说了一些原来架构的问题, 比如说nginx 1000多条的location, 各种挂...

然后就是how。 在这么多的how之中,毛老师的how是比较全面通用的, 得到了广泛好评

主要介绍了以go为主的一套架构的实现,非常前面,关于微服务的基本都涉及了。


9 Grab 高超

why go

微服务架构

然后强调他们团队用一个repo,然后花了很长很长的时间说为什么要用一个repo。这个部分饱受争议。

然后说了他们自己有一套CI,和测试覆盖率的检查工具。

接下来是是到分布式的追踪, 有很多细节, spanID,traceID,这部分说的比较清晰,挽回了不少分。

然后说了一些DNS的坑和解决方案。这部分见仁见智,看见很多朋友说服务发现不应该这样搞。

10 Go 语言在扫码支付系统中的成功实践 张建龙

差不多也是why go , how 的套路, 走神了...可能是审美疲劳,没怎么仔细听。。。


11 Go 在百万亿级搜索引擎中的应用 360 郭军

用go实现的开源搜索引擎。也是强调了一下why go

内容详实,但是也是话题有点大了,想着面面俱到,每个部分都提了些, 大概是听懂了, 转过头就没啥印象了。

提问环节有位es的粉丝,质疑了一下说, 为什么不直接用es, 日均100w条(这位估计听,捂脸逃)完全没问题。

讲师郭军大神哭笑不得:“100w条!? 我们是日均100万亿条!!”

哈哈哈,不过最后郭军还是选择了送书给这位有点懵的小伙伴。


12 The hidden #pragma's of Go -- Dave Cheney

重头戏,Dave大神。

看到有另外答题的朋友拼错成了program。这里强调一下,pragma是编译指示、编译注解的意思。

类似的概念在其他语言也有,js里的'use strict' 应该是解析器(js没有编译器)的注解。


What are pragmas? The name come from the #pragma declaration that tells C compilers to alter their interpretation of a piece of code. Now, Go doesn’t have a #pragma directive, but it does have ways of altering the operation of the Go compiler via directive syntax hidden in comments.
This talk will explore the history of these directives, how and why they are used, and how you can, but probably shouldn’t, use them in your own code.

引用自Dave大神博客, go里面没有专门pragma指令,但是通过隐藏在注释中的方法能够做到pragma的事情。

虽然Dave大神展示了很多黑科技,但是你们代码里面可千万不要用哦。

附golang pragma的代码,找了挺久的 golang/go


13 跨境电商的 Go 服务治理实践 ezbuy 陈冶

why go and how。

也是偏重说业务场景和架构的, 雷同的主题比较多。得空补充


14 使用 Golang 语言实现 DevOps Orchestration 华为 马全一

类似于提供给企业解决方案,偏重的是不同业务场景实现。

还有一些踩坑的经验

ppt做的挺好的


15 Harbor 开源项目中容器镜像远程复制的实现 张海宁

布道师的演讲能力还是强的,说话有气势,铿锵有力。

主要是说Harbor这个开源项目,但选题方面就有点类似于k8s的尴尬。

说了一点why go的内容,但主要还是偏重于开源项目,其中又偏重跨主机(机房)的私有仓库的同步问题。 但是docker本身就提供有这个api,相当于做一层封装。

不过我们部门这边有在用,其实还是蛮不错的。

16 Go 在证券行情系统中的应用 广发证券 刘楠

讲得真是很好,在倒数第二个,错过的同学有点可惜了。

刘老师穿着西装上来,害的我以为是推销的。。 差点睡着了。

虽然why go哪里很雷同,但是刘老师还是个段子手,扯了几个段子活跃一下。

然后说到优化。优化的主要原因是证券系统的要求

后面主要都是围绕着优化在说。

对象方面,减少gc,使用了对象池

尽量使用栈对象, 少使用堆对象。

这块和Dave大神提到的pragma //go:noescape 中的例子也映衬了一下, 一下子就觉得很好懂了。

goroutine方面的优化。

然后还有8级 hash table优化,用空间去换取时间。

最后是网络底层协议的坑。 是关于tcp offload切片的。

这个分享质量非常高, 让人眼前一亮。还有一些部分记得不是很清楚,看看有没有人补充。非常值得去找下回放,重温重温


17 Go 语言在证券期货行情系统中的实践 金大师 张泽武

最后一个又回到了why go, 然后啰啰嗦嗦扯了很多团队的事情。这部分感觉可以说的快一些,一笔带过那种。

后面说了一些碰到的坑和解决方案,整体类似杂谈

总的来说,内容比较雷同, 节奏把握不太好,演讲能力也比较差,不知道是不是因为最后人太少了,导致讲师情绪低落。。。



----------------------------------------------------------------------

总算过了一遍,还是很多缺漏的,只是一个大体上的感觉和回顾。对于一个go新手玩家来说很不容易了。感觉大多数议题都是从why go展开,然后balabala...

用java的可能很少去强调why java, 我就这么用了,你怎么滴。

可能不久的将来,当选go变成很理所当然的时候, 也就不太需要太过于强调why go。

内容上讲围绕go语言架构的偏多,软广硬广都有。整体上来说其实还是很好的,感觉选题要找个切入口,不要太大,能深入说一两个点就挺不错的。上来就是我们公司业务的微服务为什么用go,怎么怎么样搞,每个分享内容都这样谁受得了啊

毕竟会场内1200多人,众口难调。我觉得算是做的非常好的了,谢大 @asta谢 辛苦了,继续加油~~另外下次要找几个场内志愿者,有一次问答环节你不在的时候,在Dave大神帮忙递话筒的 =。=