GopherChina 2019 keynote 點評

AlexaMa發表於2019-05-01

今年的 GopherChina 大會如期而至,沒能親臨現場,但是 keynote 絕不會錯過。一如往常,謝大第一時間放出了今年的keynote。今年的 keynote 中有不少老面孔,不知道以後大會是否會把固定若干老面孔作為慣例。如果你錯過了去年的 keynote, 可以參見鄙人拙文《GopherChina 2018 keynote 點評》

整體上,今年的演講主題跟往年所涉及的領域和覆蓋的範圍區別不大,無論你是關注架構、微服務、語言細節,還是資料庫、儲存、業務及應用系統構建,都能從中找到自己感興趣的內容。

1.1 大型微服務框架設計實踐 - 杜歡

如果你曾經想用比較hack的方式獲取goroutine id, 那麼你有很大可能性使用過杜歡的goroutine. 也因為寫Golang 獲取 goroutine id 完全指南的緣故,跟杜歡結識。看到這個keynote,心裡還是有種從未謀面,但是久違的熟悉感。在大概3年前,我其實也做過類似的框架設計和開發。很多理念和原則的確是 cant't agree more. 其中,“框架和業務正交”的原則也是充分發揮了golang自帶的正交特性。

在框架中,隔離層的思想很樸素,但是很實用。我曾經因為在設計之初沒有引入隔離層,自己手動修改了多個資料庫驅動庫,以滿足框架某個特性的引入。如今想想,真的是血與淚的教訓。

1.2 用Go打造Grab的路徑規劃和ETA引擎

不得不感慨,Grab 的業務才是真的大型生活類服務。從形態上看,已經約等於國內滴滴+美團+順豐組合了。演講內容偏向演算法。對地圖路徑規劃(無論是遊戲地圖還是現實地圖)感興趣的同學,可以看看演算法到實際工程落地之間的gap如何彌補和解決。

1.3 Go practices in TiDB - 姚維

印象中,PingCAP 出來的speaker分享質量一直都挺高。姚維老師的這次分享也保持了PingCAP一如既往的高水準,深入淺出,以小見大。一直比較好奇TiDB這種對軟體質量要求極高且分散式的領域是如何做測試的,看了其Schrodingergofail 的介紹,無論從主觀體感還是技術信賴都TiDB加分不少。failpoint 在實現層面是基於golang AST 做的,編譯時被轉換為一個 IF 語句,整體設計簡單直接有效,是我喜歡的風格。

另外一個比較有意思的點是使用 chunk 來優化記憶體使用。以前只知道使用整塊連續的記憶體分配策略比碎片化的記憶體分配更有效率,但是不知道連續記憶體帶來的向量化執行優勢。如果你是做高效能資料庫的,這個點一定不能不知道。

1.4 Testing; how, what, why - Dave

Golang官方人員 Dave 大鬍子老師出品,必屬精品。關於golang如何做測試的資料,看這一個就夠了。

1.5 Go 業務開發中 Error & Context - 毛劍

在 golang 1.x 中,錯誤處理一直是一個不太舒服點。因此才有去年 Rethinking Errors for Go 2 對golang 2.x 錯誤處理的預覽和展望。但是,golang 2 是沒有具體時間表的,當前階段,如果你在實際業務系統中對錯誤處理有疑惑,可以看看毛劍的處理方式。

Context 其實算是一個老生常談的話題了,但是毛劍總結了很多實際使用中的最佳實踐,分享內容還是誠意滿滿的。

1.6 Go併發程式設計實踐 - 晁嶽攀

從原始碼級別探究Go在併發層面的基礎庫實現。跟去年的深入CGO程式設計一個風格,內容非常全面和豐富,有細節有深度。如果想深入golang原始碼,一定不可以錯過。

1.7 百度APP Go 語言實踐 - 陳肖楠

從ppt內容看,算是一個大廠在小場景的golang實踐。涉及的問題,以鄙人淺見:使用golang落地1年以內的創業公司都會遇到。給出的解決方案和踩過的坑已經遠看不到國內巨頭的風範了。如果百度再被扣上技術不行的標籤,那就是哪都不行了……

1.8 Golang to build a real-time interactive SaaS Cloud - 董海冰

golang 在 WebRTC 場景下的工程實踐。以前對 WebRTC 比較模糊,細緻看了分享內容以後,才發現這塊的內容和涉及的技術如此廣博。前端時間,提供視訊會議解決方案的 zoom 上市了,日後我們應該有很大概率看到更多 golang 和 WebRTC 的落地方案。

2.1 基於MINIO的物件儲存方案在探探的實踐 - 於樂

作者用 golang 擼了一個支援多叢集的分散式物件儲存系統。有兩個技術細節值得技術投資和持續關注:

  1. Reed-Solomon,一種低冗餘,高可靠的糾刪碼。golang 版本的實現可以參見reedsolomon.
  2. The Linux Storage Stack Diagram. 能讓你係統全面的瞭解 IO,並且知道 Direct IO, page cache 的本質。

2.2 從零開始用 Go 實現 Lexer & Parser - 何源

作者編譯原理的底子還是在的。想當年,我們該課程的期末課程設計就是編寫一個編譯器。不過大部分時候,如作者所言,如果不是萬不得已,不要自己寫 parser. 畢竟,在不使用正規表示式的前提下,golang 提供了非常完善易用的 AST 基礎庫支援。

2.3 高效能高可用的微服務框架TarsGo的騰訊實踐 - 陳明傑

golang和微服務經過這幾年的演進發展,無論是基礎框架還是周邊生態,已經達到了水乳交融的程度。鵝廠的這個實踐從當前時間點看,沒有什麼亮點,更沒有什麼突破。本以為會有一些 service mesh 方面的嘗試,但是比較遺憾,這方面從分享內容看還走得比較靠後。

2.4 閃電網路—BTC小額支付解決方案 - 方圓

不知道這個方圓老師跟去年代表羅輯思維做分享的speaker是不是同一個人?如果是的話,真的是選錯了行業風口呀。幣圈有風險,跳巢需謹慎。

2.6 用Go構建高效能資料庫中介軟體- 徐成選

一個使用golang打造中介軟體的實踐。文末提到了一些優化方案和細節,挺受用。

2.7 花椒直播基於golang的中臺技術實踐 - 周洋

周洋老師也是老面孔了,第一次出現在gopher大會應該是大表360做IM長連線的分享。聽那一次分享自己幾乎是跪著聽完的,因為在那之前自己要解決的問題和場景跟其非常類似,只是礙於當時的人手和自己的技術棧儲備,我沒能做出周洋那樣的方案和架構,而是用了一個比較trick的方案。晃眼間,4年過去了,周洋對於中臺的思考又給了自己很多啟發。感謝 GopherChina 這樣的平臺,感謝周洋老師的分享。

2.8 知乎社群核心業務 Golang 化實踐 - 杜旭

作者分享了知乎從 python 遷移到 go 的歷程。巧合的是,三年前,我們也做了同樣的事情,同樣是從 python 遷移到 go. 不過作者有幾點做得比當時的我們更好:

  1. 在介面驗證環節上,我們當時希望靠儘可能覆蓋全面的單元測試和QA驗證來保證;知乎在額外還引入了python和go版本的介面交叉校驗。test case的豐富和覆蓋程度應該比我們當年更好。
  2. 引入了靜態程式碼檢查。如果用強型別語言不適用靜態程式碼檢查,那麼就損失了強型別語言一般的優勢。道理都知道,但是礙於當時CI/CD流程不夠完善,我們這個環節一直是缺失的。

注意

以上內容只是看完keynote以後的個人觀感。因為沒有去現場,細節肯定有所缺失,有些觀點也未必跟現場同學的反饋吻合。希望後面放出大會現場視訊以後,自己能夠進一步完善以上內容。

相關文章