iT邦幫忙

2021 iThome 鐵人賽

DAY 1
0
Software Development

從零開始Reactive Programming- Spring系列 第 1

[Day1] Reactive Programming 簡介與前言

  • 分享至 

  • twitterImage
  •  

Reactive Programming

兩年前在JCConf 2019,欣賞了Josh Long精彩又活潑的演講,主題就是Reactive Spring,成功勾起我對Reactive的興趣,當年曾經有嘗試去了解,發現相關的知識很廣泛,算是有點撞得頭破血流,所以兩年後多累積了一些程式經驗,趁著鐵人賽的機會,打算來完整從最零碎的知識開始學習,因為不常寫文章而且功力薄弱,這個系列前半部分是專有名詞研究,主要目的是更好的了解Reactive的意思而不是要學術性的探究,如果有錯誤麻煩多多見諒,有需要討論的地方,歡迎在留言區討論。

在考慮是否參賽的過程中,infoQ的這張圖算是最後一根稻草,我發現Reactive Programming都已經到了Late Majority我居然還不會,而且學會了還可以牽扯到一點Innovators裡面RSocket & Reactive Streams增加一點潮度,就決定來寫了。
https://ithelp.ithome.com.tw/upload/images/20210916/20141418saXjrTN1dI.jpg

目標對象

雖然說是從零碎的知識,但多少還是要先有一點基礎,所以建議是至少擁有以下技術背景再來閱讀會好一點。

  1. Java8:對Stream、Lazy loading、Optional、Lambda、Function 有基本的認識。
  2. Spring:Spring MVC 等相關功能有所了解。
  3. OOP:對物件導向程式設計有經驗。
  4. 程式經驗:有維運過別人寫的程式效果更佳。

目錄

整個系列的大方向

  1. 名詞解釋
  2. Java9
  3. Reactor
  4. Spring WebFlux
  5. R2DBC
  6. RSocket

簡介

Reactive Programming 是一種程式的「典範」(Programming paradigm),最主要是透過減少thread的等待時間(non-blocking非阻斷)來達到充分利用thread的目的,畢竟資源是可貴的,就像是進入到一間餐廳門口,卻沒有人來招待你,你可能就會直接走掉了,但如果有人跟你說聲稍等一下喔,服務人員處理完手邊的事情就會來找你,這樣給人的感覺好多了,同樣的道理,server將事情處理完再通知你來拿,讓thread不用白白的等待。

Reactive Programming 跟微服務(microservices )一樣都是以前就存在的,只是隨著技術、環境的演進後才開始興盛。他的概念與event driven、observer pattern都有重疊的部分,在研究的過程中會讓你覺得他是個熟悉的老朋友,他代表著不斷變化的資料流,某種程度上與Excel中互相依賴的公式很像,會隨資料變動而改變。擅長處理高效能(high-performance)、併發(concurrency)與非同步(asynchronous),在原本寫程式的習慣上,如果使用了concurrencyasynchronous並伴隨各式各樣的鎖(synchronized),如果不謹慎常常導致不容易去除錯與維運,或是一個需求需要透過一個又一個API才有辦法完成,也就是需要等待每個服務都完成,這常常會導致效能不彰(大量IO),以上情況在Reactive Programming都會有比較好的效果。

理解Reactive Programming的初期會被各式各樣的專有名詞轟炸,不要用舊的觀念去思考Reactive Programming,需要有DB的支援、application server、語言本身或是額外的library才能做到,頭昏腦脹是必經的過程,先初步熟悉概念再實作一個DEMO可以更好的去理解。

誰在使用

reactivex.io網站上可以看到Netflix、Microsoft...等大公司都有使用。
reactivex.io

結語

Reactive概念對我來說一開始是充滿許多未知的,但隨著不斷閱讀文章與影片,才漸漸的把拼圖一片片補上去,最後才有一個輪廓出來,所以如果看完簡介還是不了解是很正常的,歡迎下一篇文章再回來,下一篇將會介紹Programming paradigm

大部分有出現的code
rsocket demo code
個人部落格之後可能會整理進去
如果覺得寫得不錯幫忙按個星星或是追蹤,感謝!
資料來源


下一篇
[Day 0] Reactive Programming 資料來源
系列文
從零開始Reactive Programming- Spring32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
chichi
iT邦新手 3 級 ‧ 2021-09-15 17:57:56

正在學習這個XD,希望我能吸收~~

可能只會覺得太淺....一起加油,歡迎討論。

我要留言

立即登入留言