你好呀,我是歪歪。
前幾天在 github 上衝浪的時候,發現了兩個寶藏東西。
我也不藏著掖著了,拿出來給大家分享一下。
這兩個寶藏是關於 arthas 和 SOFARegistry 的,這兩個東西都是阿里開源的專案。
arthas 大家應該都比較耳熟能詳了,知道它是阿里搞出來的一款 Java 診斷工具。
而 SOFARegistry 是個啥玩意?好像沒怎麼聽說過呢?
我接觸這個東西的時間也不算長,但是我大概知道它是個什麼東西,我覺得是一個輪子,但是這個輪子還挺厲害的。
不著急,等下就給你擺一擺。

arthas
arthas 這個玩意,我都不記得我之前的文章中出現了多少次了。基本上都是關於它的使用實際操作案例或者說是官方提供的練手 Demo。
它的使用範圍也還是非常的廣泛:

那麼,我在它的 github 上又發現了什麼寶藏東西呢?
就藏在它的 issue 的 Labels 裡面:

點開 Labels,你會發現有個叫做 user-case 的標籤:

這個標籤下的 issues,就是我想說的第一個寶藏:
https://github.com/alibaba/arthas/issues?page=1&q=label%3Auser-case
我給你截圖第一頁的內容,你看看是不是很有一種想要點進去看看具體是啥的慾望:

比如給你看看工行的這個 user-case:
https://github.com/lyghzh/pub/blob/main/doc/%E5%B7%A5%E5%95%86%E9%93%B6%E8%A1%8C%E6%89%93%E9%80%A0%E5%9C%A8%E7%BA%BF%E8%AF%8A%E6%96%AD%E5%B9%B3%E5%8F%B0%E7%9A%84%E6%8E%A2%E7%B4%A2%E4%B8%8E%E5%AE%9E%E8%B7%B5.md
我之前其實一直認為大家會覺得 Arthas 在生產上執行其實是一件非常危險的事情。
它就是一把雙刃劍,用的好了,早點下班,用的不好,說不定背個生產事故。
所以,採取因噎廢食的方法,乾脆就不使用了。
工行,作為一個銀行,在這個方面的考慮肯定也更加的多。
在他們的落地困難點上,首當其衝的就是“資訊保安”的問題,這是它們的基礎紅線,也是銀行的立根之點:

那麼它是怎麼在生產上使用 Arthas 呢?
在這個 case 裡面,給出了這個問題的答案。
我們設計了一套輕巧的架構,讓開發人員以Web UI的方式,便捷、直觀的使用各類線上診斷能力。那麼我們是怎麼做的呢?
基於 Arthas 的功能,再次封裝了一個 web UI 頁面出來,藏在這個頁面背後的介面,可以對執行結果進行剪裁和修改,處理成 json 格式資料返回給平臺做展示。

文章中除了介紹整體架構之外,還提供了實際使用的效果。
比如控制皮膚看起來就很眼熟的樣子:

就是基於 Arthas 原生的響應,搞了一個展示頁面。
頁面上的這些資料都是 Arthas 返回的:

還有反編譯的功能:

但是在文章中並沒有看到熱載入相關的內容,我猜肯定是對於這類危險的功能,從 web 頁面上就進行了遮蔽。

在這個 issues 下面,我還發現別人提到另外一個類似的專案:

這是去哪兒開源的一個 Java 應用診斷工具:

不延伸了,學不過來了。
再比如這個案例:
https://github.com/alibaba/arthas/issues/1892

然後他使用 Trace 一點點的追蹤時間消耗比較大的方法,再一點點的進行修復。
經過了四次優化之後,相同請求的呼叫鏈路耗時,從最開始的 343ms 降低到了 27ms,你說這不香嗎?

然後,他給出了結論,也就是這次優化的點:

你可以發現其實都不是什麼特別大的優化,就是一些我們平時在使用的細枝末節的東西。
最後,他還寫了一個“強烈推薦”:動態追蹤技術漫談。
好吧,這個也是我很久之前就收藏了的網站,不藏著了。也拿出來一併分享了:
https://blog.openresty.com.cn/cn/dynamic-tracing/

這個部落格裡面的文章質量非常的高,部落格的主人是章亦春,他是開源專案 OpenResty 的創始人,同時也是 OpenResty Inc. 公司的創始人和 CEO。
我們就是說,大佬背書,放心閱讀。
這裡我只是在第一個寶藏中隨便挑了兩個案例出來,剩下的你自己去挖掘吧。
SOFARegistry
SOFARegistry 是個啥?

其實我理解它就是一個註冊中心的輪子。或者更具體一點的說就是具有阿里特色的 Eureka。
這是它的 github 地址:
https://github.com/sofastack/sofa-registry
你看到其中的 sofastack 了嗎?
SOFARegistry 只是一個棋子,sofastack 才是棋盤。
這是一個 Stack,是一個技術棧,是一個金融領域的架構方案。

它下面的專案非常多,從主要專案的名稱命名,什麼 xxxBoot,xxxRPC,xxxRegistry 你就可以看出,用這些專案我們可以搭建出一個完整的專案:

關於 SOFARegistry 的寶藏也藏在它的 Labels 裡面:
https://github.com/sofastack/sofa-registry/issues?q=is%3Aissue+is%3Aopen+label%3Aevent%2Fsource-code-analyze

這個叫做 event/source-code-analyze 的 Label,你別看沒幾個東西,但是裡面全是原始碼分析。
而且是官方發起的活動,文章內容會有專人 review,力保準確性:

這次一共釋出了 9 個原始碼解析的任務:

任務難度有高有低。根據任務難度有不同的獎勵措施:

有機會成為社群的 Contributor 或者直接是 Member,還是相當有吸引力的。
比如我們看一下關於資料倒排索引的這個任務:
https://github.com/sofastack/sofa-registry/issues/202

它的 issues 描述裡面也指出了需要寫什麼內容,去看哪一部分的程式碼。
指路已經指的很明確了。
最後解析文章提交的格式是 md 格式:
我們可以直接下載下來進行閱讀。
到時候對於想要深入理解 SOFARegistry 的同學來說就是一個很好的切入口。
雖然 SOFARegistry 知道的人不對,但是我還是想把 SOFARegistry 的這個活動寫出來,讓更多的人知道他們有這樣的活動。
因為我覺得這個活動非常的好,原始碼解析,是我看到一種全新的參與開源專案建設的方式。
最後,關於這兩個寶藏,告訴我一個什麼道理?
它告訴我:逛開源專案的時候要多注意它的 Labels,說不定藏著什麼好東西。反正我以前是很少關注 Labels 的,我一直以為只有專案維護者才關心 Labels。

最後,文章首發於公眾號[why技術],歡迎大家來關注呀,比心。