基於消息傳遞的軟件架構模型演變

一個優秀的架構師老是能對各類解決方案的優勢和對應成本之間取得良好的平衡,而這種能力背後是架構師豐富的經驗和廣闊的知識體系。基於消息的軟件建構模型則是架構師必備的知識點,本文將詳細描述該模型的演變過程。html

還記得第一次跟師傅打交道,他問我「Hi yang,你的功能設計的怎麼樣了?」我有點不覺得然,不就是個很小的功能麼,爲何要用「設計」一詞,爲何不是「你的代碼寫的怎麼樣了?」。我後來明白了,「設計」一詞表明瞭他對軟件的態度,在他眼中任何功能都應該是設計出來的,沒有通過設計的代碼如同流水賬同樣,只能應付眼前,長此以往代碼變得不可擴展和維護。本文會隨着架構模型的演變過程,對同一個需求進行不斷設計和演變,最終成型。git

 

本系列文章包含如下內容:編程

 

看了這個目錄,也許有人會有疑問,爲何前三條都是在說觀察者模式和事件,這跟基於消息的架構有什麼關係?網絡

            var watcher = new FileSystemWatcher();
            watcher.Created += (object sender, FileSystemEventArgs e) =>
            {
                MessageBox.Show(string.Format("I am interesting in fileName={0} and path={1} which was created", e.Name,e.FullPath));
            };

這是一段使用事件的代碼,.Net中的事件模型是一個觀察者模式,這段代碼能夠描述爲:觀察者(observer)-匿名lambda函數觀察了一個主題(subject)Created。每當有文件被建立的時候watcher會遍歷全部的觀察者並將主題的數據通知給觀察者。架構

而消息則是觀察者模式的進一步抽象。主題(subject)中的FileSystemEventArgs中包含有咱們感興趣的信息,咱們能夠將FileSystemEventArgs理解爲消息,當FileSystemWatcher發現有新文件被建立時發送一個類型爲FileSystemEventArgs的消息便可,不一樣的組件能夠訂閱這個消息得到被建立文件的名稱和路徑等信息。當FileSystemEventArgs可以序列化而且能夠在網絡上傳輸時,不一樣的子系統均可以訂閱這個消息,最終演變爲一個分佈式系統。框架

最終架構圖以下:分佈式

esb

各子系統將本身的消息發送到ESB上,同時訂閱其餘系統中感興趣的消息。各子系統再也不直接相互依賴,後期有新的系統直接接入ESB便可。整個架構最終演變爲鬆耦合,高伸縮性的分佈式系統。函數

 

整個系列的代碼地址:https://git.oschina.net/richieyangs/EventArchitecturespa

相關文章
相關標籤/搜索