這是why的第 107 篇原創文章
你好呀,我是why。
剛剛過去的週末你幹啥了,是捲起來了,還是躺平了?
我其實是想躺平的,但是無意間發現一個學習的網站,居然被這個網站吸引了,然後就跟著網站捲起來了。
真是一個非常不錯的網站,好東西,要大家分享,於是我決定“曝光”一下。
介紹這個網站之前,我先問你一個問題:
Arthas 這個 Java 程式診斷工具,你知道吧?
我相信絕大部分同學都是知道的,但是也有很大一部分同學僅僅是在“紙上談兵”的階段而已。
沒有自己實際操作過。
為什麼呢?
我猜你剛剛知道 Arthas 的時候,肯定是被它各種炫酷的操作、頁面給吸引到了。
心想:臥槽,這麼 6?
興致勃勃的準備實操一把,結果一看:需要自己搞個 Demo ,把 Demo 扔到伺服器上執行起來,然後在伺服器上安裝 Arthas,才能分析。
這一套操作對於大部分人來說是沒有啥問題的。
但是還是有相當大的一部分同學,都沒有一個屬於自己的伺服器。
巧婦也是難為無米之炊的呀。
第一步就被卡的死死的。
有心實操,奈何條件有限。
於是這事就被擱淺了,放著放著,由於自己沒有實操過,關於 Arthas 的各種騷操作也就忘的差不多了。
沒有一個趁手的 Demo,沒有伺服器,沒有一個安裝好環境的伺服器。
這種問題經常出現,也算是學習中遇到的“最後一公里”的問題。
我碰到的這個網站,就是為了解決“最後一公里”這一問題的。
也許它還不夠完善,但是至少在 Arthas 上的支援已經是屬於無可挑剔了,真正的手摸手教學。
鋪墊了這麼多,那麼網站是啥呢?
就是下面這個網站:
https://start.aliyun.com/
知行動手實驗室,是阿里旗下的阿里雲弄出來的雲原生開源技術體驗平臺。
它自帶執行環境。
使用者只需要關心教程內容本身,無需為繁瑣的執行環境準備工作浪費時間。所有實驗都在一個事先準備好執行環境的容器中執行。
它具有沉浸式學習體驗。
集互動式文件、終端、編輯器三個視窗於一個瀏覽器頁面,無需在多個視窗來回複製貼上。
它可以一鍵自動執行命令、程式碼自動修改。
文件實時可互動,通過滑鼠點選即可一鍵自動執行命令、程式碼自動修改等操作;也可以選擇在終端、編輯器內手動輸入檢視效果。
我知道,這裡的畫風看起來很像是一個廣告。
但是我發誓,我真的是自來水,真心推薦。
要動手,多動手
知行動手實驗室,看這個名字就知道強調的是“行知合一”,是“動手”。
我曾經看到過阿里的一篇名叫《我看技術人的成長路徑》的文章。
文章裡面提出了一個 721 原創:
70% 做中學,20% 向他人學習,10% 自學
但是實際情況呢,我們不得不承認,大家自學佔據了相當大的比重。
而大家自學的時候都有一個通病就是:只看、只想,基本不動手。
關於動手,我印象最深的就是我看這本書的時候:
我記得看這本書的時候,是我剛剛畢業一年多的時候。
當時覺得技術書還挺貴的,還是和同事一起合買的,一人出一半的錢,書放在辦公室大家一起看看。
我那個時候一有時間就去翻翻這書。
第一次看的時候感覺:哇塞,這真是一本好書啊。裡面全是我不知道的知識點。
但是看完之後,沒隔多久,遇到一個問題然後想了半天:呃,這個問題書上好像講過啊,怎麼就想不起來了呢?
於是我就問同事:你是怎麼看這個書的呀?我前段時間把書每一頁都翻完了,但是現在好多東西都想不起來了。
他告訴我:首先得多看,書中的資訊量對你來說還是太大了,看一遍吸收不完全是很正常的。還有,書裡面的這麼多動手操作的例項,你跟著敲了沒?我都操作了一遍,遇到了各種各樣的坑。印象自然而然的就深刻了一點。
可謂是一語點醒夢中人,我確實是沒有實操過。
不僅沒有實操過,甚至一看到實操部分的具體命令,我都是幾眼就瞟完了,因為我覺得這部分不重要。
後來我又看了一遍,看這遍的時候,我搞了幾個伺服器,就跟著書上,把上面的命令都敲了一遍。
進度慢了很多很多,但是吸收的東西也多了很多很多。
過去這麼幾年了,時至今日,我都記得週末的時候我跑到公司去翻這本書的場景。我都記得我跟著書上搭建叢集的時候遇到的各種各樣奇奇怪怪的問題。我都記得那 16384 個槽,還有那我怎麼也執行不起來的 redis-trib.rb。
我都記得幾年以後的一次,面試官問我:你瞭解 Redis 的叢集嗎,你自己搭過叢集嗎?
我當然記得了,畢竟之前那個只有一年經驗的小夥子硬著頭皮搭叢集的時候,心態都被搞崩過數次。
還有近段時間斷斷續續在看的《MySQL實戰45講》、《MySQL是怎樣執行的》、《高效能MySQL》。
裡面其實都有大量的例項,特別是 45 講,好東西呀,老師全是基於案例去講的。
我看的時候也看的很慢,反正不管懂不懂,先動手開幾個視窗,然後把實驗的 SQL 準備好,跟著老師一步步的來。
總之,就是要動手。動手,才是學習新技術的不二法門。
做中學,就是動手去做,邊做邊學。
但是動手的時候大多數時間都是在環境的準備上,導致效率稍微有了那麼一點點的低下。
而這個網站,就在部分專案上,解決了這個問題。
知行動手實驗室
回到知行動手實驗室,帶大家一起逛一下這個網站。
說真的,目前這個網站的東西不算特別多,也就是花費了我一個週末的時間研究了一圈。
主要是裡面還有一些我不太瞭解的開源專案,去了解了一下,開拓了一下眼界。
主打的都是阿里生態下的一些技術棧,目前一共有 16 個教程:
可以看到,首先映入眼簾的就是 Arthas 這個診斷工具,畢竟是阿里的親兒子中比較有出息的一個嘛。
全力推廣,不過分。
Arthas 其中分為了四個教程,從入門到實踐一應俱全。
接著是 Spring Cloud Alibaba 系列體驗:
裡面的六個小實驗,其中分散式配置、服務註冊與發現都是基於 Nacos 做的。 RPC 呼叫使用的是 Dubbo Spring Cloud、限流與熔斷基於 Sentinel、分散式事務使用 Seata、分散式訊息基於 RocketMQ。
基本涵蓋了微服務開發的主要模組。
算的上是一次完整的體驗。
當然了,還有一些其他的 RocketMQ、Dapr、Dubbogo、ChaosBlade、k8s 的實操教程,就不一一解釋了。
大家知道目前裡面有這些東西就行。
上面提到的大家可能對於 Dapr 和 ChaosBlade 稍微陌生一點。
簡單的說一下。
Dapr 的全稱是 Distributed Application Runtime,翻譯過來就是分散式應用執行時。
它主要是為了雲原生而服務的。
應該是屬於服務網格中的一種技術,是一種執行時,支援k8s,目的是為了更好的隔離業務,讓業務更少的感知中介軟體等基礎建設。
其實與它對標的,應該就是 istio 架構。
需要注意的是 Dapr 是由微軟發起的一個開源專案,並不是阿里。
阿里是 Dapr 開源專案的深度參與者和早期採用者,相當於是對於 Dapr 的一個國內大廠背書。
而 ChaosBlade 就是阿里巴巴開源的一款遵循混沌工程原理和混沌實驗模型的實驗注入工具,幫助企業提升分散式系統的容錯能力,並且在企業上雲或往雲原生系統遷移過程中業務連續性保障。
引用其 git 上的描述:
https://github.com/chaosblade-io/chaosblade/blob/master/README_CN.md
該專案的生態如下:
目前支援這麼多場景:
比如在知行動手實驗室裡面就有三個實驗場景:
總之,關於 ChaosBlade 你就記住一句話:
它是來搞破壞的。給系統或者系統執行的環境注入各種各樣的故障,以測試並提升系統的穩定性和高可用性。
在知行動手實驗室裡面,除了前面提到的官方教程外,它還支援大家自己上傳教程。
下面這幾種情況就很適合在上面釋出教程:
開源、開發者社群在知行釋出開源專案入門教程,幫助你的社群使用者更好的上手 技術書籍作者在知行釋出你的隨書實驗,彌補技術書籍只能閱讀、無法實操的缺陷 培訓機構在知行釋出的課程先關的教程,配合已有的課程視訊,你的學員可以在知行動手實操
你想想,要是我前面提到的《Redis開發與運維》書裡面的隨書實驗能釋出到這裡,那豈不是美滋滋?
學習效率肯定又高了起來。
教程,是該實驗室的一大核心功能。
但是,它還有另外一大功能:
Java 工程腳手架,下面的標語是:
更適合亞太區開發者的 Java 工程腳手架。
雖然我目前還不明白為什麼是“更適合亞太區”,但是反正聽著就很厲害的樣子。
其頁面是這樣的,是不是很眼熟?
一看就是對標的大家更為熟悉的這個:
https://start.spring.io/
但是通過我的實際使用,我不得不說,還是阿里的腳手架更好用一點。
比如我用阿里的腳手架,搭建的時候選擇一個 web 專案的示例程式碼:
該專案結構如下:
而且這個 web 專案不需要改一行程式碼,甚至不需要你啟動資料庫,就能直接執行起來。
因為其使用的 h2 資料庫:
執行起來後,訪問 h2 控制檯如下:
雖然 Demo 專案執行的過程中我發現了幾個 bug,但是整體無傷大雅,修改起來也很簡單,對於初學者來說,還是很友好的。
在這個頁面我還發現了一個叫做 COLA 的專案架構:
COLA 是啥玩意?
https://github.com/alibaba/COLA/
我在官網上拉了一個 COLA 的 Demo,跑了起來,專案結構如下:
官方給了這樣的一個程式碼結構圖:
看到這裡的時候,我大概明白了,有 App 層、Domain 層、 Infrastructure 層,這個架構其實就是 DDD 思想的一種落地吧。
經過這兩天短暫的瞭解,我發現如果想要理解一下抽象的 DDD 思想,那麼 COLA 架構,我感覺是一個不錯的切入點。
Arthas 教程
前面介紹了這麼多東西,我還是來帶著你實操一把,裡面的黃金教程:
其實我覺得真的沒有這個必要,因為它上面的教程已經是一步步的手摸手教學了。
比如,你看這個 Arthas 基礎教程,我給你錄個螢幕:
左邊是操作文件,右邊是執行環境。所及即所得,多香啊。
我是強烈建議你把四個教程都自己去看一遍,操作一把。
但是重心可以放到這個教程裡面:
你看看這個教程裡面的 14 個實驗:
都是實戰性的手摸手教學,別人環境、場景、工具都給你準備好了,你只要需要關注於怎麼使用這個工具就行了。
比如其中的“Arthas熱更新程式碼案例”,這個其實就是一個生產環境常常會遇到的一個問題:
有一個判斷邏輯有問題,我不想修改程式碼之後,重新打包,然後走上線流程,怎麼辦?
Arthas 熱更新瞭解一下?
比如,下面的程式碼:
@GetMapping(value={"/user/{id}"})
public User findUserById(@PathVariable Integer id) {
logger.info("id: {}", (Object)id);
if (id != null && id < 1) {
throw new IllegalArgumentException("id < 1");
}
return new User(id.intValue(), "name" + id);
}
現在當請求的 id 小於 1 的時候會丟擲異常。但是上線之後,我們經過評估發現這個地方也許返回一個預設的值,不丟擲異常會更好一點。
那麼我們就可以用 Arthas 對這段程式碼進行熱更新。
左邊是修改之後,右邊是修改之前:
具體怎麼去修改,怎麼去用 ClassLoader 載入修改之後的程式碼,這個案例裡面都有詳細的使用說明:
當然了,如果你要是在實操之後,又再去了解了其熱更新背後的工作原理,那麼是再好不過的了。
知道了使用方式,掌握了實現原理。恭喜你,再給自己的套一個生產案例,不經意間面試的時候有多了一個加分點。
另外,悄悄的說個騷操作。
你可以隨便找個教程,領個視窗,然後......
比如我裝個 Redis:
用起來也是不錯的:
而且它也支援檔案的上傳和下載:
誒,反正就是玩嘛。就當熟悉 Linux 命令了。