(10)響應(yīng)式宣言、響應(yīng)式系統(tǒng)與響應(yīng)式編程——響應(yīng)式Spring的道法術(shù)器

本系列文章索引《響應(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ù)

1.5 響應(yīng)式系統(tǒng)

1.5.1 響應(yīng)式宣言

關(guān)注“響應(yīng)式”的朋友不難搜索到關(guān)于“響應(yīng)式宣言”的介紹,先上圖:

(10)響應(yīng)式宣言、響應(yīng)式系統(tǒng)與響應(yīng)式編程——響應(yīng)式Spring的道法術(shù)器

這張圖凝聚了許多大神的智慧和經(jīng)驗,見官網(wǎng),中文版官網(wǎng),如果你認(rèn)可這個宣言的內(nèi)容,還可以簽下你的大名。雖然這些內(nèi)容多概念而少實戰(zhàn),讓人感覺是看教科書,但是字字千金,不時看一看都會有新的體會和收獲。

這也是新時代男朋友的行為準(zhǔn)則:

  • Responsive,要及時響應(yīng),24小時在線,不準(zhǔn)不接電話,微信回復(fù)時間要在5分鐘以內(nèi);
  • 如何做到Responsive呢,首先要Resilient,就是無論如何要有回應(yīng)。即使在玩LOL,也要接電話,哪怕正在聯(lián)合國演講,那么也要設(shè)置好“對不起寶貝兒,稍后打給你么么噠~”的自動回復(fù);
  • 做到Responsive的另一點是Elastic,要彈性應(yīng)對大量命令的到來。當(dāng)奉天承運的圣旨過多時完不成怎么辦?對不起,不存在的,如果學(xué)不會三頭六臂,那就拉幾個好友幫忙;
  • 圣旨是通過異步方式傳遞的(Message Driven),給花店打電話訂花、到蛋糕店訂蛋糕等,別忘了購物車?yán)锏摹跋㈥犃小币皶r處理嘍~ 這些訂單都是具有一定格式和目的地的消息,然后異步等待快遞上門。

以響應(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):

  • 比如如今比較火熱的云原生和DevOps的理念與實踐,以及更早一些的自動化運維,都有助于讓系統(tǒng)更加Elastic,不過系統(tǒng)架構(gòu)的微服務(wù)化也是功不可沒;
  • 類似于Hystrix的熔斷器(Circuit Breaker)使得系統(tǒng)更加Resilient,因為它能夠及時將服務(wù)異常遏制在可控范圍內(nèi),避免雪崩;而類似kubernetes的云原生應(yīng)用能夠及時發(fā)現(xiàn)和重建系統(tǒng)中的異常服務(wù);
  • 而類似RabbitMQ、ActiveMQ這樣的消息隊列產(chǎn)品有助于構(gòu)建消息驅(qū)動的系統(tǒng),并發(fā)揮解耦、提速、廣播、削峰的作用;
  • 消息驅(qū)動有利于系統(tǒng)的彈性和可靠性,彈性和可靠性又使得系統(tǒng)的響應(yīng)更加及時;
  • 等等。

1.5.2 響應(yīng)式編程與響應(yīng)式系統(tǒng)

響應(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)

h5響應(yīng)式網(wǎng)站建設(shè)