挖一個大坑,WebFlux 開搞!
隨著 Spring5 的推出,WebFlux 被置于越來越重要的位置,無論是內(nèi)在的學習驅(qū)動,還是公司的項目要求,很多小伙伴們都開始關注 WebFlux 了,也有很多小伙伴在微信上私我能不能整一套 WebFlux 教程?
整當然是能整,不過最近忙是真的忙,松哥最近開始帶團隊了,有很多需要和其他部門對接的事情,晚上十一點還在出方案。。。寫公號的時間被嚴重壓縮了,但是不管怎么樣,該寫還是要寫,不僅僅是對小伙伴們的承諾,也是對自己的承諾。
想來想去,這次就整 WebFlux 吧,有小伙伴已經(jīng)催了快一年了,該搞了。
今天我們就先來介紹下響應式系統(tǒng),畢竟不了解響應式系統(tǒng),那學習 WebFlux 干嘛?
1.什么是響應式系統(tǒng)
響應式系統(tǒng)的目標是靈敏度高,系統(tǒng)穩(wěn)健一直有回復,松耦合和可擴展。響應式系統(tǒng)是一種架構(gòu),可以應用于任何地方,無論是一個小小的博客網(wǎng)頁,還是復雜的網(wǎng)購系統(tǒng),都可以使用響應式架構(gòu)。
一般來說,響應式系統(tǒng)有四個顯著的特點:
- 即時響應(responsive)
- 回彈性(resilience)
- 彈性(elastic)
- 消息驅(qū)動(message driven)
下面這張圖很好的描述了這幾者之間的關系:
消息驅(qū)動是手段,彈性和回彈性是形式,最終的即時響應就是它的價值。
接下來我們來逐個介紹這四種特性。
2.四大特點
2.1 即時響應(responsive)
即時響應的特點就是一個字,快!
現(xiàn)在 4G 的普及,百兆千兆帶寬的使用,CPU 計算能力的提高,都在降低用戶對于一個系統(tǒng)的耐心,一個網(wǎng)頁,5s 沒加載完,用戶已經(jīng)覺得體驗很差了,30s 還沒加載出來,那你可能失去這個用戶。
所以我們需要構(gòu)建一個健壯的、能夠快速響應的即時響應系統(tǒng),特別是在一些高并發(fā)的場景下,響應延遲還能保持在合理范圍內(nèi),這才是最重要的。
要實現(xiàn)這一目標,要用到很多具體的技術(shù),例如異步加載、預加載等。另外還涉及到彈性(elastic)與回彈性(resilience)這樣一些原則性問題。
2.2 彈性(elastic)
彈性其實就是指系統(tǒng)隨時可以動態(tài)擴展。
舉個例子,一個電商網(wǎng)站,平時活躍用戶有限,所需要的服務器數(shù)量足夠支撐日常服務即可,沒有必要多買,畢竟都是要花錢的。一旦遇上大促,系統(tǒng)的流量在短時間內(nèi)爆發(fā)出來,這個時候就需要能夠隨時隨地方便的為系統(tǒng)擴容,這就是系統(tǒng)的彈性。
松哥在之前的文章中和大家聊過 Nginx 負載均衡,這其實就是一種擴容的手段?,F(xiàn)在很多中小公司可能回采用云服務,如果使用云服務,一般都可以非常方便的實現(xiàn)動態(tài)擴容。
2.3 回彈性(resilience)
回彈性就是指當系統(tǒng)遭遇到失敗時,依然能夠?qū)ν馓峁┓?。松哥在之前和大家分?Spring Cloud 時,Hystrix 的功能之一就是容錯,當一個服務崩掉的時候,不會拖累到其他服務。通過服務的降級、隔離等手段,可以保證回彈性?;貜椥赃€會要求在系統(tǒng)出錯的時候,能夠自動進行重試。
其實大家看回彈性這個單詞 resilience,不知道有沒有想起來在 Spring Cloud 體系中,用來替代 Hystrix 的工具就叫做 resilience4j,所以如果你了解 Hystrix 的功能,大概就知道什么是回彈性。不了解 Spring Cloud 的話,可以看看這個網(wǎng)站:www.itboyhub.com。
2.4 消息驅(qū)動(message driven)
消息驅(qū)動是具體的實現(xiàn)手段。
在分布式系統(tǒng)中,我們要解耦、隔離服務、提高可伸縮性,為了達成這一目標,消息驅(qū)動是最佳選擇。因為只有消息驅(qū)動能夠同時滿足即時響應、彈性以及回彈性這些要求。
有的小伙伴在學習微服務的時候,可能會看到一個名詞,就叫做消息驅(qū)動的微服務。
在松哥的微人事中,有一個郵件發(fā)送的功能,就用到了消息驅(qū)動,發(fā)件人只需要把郵件內(nèi)容扔到消息中間件中即可,剩余的事情都不用管了,郵件服務器會自動從消息中間件中讀取郵件信息然后將郵件發(fā)送出去,發(fā)送失敗的事務、回滾等等操作,都由郵件服務器自行處理,發(fā)送方只管把消息扔出去就行了,這就很好的實現(xiàn)了解耦。
這就是我們常說的響應式系統(tǒng)的四大特點。
3.身邊的響應式系統(tǒng)
響應式系統(tǒng)其實離我們并不遠,不是說用了 WebFlux、用了 Gateway、用了異步 Servlet 就是響應式系統(tǒng),這其實沒有必然聯(lián)系,上面那些都是實現(xiàn)響應式系統(tǒng)的一個具體方案,具體技術(shù)而已。
舉一個很簡單的消息驅(qū)動微服務的案例,如下圖:
引入了消息中間件 RabbitMQ/Kafka 之后,能夠很好的實現(xiàn) A 服務和 B 服務的解耦,同時利用 RabbitMQ/Kafka 自帶的消息消費失敗重試的功能也能很好的提高系統(tǒng)的容錯性和可靠性。
松哥之前專門錄過提高消息中間件可靠性的視頻,感興趣的小伙伴可以看看:
提高可靠性:
處理冪等性:
4.小結(jié)
總之,響應式系統(tǒng)是一個架構(gòu)層面的東西,它有四個基本特點,它還有很多具體的實現(xiàn)手段,這些具體的實現(xiàn)手段松哥將在未來的文章中和大家逐一進行介紹。
本文轉(zhuǎn)載自微信公眾號「江南一點雨」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系江南一點雨公眾號。