一個20年技術老兵的 2020 年度技術總結

你們好!我是 go-zero 做者 Kevin。充滿驚嚇的 2020 快要過去了,看到掘金上的技術人年度徵文,忍不住文字記錄一下艱辛而又充滿收穫的 2020 ✍️node

疫情開始

春節假期疫情忽然升級,咱們面臨着自身平臺的轉型升級。做爲曉黑板CTO,有兩個重點工做:nginx

  • 保證大規模使用場景下平臺的穩定性
  • 保證轉型所需的新業務可以快速交付

團隊壓力巨大的同時也感覺到了史無前例的戰鬥熱情,養兵千日用兵一時,不經歷戰與火的洗禮,怎麼知道團隊的技術能力是否可以經受得住流量洪峯的考驗。git

戰鬥開始,迅速落實業務團隊進行急需功能的開發,並行安排架構團隊進行技術隱患排查、演練、攻關。github

在大概兩個月的時間裏,咱們基本每日三餐都在電腦桌前,困了就睡覺,醒來寫代碼(固然還有必要的開會),這真是人生一段很是難忘的特殊經歷。。。後端

開始踩坑

隨着所需功能的極速上線,咱們立刻開始了大規模壓測,大坑以下:微信

  • 大量請求失敗,然而服務端壓力一切正常,一頓排查,發現原來是進到內網的請求被 nginx 轉發時又打到外網了,而外網咱們是啓動了 WAF(Web Access Firewall),WAF 會認爲全部用戶都來自咱們內網的那些 IP,這「明顯」是攻擊嘛,因而 drop 了大量請求,由此,咱們指定了規則:進到內網的請求不容許轉發到外網。
  • 爲了快速實現功能,有同窗用 nodejs 實現了部分功能,部署到 k8s 集羣裏,流量一塊兒來,nodejs pod 立馬扛不住,再加上難以控制的內存泄露,讓咱們迅速決定再也不容許使用 nodejs 作後端,使用 nodejs 純屬「意外」。
  • 某雲廠商 oss 存儲用的 LSM Tree 方式實現,在小文件突發增長時沒法及時分裂,致使咱們訪問量大時出現兩次 oss 訪問故障。後來咱們本身多申請了幾個 bucket 來從代碼層分散文件存儲請求。

實戰效果

通過先後一個月開發、壓測和開學前演練,咱們的系統基本知足開學需求了,接下來就是接受實戰檢驗了。架構

開學第一天,咱們遇到的第一個問題部分服務供應商沒法承載流量壓力,雖然咱們以前盤算過,也充分交流過,但仍是未能預料到洪峯流量的兇猛,服務商緊急增長資源得以解決。併發

而後咱們消息分類服務的 ElasticSearch 集羣壓力過大,擴容的同時,發現調用代碼未加熔斷保護,直接把 ElasticSearch 集羣壓死了,裏面加上熔斷保護,幾行代碼就行了,自適應熔斷保護工具包見 這裏框架

通過第一週的密集爆發式流量的考驗,咱們整體很穩定。爲此還獲得了有關部門的感謝信,相比友商,咱們的服務穩定性仍是至關不錯的。後續服務穩定性上基本能夠用波瀾不驚來形容。至此,go-zero (雖然此時還不叫 go-zero)算是經受了充分的實戰檢驗 💪ide

走向開源

7月份在跟集團技術通道老師的交流過程當中獲得了充分的確定,集團開源通道推進和幫助我把底層微服務支撐框架對外開源。

在8.7日深夜,我完成了 github 代碼的第一次提交,此時文檔僅有我臨時寫出來的一頁 readme,爲啥只有一頁 readme 就選擇開源了呢?我以爲萬事開頭難,若是決定把文檔都寫完再開源出來的話,可能這事就擱置了,因此仍是先讓球滾起來吧!

一經開源,社區立馬給了咱們比較熱烈的反饋,更推進了咱們去快速完成文檔。咱們在一個週末就補充了大量的使用文檔,提供了比較完整的示例 shorturlbookstore。後面大部分開發者都經過這兩個例子感覺到了 go-zero 的便捷和工程效率。感謝你們給了咱們不少對示例的改進意見。

8月16日,go夜讀的分享 系統的講述了 go-zero 背後的故事和設計思考,得到了不少觀衆的留言承認。至今依然有很多人針對這個視頻給我積極的反饋。感謝你們的承認!

8月24日,gocn報道,讓 gopherchina 社區第一次大規模的瞭解了 go-zero。社區開始有大量gopher的加入,微信羣人數迅速增加。

9月開始,go-zero 屢次出如今 github Go 語言日榜月榜頂部,如圖:

日榜 月榜
day month

同時很多家公司將 go-zero 用於生產,並跟我反饋上線後一直平穩運行,其中不乏日活過百萬的平臺。

10月得到了 gitee 最有價值項目(GVP),並接着得到了開源中國年度 最佳人氣項目獎項

11月22日,我在 gopherchina 大會作了『雲原生go-zero微服務框架的設計思考』的主題分享,現場氣氛很是熱烈,聽說門口堵滿了進不來了,得到了不少資深開發者的承認,知乎評論見 這裏,其中提到的個人年齡不對哈👀,部分現場圖以下:

分享 觀衆
talking audience

12月20日,應邀參加騰訊雲開發者大會,作了『轉型以後 - 面對流量洪峯,微服務架構如何進行彈性設計?』的分享,以下:

開始 大綱
talking audience

在掘金髮了 20+ 篇 go-zero 系列文章,跟用戶詳細分享了微服務框架設計的原理和實現,詳見 這裏

社區的承認

近 3000 人的微信社區,天天熱烈的技術討論和用戶之間的相互幫助,已經造成了良好的社區氛圍。咱們也從中得到不少的用戶反饋,爲咱們進一步增強 go-zero 指明瞭方向!👏

github star 正常每個月增加 1000 左右,平均天天 33+ stars,如今 4700+,增加曲線以下:

trends

再次覆盤

  1. 用戶到底想要什麼樣的框架?

    • 首先,可以寫更少代碼解決業務需求。更少的代碼意味着更快的產出,更少的bug。
    • 其次,框架是否穩定,有沒通過實戰檢驗。畢竟不多人願意當小白鼠的。
    • 再次,社區是否活躍,遇到問題是否可以快速獲得解決。
  2. 用戶爲何喜歡 go-zero?

    • 全面的微服務治理能力
    • 內置 goctl 工具幫助用戶儘量只關注業務代碼
    • go-zero 通過了咱們線上海量併發實戰檢驗
    • 活躍的社區,用戶的互相解答,go-zero 團隊的及時跟進

2021年技術展望

  • 研發團隊工程效率帶上新臺階,指望讓你們產出更高的同時也能有更好的能力提高
  • 指望進一步增強 go-zero 的工程效率提高,讓開發者編寫更少的代碼(業務代碼)就能擁有穩定的微服務系統
  • 一個小目標:一年一萬星 💪

項目地址

https://github.com/tal-tech/go-zero

歡迎你們使用 go-zerostar 支持咱們!👏

致謝

真心感謝一直支持咱們的大佬們,以及衆多使用 go-zero 的 gopher 們,之因此不列名單,實在是幫助過咱們的人太多了,生怕一不當心就遺漏了某位大佬 🤝

項目地址:
https://github.com/tal-tech/go-zero
相關文章
相關標籤/搜索