事件驅動程式設計
事件驅動程式設計是以事件為第一驅動的程式設計模型,提到事件,可能有很多容易混淆的概念,這裡的事件是指一種非同步併發的訊息模型,而普通的觀察者模式則沒有這個強調,觀察者和被觀察者之間通訊可以是同步機制。
同步機制的最大問題是會發生堵塞,不但導致效能大幅度降低,無法充分利用CPU潛力,浪費硬體投資,更重要造成軟體模組的鐵板化,緊耦合,無法切割,不利於日後擴充套件和變化。
非同步併發的概念非常符合日常生活中事件的定義,也應該是事件語義的重要核心,實際生活中,事件的觸發是無序且不可控的,對事件的響應當然要做到即時處理,如果用傳統執行緒機制同步處理響應,可能因鎖爭奪發生堵塞,結果導致大量事件未及時處理,非常沒有效率。
從客戶端和伺服器概念來看,客戶端發出大量事件到伺服器(如透過ajax等),伺服器應該是多執行緒響應,但是如果每個執行緒內部處理業務時發生堵塞,執行緒再多也沒有用,也就不能發揮伺服器高併發處理的能力。
所以,我們不只是在伺服器後端要選擇事件驅動的socket架構,如Node.js或Vert.x,還要用事件驅動的程式設計模型將我們的業務落地到它們上面執行。這樣才能在後端形成從底至上徹底的事件驅動架構。
業務的事件驅動程式設計,實際上是將node.js的前後端socket事件驅動機制搬遷到業務領域模型和技術架構之間,正如瀏覽器或Iphone客戶端發出大量事件交由伺服器處理,領域模型也能發生大量事件需要技術架構響應處理,比如大量同時讀寫資料庫等等。這兩者的機制應該是一樣。
下面這個PPT是從伺服器的底層Socket的事件驅動架構上升到最高層業務邏輯的事件驅動程式設計,提出了聚合根的業務模型與Actor模型非常吻合的天然銜接。
同步機制的最大問題是會發生堵塞,不但導致效能大幅度降低,無法充分利用CPU潛力,浪費硬體投資,更重要造成軟體模組的鐵板化,緊耦合,無法切割,不利於日後擴充套件和變化。
非同步併發的概念非常符合日常生活中事件的定義,也應該是事件語義的重要核心,實際生活中,事件的觸發是無序且不可控的,對事件的響應當然要做到即時處理,如果用傳統執行緒機制同步處理響應,可能因鎖爭奪發生堵塞,結果導致大量事件未及時處理,非常沒有效率。
從客戶端和伺服器概念來看,客戶端發出大量事件到伺服器(如透過ajax等),伺服器應該是多執行緒響應,但是如果每個執行緒內部處理業務時發生堵塞,執行緒再多也沒有用,也就不能發揮伺服器高併發處理的能力。
所以,我們不只是在伺服器後端要選擇事件驅動的socket架構,如Node.js或Vert.x,還要用事件驅動的程式設計模型將我們的業務落地到它們上面執行。這樣才能在後端形成從底至上徹底的事件驅動架構。
業務的事件驅動程式設計,實際上是將node.js的前後端socket事件驅動機制搬遷到業務領域模型和技術架構之間,正如瀏覽器或Iphone客戶端發出大量事件交由伺服器處理,領域模型也能發生大量事件需要技術架構響應處理,比如大量同時讀寫資料庫等等。這兩者的機制應該是一樣。
下面這個PPT是從伺服器的底層Socket的事件驅動架構上升到最高層業務邏輯的事件驅動程式設計,提出了聚合根的業務模型與Actor模型非常吻合的天然銜接。
開源力量公開課第十九期- Java事件程式設計影片
完整影片下載:http://pan.baidu.com/share/link?shareid=3706618000&uk=2365734848
[該貼被admin於2013-09-18 14:46修改過]
相關文章
- 事件驅動的微服務-事件驅動設計事件微服務
- Android事件驅動程式設計(二)Android事件程式設計
- Android事件驅動程式設計(三)Android事件程式設計
- Android事件驅動程式設計(一)Android事件程式設計
- Laravel最佳實踐–事件驅動程式設計Laravel事件程式設計
- Laravel 最佳實踐 -- 事件驅動程式設計Laravel事件程式設計
- Laravel最佳實踐 -- 事件驅動程式設計Laravel事件程式設計
- 事件驅動及其設計模式事件設計模式
- 事件驅動架構設計事件架構
- 程式設計模式-表驅動程式設計程式設計設計模式
- DDD領域驅動設計:領域事件事件
- 領域驅動設計(DDD)實踐之路(二):事件驅動與CQRS事件
- 從事件驅動程式設計模型分析Handler訊息傳遞機制事件程式設計模型
- 事件驅動系統設計之將事件檢索與事件處理解耦事件解耦
- linux驅動程式設計(轉)Linux程式設計
- 領域驅動設計戰術模式--領域事件模式事件
- 戲說領域驅動設計(廿五)——領域事件事件
- 程式設計技巧之-表驅動法程式設計
- 驅動篇——核心程式設計基礎程式設計
- Reactor事件驅動的兩種設計實現:物件導向 VS 函數語言程式設計React事件物件函數程式設計
- WDM驅動程式設計之設計開發篇 (轉)程式設計
- RocketMQ 事件驅動:雲時代的事件驅動有啥不同?MQ事件
- 領域驅動設計:CQRS 和事件源的強大功能事件
- 領域驅動設計與模型驅動設計的關係模型
- Qt程式設計獲取滑鼠移動事件QT程式設計事件
- Spring:事件驅動Spring事件
- [譯] 微服務從設計到部署(五)事件驅動資料管理微服務事件
- 關於如何設計一個基於事件驅動架構的思考事件架構
- 問題驅動設計與領域驅動設計的區別 - abdullin
- 領域驅動設計最佳實踐--程式碼篇
- Repository的事件驅動事件
- 理解領域驅動設計
- MasaFramework -- 領域驅動設計Framework
- 領域驅動設計示例
- “訊息驅動、事件驅動、流 ”基礎概念解析事件
- 事件與介面程式設計事件程式設計
- 關於領域驅動設計的函式程式設計思考 - Naveen Negi函式程式設計
- 模型驅動設計(MDD)之靈活設計模型