本系列文章索引《響應(yīng)式Spring的道法術(shù)器》
前情提要 響應(yīng)式編程 | 響應(yīng)式流創(chuàng)新互聯(lián)建站專注于循化企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站建設(shè)。循化網(wǎng)站建設(shè)公司,為循化等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
關(guān)注“響應(yīng)式”的朋友不難搜索到關(guān)于“響應(yīng)式宣言”的介紹,先上圖:
這張圖凝聚了許多大神的智慧和經(jīng)驗,見官網(wǎng),中文版官網(wǎng),如果你認(rèn)可這個宣言的內(nèi)容,還可以簽下你的大名。雖然這些內(nèi)容多概念而少實戰(zhàn),讓人感覺是看教科書,但是字字千金,不時看一看都會有新的體會和收獲。
這也是新時代男朋友的行為準(zhǔn)則:
以響應(yīng)式系統(tǒng)方式構(gòu)建的系統(tǒng)更加靈活,松耦合和可擴展。這使得它們更容易開發(fā),而且更加擁抱變化。及時地響應(yīng),以保證良好的用戶體驗。系統(tǒng)錯誤和異常在所難免,當(dāng)異常出現(xiàn)時,要優(yōu)雅地處理之,不要任其蔓延、甚至到達用戶眼前。
關(guān)于宣言的具體內(nèi)容官網(wǎng)上很詳細,就不多贅述了。
從落地方面,我們不難想到一些具體技術(shù)來支撐響應(yīng)式宣言的目標(biāo):
響應(yīng)式宣言是一組架構(gòu)與設(shè)計原則,符合這些原則的系統(tǒng)可以認(rèn)為是響應(yīng)式的系統(tǒng)。而響應(yīng)式系統(tǒng)與響應(yīng)式編程是不同層面的內(nèi)容。
看到網(wǎng)上有些文章在介紹RxJava、Reactor等響應(yīng)式編程技術(shù)的時候,會用響應(yīng)式宣言來引出話題,稍微有點驢唇對馬嘴的感覺(^_^)。響應(yīng)式系統(tǒng)(或響應(yīng)式宣言)與響應(yīng)式編程又是一對容易被揉在一起用的兩個術(shù)語(上一對容易被混用的術(shù)語是“響應(yīng)式編程RP”和“函數(shù)響應(yīng)式編程FRP”,見1.3.1 lambda與函數(shù)式),它們從關(guān)系上看雖然不如“雷鋒”和“雷峰塔”、Java和JavaScript那么遠,但并不存在必然的因果關(guān)系。
作為《響應(yīng)式宣言》的作者,Jonas Bonér和Viktor Klang解釋了響應(yīng)式編程與響應(yīng)式系統(tǒng)的區(qū)別與聯(lián)系(“Linux中國”上有翻譯版),其中也有對響應(yīng)式宣言四個原則的解讀,值得學(xué)習(xí)。我從中總結(jié)了一些二者的不同點:
1)戰(zhàn)術(shù)與戰(zhàn)略的區(qū)別
響應(yīng)式編程是異步編程下的一個子集,是一種范式,有具體的開發(fā)庫,側(cè)重于由信息/數(shù)據(jù)流而不是命令式的控制流來推動邏輯的前進。
響應(yīng)式宣言是一組設(shè)計原則,一種關(guān)于分布式環(huán)境下系統(tǒng)架構(gòu)與設(shè)計的思考方式,響應(yīng)式系統(tǒng)是符合這一架構(gòu)風(fēng)格的系統(tǒng)。
2)事件驅(qū)動與消息驅(qū)動的區(qū)別
響應(yīng)式編程——專注于短時間的數(shù)據(jù)流鏈條上的計算——因此傾向于事件驅(qū)動;而響應(yīng)式系統(tǒng)——關(guān)注于通過分布式系統(tǒng)的通信和協(xié)作所得到的彈性和可靠性——則是消息驅(qū)動的。
響應(yīng)式宣言中從定義上闡述了消息驅(qū)動與事件驅(qū)動的不同:
一條消息就是一則被送往一個明確目的地的數(shù)據(jù)。一個事件則是達到某個給定狀態(tài)的組件發(fā)出的一個信號。在一個消息驅(qū)動系統(tǒng)中,可尋址到的接收者等待消息的到來然后響應(yīng)它,否則保持休眠狀態(tài)。在一個事件驅(qū)動系統(tǒng)中,通知的監(jiān)聽者被綁定到消息源上,這樣當(dāng)消息被發(fā)出時它就會被調(diào)用。這意味著一個事件驅(qū)動系統(tǒng)專注于可尋址的事件源而消息驅(qū)動系統(tǒng)專注于可尋址的接收者。
3)組件范圍與系統(tǒng)范圍的區(qū)別
響應(yīng)式編程的“活動范圍”是在組件內(nèi)的,是一種管理組件或服務(wù)內(nèi)部邏輯和數(shù)據(jù)流的技術(shù),即使像1.4.2節(jié)中那樣數(shù)據(jù)流從服務(wù)B向服務(wù)A的流動,也并非跨服務(wù)的消息傳遞,只是基于API的調(diào)用而已。
響應(yīng)式系統(tǒng),強調(diào)組件/服務(wù)間的信息交流,并通過響應(yīng)式宣言提供了一種處理分布式系統(tǒng)彈性與可靠性的原則,因此是面向分布式的系統(tǒng)范圍的。
4)空間解耦能力的區(qū)別
正如前邊介紹到的異步調(diào)用方式那樣,事件驅(qū)動的響應(yīng)式編程側(cè)重于時間上的解耦,從而在技術(shù)層面提供了一種更高性能的并發(fā)方式。然而其范圍限定了它不易于實現(xiàn)空間上的解耦。
消息驅(qū)動的異步性使得響應(yīng)式系統(tǒng)既能夠在時間上解耦,還具有空間的解耦能力。服務(wù)間不僅可以通過消息隊列實現(xiàn)分布式協(xié)作,還可以根據(jù)負(fù)載實現(xiàn)單個服務(wù)的彈性伸縮,從而實現(xiàn)響應(yīng)式宣言中Elastic的能力。
5)總結(jié)
響應(yīng)式編程技術(shù)通常用于在單個節(jié)點或服務(wù)中對數(shù)據(jù)流進行異步非阻塞的處理。當(dāng)有多個結(jié)點時,就需要認(rèn)真考量數(shù)據(jù)一致性(data consistency)、跨結(jié)點溝通(cross-node communication)、協(xié)調(diào)(coordination)、版本控制(versioning)、編排(orchestration)、錯誤管理(failure management)、關(guān)注與責(zé)任(concerns and responsibilities)分離等等的內(nèi)容——這些都是響應(yīng)式系統(tǒng)架構(gòu)要考慮的內(nèi)容。
類似的,Spring WebFlux是一種響應(yīng)式編程框架,用于開發(fā)響應(yīng)式應(yīng)用,而Spring Cloud不僅是更是一套適應(yīng)于當(dāng)今云原生環(huán)境下微服務(wù)架構(gòu)基礎(chǔ),更加接近響應(yīng)式宣言的目標(biāo)和響應(yīng)式系統(tǒng)的設(shè)計原則。
不過也應(yīng)該看到,也正是由于響應(yīng)式宣言中對現(xiàn)代系統(tǒng)的Responsive、Resilient、Elastic和Message Driven的要求,使得對響應(yīng)式編程技術(shù)的呼聲越來越高,顯然響應(yīng)式編程技術(shù)是構(gòu)建響應(yīng)式系統(tǒng)的合適工具之一。尤其是隨著面向響應(yīng)式宣言的響應(yīng)式流規(guī)范(Reactive Streams Specification)這一頂層設(shè)計的提出,類似Reactor、RxJava、Vert.x、Spring WebFlux等的響應(yīng)式編程技術(shù)在響應(yīng)式系統(tǒng)中必將發(fā)揮越來越大的作用。
關(guān)于響應(yīng)式系統(tǒng)的話題比較大,涉及到許多的理念、技術(shù)。本系列的文章仍主要聚焦于響應(yīng)式編程的范疇,并在最后討論響應(yīng)式編程在Spring Cloud中的應(yīng)用。
新聞名稱:(10)響應(yīng)式宣言、響應(yīng)式系統(tǒng)與響應(yīng)式編程——響應(yīng)式Spring的道法術(shù)器
當(dāng)前路徑:http://muchs.cn/article38/pjjjsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站建設(shè)、網(wǎng)站策劃、營銷型網(wǎng)站建設(shè)、微信公眾號、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)