今天繼續昨天的文章,參加了次日的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,他在朋友圈的留言很有有趣,通過他本人贊成,這裏做爲彩蛋貼出來: