分享 | 道法術(shù)器響應(yīng)式 Spring
曾有讀者問我之前的文章《微服務(wù)網(wǎng)關(guān)演進之路》里提到的編程框架 SpringWebflux有沒有比較好的學習資料或者文檔。
我都是看官方文檔和網(wǎng)上比較零碎的資料,對新手來說不友好。
也想過自己來寫一個關(guān)于響應(yīng)式編程的系列文章,奈何水平有限,很多東西我自己也是一知半解,就不來誤人子弟了。
再后來發(fā)現(xiàn)了這樣一個CSDN博客專欄,名叫 【道法術(shù)器】響應(yīng)式Spring,作者劉康,寫的非常好,特別適合入門,下面是博客原地址,分享給大家:
https://blog.csdn.net/get_set/category_9272724.html
總共有20多篇文章,這些文章通俗易懂,我也是認真看過幾遍才來推薦的。
從什么是響應(yīng)式編程、響應(yīng)式流等概念說起,為什么需要響應(yīng)式編程,還有什么其他方案以及優(yōu)缺點等都說到了,還順便把所需要的lambda、函數(shù)式等知識也給我們補齊了,后面還有一些小例子,甚至教我們?nèi)绾螁卧獪y試,如何測試性能等等。

當然這個專欄偏入門和科普,只要有點 Java 基礎(chǔ)就能看,如果你確實想動手實踐一下,作者還翻譯了 Reactor3(SpringWebflux 核心依賴) 的參考手冊
https://htmlpreview.github.io/?https://github.com/get-set/reactor-core/blob/master-zh/src/docs/index.html
響應(yīng)式編程是比較小眾的技術(shù),但如果你要用 Java 寫個網(wǎng)關(guān)這樣的服務(wù),可以看看。Apache 開源的這款網(wǎng)關(guān)產(chǎn)品,也是基于 SpringWebflux 框架來寫的
https://github.com/apache/incubator-shenyu
作者能把一個抽象的概念說的非常清楚,這點也是我們技術(shù)寫作的追求,下面分享一段作者寫的一段介紹IO到底有多慢的文字:
很多情況下,在大的空間和時間維度上,數(shù)量級經(jīng)常會大到超出我們的認知范疇,我們的直覺總是不可靠的。
一、舉兩個空間維度的例子:
在大的尺度上,印象中,銀河系的中心位置群星閃耀,就像趕集一樣。但實際上,如果把恒星們縮小到沙粒的大小,那么密度也就相當于一個體育場有一兩粒沙子。曾經(jīng)看科幻片,總是擔心光速飛行的飛船來不及拐彎或剎車撞到星球上,實際上,想要撞上才是相當不容易的。
而在小的尺度上,原子核具有原子絕大部分的質(zhì)量。
但實際上,如果把一個原子也放大到體育場那么大,原子核才僅僅相當于一個乒乓球那么大,空曠的很!
二、從時間維度上:
往大了說,如果地球45億年歷史縮短為一年,那么人類有記錄的浩瀚文明史不過相當于幾秒鐘而已。
往小了說,“一瞬間”與“一瞬間”可能會差好幾個數(shù)量級。我們就從微觀時間維度來了解一下“CPU眼中的時間”,你會發(fā)現(xiàn),發(fā)生在計算機中的阻塞也許比你直覺印象中夸張的多。
CPU眼中的時間——
CPU絕對稱得上是“閃電俠”,因為它們做事都有自己的一套時鐘。我們故事的主人公是一個主頻為2.5GHz的CPU,如果它的世界也有“秒”的概念,并且它的時鐘跳一下為一秒,那么在CPU(CPU的一個核心)眼中的時間概念是啥樣的呢?
CPU先生所在的組是硬件部計算組。對它來說,與其一起緊密合作的幾個小伙伴還能跟的上它的節(jié)奏:
CPU先生很利索,只需要一秒就可以完成一個指令,復雜的動作可能需要多個指令。 好在“貼身秘書”一級緩存反應(yīng)比較快,能夠秒懂CPU先生的意思。 來自“秘書組”的二級緩存雖然要十幾秒才能“get”到CPU先生的點,但也不算太遲鈍。 和內(nèi)存組的合作已經(jīng)習以為常了,跟內(nèi)存請求的數(shù)據(jù)通常要4-5分鐘才能找到(內(nèi)存尋址),不過也還好啦,畢竟一級緩存那里能拿到80%想要的數(shù)據(jù),其余的二級緩存也能搞定一大部分,不怎么耽誤事兒。
CPU先生是典型的工作狂,任務(wù)多的時候,通宵達旦也毫無怨言,但是有什么事情讓它等,那簡直要他命了。恰恰一起共事的其他組(尤其是I/O組的磁盤和網(wǎng)卡)相對來說那效率是低的離譜?。?/p>
關(guān)于I/O組的同事,CPU先生已經(jīng)抱怨很久了,每次找SSD要東西,都要花費4-5天才能找到(尋址),等到數(shù)據(jù)傳送過來,幾周都過去了。機械磁盤更是過分地離譜,跟他要個數(shù)據(jù),竟然要平均花費10個月才能找到,如果要讀取1M的數(shù)據(jù),竟然要20個月!這種員工怎么還不下崗?! 關(guān)于網(wǎng)卡,CPU先生知道它們也盡力了,畢竟萬兆網(wǎng)絡(luò)成本頗高。與機房內(nèi)的其他小伙伴們用千兆網(wǎng)絡(luò)互相溝通也算順暢,給另一臺機器的CPU朋友發(fā)送1K的書信,最快七八個小時就可以送過去了。但是1K的書信經(jīng)過層層包裹,實際也寫不了多少話。更要命的是,網(wǎng)卡們的溝通手續(xù)繁雜,每次網(wǎng)絡(luò)溝通前的 “你好能聽到我嗎?——我能聽到,你那邊能聽到我嗎?——我也能聽到你,那我們開始吧!” 這樣的握手確認都要花掉很長的時間,不過不能當面溝通,也只能這樣了。這還好,最恐怖的是與其他城市的小伙伴溝通,有時候傳遞消息要花費好幾年呢!
由此可見,對于CPU先生來說,想要讓工作充實起來實在不容易,不過多虧了內(nèi)存組的小伙伴幫忙分批緩存往返于I/O組的數(shù)據(jù),矛盾才有所緩解。
更多可去看他的博客,純粹的分享好東西,CSDN 給作者發(fā)了私信沒回我,如果覺得有點用處,記得給我點贊加關(guān)注哦~
如果想看到更多的分享,也歡迎加我微信,朋友圈也經(jīng)常分享一些技術(shù)文章~
- END -