一種采用消息框架切分擴展的設計方法
Lastupdate:2012年4月6日 蔡東赟
http://www.LomoX.hk社區(qū)發(fā)布。
ps:blog貼不了圖啊,可以再附件下載:一種采用消息框架切分擴展的設計方法
傳統(tǒng)的界面ui和uilogic隔離方式采用的是接口的方式,為了解耦合,為了使隔離層之間業(yè)務統(tǒng)一。如圖,ui層你就負責界面的,你想用什么語言都可以; uilogic層你就只做ui傳下來的io,鍵盤鼠標等的操作行為解析; applogic你就負責業(yè)務,計算執(zhí)行的任務。這樣子,一個需求就可以同時三個人開發(fā)了。

大型基礎軟件為了解耦而做的隔離,導致接口聲明膨脹。可以看到applogic層和uilogic的接口會無限膨脹,與其帶來的就是維護成本,如果是內部定義的接口,書寫的時候你要每個層都提供一份聲明。
最近在想提供一個東西做為隔離層,先看圖。

Applogic和 uilogic就只有數(shù)據(jù)間的通訊了。采用異步的消息方式,不管你是多線程還是單線程。模塊之間耦合徹底消失。有人會問你這個service用啥。
用Zeromq吧,這是我機器上面測試的速度
http://www.shnenglu.com/cdy20/archive/2012/04/01/169791.html 單線程一百w條120s,那個快啊,如果作為本地的派發(fā)器的服務端足夠了。
通信數(shù)據(jù)如何處理呢?zeromq采用的是字符串發(fā)送,我們可以配合google的protobuf定義解析協(xié)議數(shù)據(jù)。這個東西可以壓縮,解壓縮協(xié)議非常方便,配上這個高速度的mq,那簡直棒極了。
Zeromq作為一個可以內核間、跨進程、跨機器通信的消息隊列,不免又為我們提供了更多的設計的想象力。這么一個中間的消息的服務器,我們又可以把applogic切割,分成多個獨立模塊,如圖。

如上圖,我們可以不斷拓展applogic的模塊,我們可以認為這些模塊是獨立的 動態(tài)鏈接庫,獨立的進程都可以,或者是獨立線程,一切通信 進出都是通過發(fā)送send,接收recv。
這個東西我現(xiàn)在遇到的工程項目組就有這個需求,他們要求是能夠并發(fā)開發(fā),甚至兩個人統(tǒng)一個模塊不四個分支同時進行。一個強大的消息框架,讓我的模塊可以成為任何一種定義。
畫個圈圈,歸納一下:

上圖紅色圈圈代表bus。
上圖抽象的圖如下。

這樣程序就可以任意擴展了。任意切分了。
有錯誤和改進方法,請發(fā)到caidongyun19@qq.com.謝謝閱讀。
共享促進技術發(fā)展。蔡東赟。www.lomox.hk
附上提醒:
對待本框架,個人:建議團隊自由度不要太高,需要根據(jù)團隊項目的特點做一定的規(guī)范約束。否則將面臨質量和維護成本遞增。
from lomox li:
如果僅僅是做進程間通信,那是大材小用了
如果是進程內的線程間通信,就不合適
客戶端面臨的問題是消息中心在進程間和線程間的通信
posted on 2012-04-06 11:13
爬 閱讀(1923)
評論(4) 編輯 收藏 引用 所屬分類:
個人框架設計