正文
作为一名参加了两届GopherChina的「老人」,今年为了去沟里吃樱桃,就没去现场凑热闹了。不过,会议的keynote是绝不会错过的。AstaXie也在会议结束后的第一时间放出了
会议的ppt
. 看了一下,里面的ppt并不完整,缺了第二天的第一个keynote. 手上有这个资源的同学可以分享我一下
1.1 基于Go构建滴滴核心业务平台的实践
介绍了滴滴老服务迁移到Go的过程。很多内容感同身受,因为在一年前,我们也完成了类似的操作。从slides看,其日志收集、分布式调用追踪等微服务演进过程中解决的问题都是一笔带过,但是其实都是挺花时间的事情。可以参考
微服务troubleshooting利器——调用链
。
比较遗憾的是没有看到其在服务迁移的时候如何确定服务边界和问题领域,更没有深入谈如何拆分低耦合高内聚的微服务的思考。
解决
WaitGroup
和GC问题比较有意思,了解一下即可。
最后介绍了两个开源工具
Gendry
和
jsonitr
, 典型的瑞士军刀、直击目标风格,很棒。
Gendry是一个数据库操作辅助工具,核心是sql builder。我非常喜欢其设计理念:
为什么要开发Gendry
。简单讲,就是在不透明和不易调优的ORM与繁琐、低效的裸写sql之间找一个平衡。
jsosniter则是一个高效的json encodec. 虽然benchmark亮眼,但是我想大部分场景下,我还是会优先选择标准库。因为很多json序列换和反序列化的细节处理上,标准库还是最完善的。
1.2 Go在Grab地理服务中的实践
从slides看,应该是最容易听懂的一个keynote吧。没有贬义的意思,而是对于作者的思维清晰程度和表达能力非常佩服。基于地理位置做供需匹配的同学可以把这个当做范文,看看作者是如何把系统从基于PostGIS开始逐步演进到geohash/redis/shard/cell方案的。
整个内容非常顺畅,似乎作者在现场还普及了一个「能够做叫车服务就能够做送外卖」的梗。
1.3 Rethinking Errors for Go 2
来自 Golang 核心组的 Marcel 同学向大家介绍了Go 2中可能会引入的 error 处理机制。我个人还是能够接受Go 2中这个draft阶段的错误处理方式的。
作者在demo中使用
errc
和
errd
两个lib做演示,想了解细节的同学可以直接点进去看看如何使用。
与现有的错误处理方式比较,能够显著减少
if err != nil
这种代码,并且有更强的语言表达能力。虽然很多人吐槽说 Go 2 最终还是可能会引入关键字
try
,但是从 Marcel 的介绍看,这只不过是一个语法糖而已,编译时候就inline掉了。另外,即使最终的方案通过 try 实现了更多的其他功能,也没有必要一定要避免
try
关键字与其他语言撞车的事实吧。毕竟语言设计追求的是尽可能的合理性和正确性,而不是独特性。
Go在区块链的发展和演进
仅从slides看,就是个区块链科普文,当然,不排除作者现场演讲能力比较强,抖了很多现场才能听到的料。如果你已经对区块链比较了解,可以略过。
Badger_ Fast Key-Value DB in Go
一个pure go的基于LSM tree的 key-value 数据库。如果你不是很了解LSM Tree, 可以参考鄙人的拙文:
LSM Tree/MemTable/SSTable基本原理
。Badger主要有以下几个特点:
-
pure go实现,没有cgo依赖。
-
Badger的LSM tree存储的是 {key, value_pointer},因此可以有效降低LSM tree的大小, 直接load到内存。
-
印度小哥现场跑分,读写性能比boltDB 和 RocksDB 都有相当优势。
-
bloom-filter和file merge实现中规中矩。
-
支持无锁的并发事物。
开源那是必须的,想进一步研究的同学可以移步
dgraph-io/badger
.