基于C/S的4層架構(gòu)概述
掃描二維碼
隨時(shí)隨地手機(jī)看文章
基于C/S的4層架構(gòu)概述
ESFramework的4層結(jié)構(gòu)的4層分別是:客戶端(Client)、應(yīng)用服務(wù)器(AS)、功能服務(wù)器(FS)、數(shù)據(jù)庫(kù)服務(wù)器。它們之間的聯(lián)系圖示意如下:
FS (FuncTIonServer),功能服務(wù)器,處理并且僅處理所有的功能性請(qǐng)求,不參與用戶管理、狀態(tài)保持等,提供最純粹的功能服務(wù)。
AS (ApplicaTIonServer),應(yīng)用服務(wù)器,轉(zhuǎn)發(fā)所有的功能請(qǐng)求給FS,并處理所有的非功能請(qǐng)求,并管理終端用戶、進(jìn)行狀態(tài)保持、日志記錄等。
上圖中的功能服務(wù)器FS的個(gè)數(shù)可能是0到N(N>0)個(gè)。在某種意義上可以認(rèn)為,每個(gè)功能服務(wù)器FS是可以互換的。
將服務(wù)器拆分為功能服務(wù)器和應(yīng)用服務(wù)器有兩個(gè)顯而易見(jiàn)的好處:
(1)功能服務(wù)器FS的完全可復(fù)用。由于功能服務(wù)器采用“框架+插件”的結(jié)構(gòu),所以整個(gè)功能服務(wù)器是完全可復(fù)用的,從一個(gè)具體應(yīng)用轉(zhuǎn)換到另一個(gè)具體應(yīng)用,只需要替換功能插件即可,F(xiàn)S不需重新編譯。
(2)由于FS僅提供最純粹的功能服務(wù),不需要進(jìn)行用戶管理、狀態(tài)保持,這種功能服務(wù)器在運(yùn)行時(shí)的無(wú)狀態(tài)性,使得功能服務(wù)器很容易實(shí)現(xiàn)負(fù)載均衡集群(后文中會(huì)講到,這種動(dòng)態(tài)負(fù)載均衡是如何實(shí)現(xiàn)的)。
如果ESFramework僅僅做到這一步,就沒(méi)有必要拿出來(lái)和大家分享了,ESFramework不僅對(duì)這種4層架構(gòu)給予了充分完整的支持,ESFramework更進(jìn)了一步,它可以支持“類(lèi)似地域分布式”的體系結(jié)構(gòu)。讀者可能已經(jīng)了解到,上面的4層架構(gòu)已經(jīng)是一種分布式架構(gòu)了,那么這里說(shuō)的“類(lèi)似地域分布式”又是什么意思?
可以這么說(shuō),4層架構(gòu)是一種“縱向”的架構(gòu),“類(lèi)似地域分布式”則側(cè)重于“橫向”,在“類(lèi)似地域分布式”體系結(jié)構(gòu)中,每一個(gè)具體的“4層架構(gòu)的實(shí)現(xiàn)”只是其中的一個(gè)組成元素。我舉個(gè)例子,現(xiàn)在我們的一個(gè)應(yīng)用需要為全國(guó)范圍內(nèi)的所有大城市的手機(jī)用戶提供某種基于C/S的手機(jī)增值服務(wù)。我們的經(jīng)驗(yàn)是,為每個(gè)城市配置一個(gè)應(yīng)用服務(wù)器AS,由于大量的計(jì)算在該AS對(duì)應(yīng)的FS上,所以可能需要多個(gè)FS為這個(gè)AS服務(wù)。而每個(gè)城市的AS之間可能需要相互通信(比如處理漫游用戶),這就需要將AS也管理起來(lái),管理AS的服務(wù)器是IRAS(跨區(qū)域服務(wù)器)。如此一來(lái),我可以畫(huà)出下圖作為例子:
圖中的FunAddin是功能插件,這再前文已介紹過(guò)了。整個(gè)體系中,終端請(qǐng)求的服務(wù)主要分為兩大類(lèi),一是向應(yīng)用服務(wù)器AS請(qǐng)求功能服務(wù),另一類(lèi)是終端與終端之間的非功能通信。所有的功能服務(wù)由功能插件(FunAddin)進(jìn)行處理,所有的非功能通信由應(yīng)用服務(wù)器處理或中轉(zhuǎn)。如果,終端請(qǐng)求的功能服務(wù)位于外部系統(tǒng),則功能插件會(huì)自動(dòng)定位外部系統(tǒng)的地址,然后通過(guò)WebService等方式向外部系統(tǒng)提交請(qǐng)求。
好了,讀者已經(jīng)了解了ESFramework中的4層結(jié)構(gòu)和“類(lèi)似地域分布式”結(jié)構(gòu)是怎么回事了,下面我簡(jiǎn)單概述一下ESFramework對(duì)4層結(jié)構(gòu)和“類(lèi)似地域分布式”結(jié)構(gòu)提供了哪些強(qiáng)有力的特性支持:
1. 基于構(gòu)件
除了所有的功能插件是構(gòu)件外,整個(gè)ESF平臺(tái)也是由構(gòu)件組裝而成。其好處是:
(1)快速搭建系統(tǒng)
(2)促進(jìn)構(gòu)件復(fù)用,如AS/IRAS/FS/IRFS可以使用同一個(gè)通信組件來(lái)完成通信層工作。
(3) 實(shí)現(xiàn)功能插件的“熱插拔”,可以在運(yùn)行時(shí)動(dòng)態(tài)的添加/移除功能服務(wù)
2. 高度可擴(kuò)展
由于ESF服務(wù)平臺(tái)體系需要隨時(shí)隨地的應(yīng)付各種突如其來(lái)的變化,其一定要具備高度的可擴(kuò)展性:
(1)功能插件的“熱插拔”
(2)外部服務(wù)的動(dòng)態(tài)接入(通常是通過(guò)WebService)
(3)應(yīng)用服務(wù)器AS的動(dòng)態(tài)添加/移除,比如,新開(kāi)通針對(duì)大連城市的服務(wù)。
(4)功能服務(wù)器FS的動(dòng)態(tài)添加/移除,實(shí)現(xiàn)功能服務(wù)器的動(dòng)態(tài)負(fù)載均衡集群。
3. 高度可伸縮
隨著我們提供的服務(wù)日漸深入人心,我們的用戶的數(shù)量會(huì)急劇增加,所以ESF服務(wù)平臺(tái)體系必須具備高度可伸縮性來(lái)提高系統(tǒng)的最大負(fù)載和吞吐量。
(1)由于功能服務(wù)器需要進(jìn)行大量的功能運(yùn)算,所以平臺(tái)的瓶頸通常位于功能服務(wù)器,這可以通過(guò)功能服務(wù)器的動(dòng)態(tài)集群來(lái)解決。集群中的各個(gè)功能服務(wù)器之間的負(fù)載均衡由對(duì)應(yīng)的應(yīng)用服務(wù)器AS來(lái)調(diào)度。
(2)當(dāng)單個(gè)區(qū)域的常在線用戶數(shù)量突破5000~10000時(shí),我們需要添加AS進(jìn)行區(qū)域級(jí)的負(fù)載均衡,這可以通過(guò)具有端口映射功能分硬件來(lái)解決。
4. 高度可復(fù)用
ESF服務(wù)平臺(tái)體系并非只是適用于我們的LBS服務(wù),其實(shí),ESF服務(wù)平臺(tái)體系是一個(gè)高度可復(fù)用的體系,也就是說(shuō)ESF服務(wù)平臺(tái)可以作為任何、任意的服務(wù)的基本平臺(tái),只要其所提供的服務(wù)是終端和服務(wù)器之間通過(guò)Tcp進(jìn)行基于連接的通信。
5. 分布式
除了外部系統(tǒng)的接入通過(guò)分布式服務(wù)進(jìn)行外,各應(yīng)用服務(wù)器之間、功能服務(wù)器與應(yīng)用服務(wù)器之間、應(yīng)用服務(wù)器和跨區(qū)域的應(yīng)用服務(wù)器之間都是采用分布式通信??鐓^(qū)域的應(yīng)用服務(wù)器通過(guò)類(lèi)似于remoTIng的方式在各個(gè)應(yīng)用服務(wù)器之間進(jìn)行調(diào)度。
6. 簡(jiǎn)單部署、自動(dòng)升級(jí)
由于ESF服務(wù)平臺(tái)體系服務(wù)的區(qū)域可能非常多,比如各個(gè)大城市可能都需要部署應(yīng)用服務(wù)器和功能服務(wù)器,所以如果通過(guò)人工進(jìn)行部署和升級(jí)是非常低效的,ESF服務(wù)平臺(tái)提供了自動(dòng)升級(jí)、加載、運(yùn)行的功能。
(1)服務(wù)平臺(tái)安裝后,僅僅需要修改配置文件中的幾個(gè)參數(shù)即可正常運(yùn)行。
(2)當(dāng)功能插件擁有新版本的時(shí)候,可以在不停止服務(wù)的情況下,自動(dòng)升級(jí)到新版本。
(3)當(dāng)各服務(wù)器系統(tǒng)(AS/IRAS/FS/IRFS)有新版本時(shí),會(huì)在該系統(tǒng)重啟的時(shí)候自動(dòng)升級(jí)到新版本。為了在升級(jí)的時(shí)候不終止服務(wù),服務(wù)器系統(tǒng)可以使用逐步升級(jí)的方式。
7. 通信保證機(jī)制
當(dāng)遇到網(wǎng)絡(luò)突然斷開(kāi)或某服務(wù)器重啟的情況,在網(wǎng)絡(luò)恢復(fù)或服務(wù)器重啟完成后,需要一種能自動(dòng)的立即恢復(fù)通信(比如AS和FS的通信,各AS與IRAS之間的通信)的機(jī)制,ESF服務(wù)平臺(tái)提供了這種保證,其采用的策略主要基于:
(1)定時(shí)論詢
(2)Tcp連接池自動(dòng)重連
(3)連接動(dòng)態(tài)反轉(zhuǎn)
8. 漫游支持、跨區(qū)域功能請(qǐng)求支持
在ESF服務(wù)平臺(tái)體系中,漫游是指某一區(qū)域的用戶登錄到另外一區(qū)域的應(yīng)用服務(wù)器AS上,對(duì)于此AS來(lái)說(shuō),該用戶是漫游用戶。如果用戶登錄到某AS卻請(qǐng)求其它區(qū)域的功能服務(wù),則是跨區(qū)域的功能請(qǐng)求。ESF服務(wù)平臺(tái)對(duì)這兩種情況都給予了充分的支持。
9. 終端與終端之間的通信支持
有時(shí),終端需要和終端(可能是同區(qū)域的、也可能是其它區(qū)域的)之間進(jìn)行通信,并且這種通信可以基于連接和基于非連接。基于連接的通信像實(shí)時(shí)視頻聊天、實(shí)時(shí)監(jiān)控,基于非連接的像發(fā)送一張圖片給不在線的用戶。所有這些,ESF服務(wù)平臺(tái)都提供了支持。
10.支持二次開(kāi)發(fā)
在基于ESF服務(wù)平臺(tái)高度可復(fù)用和可擴(kuò)展的基礎(chǔ)上,ESF平臺(tái)可以非常容易的支持二次開(kāi)發(fā),只要遵循相同的接口和通信協(xié)議,就可在ESF平臺(tái)進(jìn)行二次開(kāi)發(fā)。
11.客戶端框架
如果應(yīng)用的客戶端也可以使用.NET開(kāi)發(fā),則ESFramework也提供了完善的支持,在ESFramework的支持下,開(kāi)發(fā)客戶端僅僅需要開(kāi)發(fā)業(yè)務(wù)插件就可以了,而整個(gè)網(wǎng)絡(luò)通信、多線程、升級(jí)部署等,都由框架完成了。后面的文章中我會(huì)介紹如何在AgileIM中開(kāi)發(fā)自定義的業(yè)務(wù)插件。
上面的所有特性將會(huì)在“基于C/S的4層架構(gòu)”部分分節(jié)介紹,感謝關(guān)注!
如果你的應(yīng)用不需要這么復(fù)雜的結(jié)構(gòu),比如僅僅一個(gè)簡(jiǎn)單的3層架構(gòu),那么ESFramework仍然可以幫助你快速構(gòu)建,ESFramework是個(gè)輕量級(jí)的應(yīng)用框架,你不會(huì)為那些ESFramework提供了的而你不需要的功能/特性付出任何代價(jià)。
(注意,ESFramework不太適合處理遺留系統(tǒng)(就像你很難使用MFC去處理基于VCL構(gòu)建的UI應(yīng)用一樣),ESFramework雖然與應(yīng)用無(wú)關(guān),但是為了能將更多的任務(wù)從應(yīng)用中抽象到框架中來(lái),必須對(duì)應(yīng)用做一些假設(shè),幸運(yùn)的是,ESFramework僅僅對(duì)應(yīng)用的通信協(xié)議做了最少的假設(shè),這個(gè)假設(shè)包含在NetMessage中。如果你不是處理遺留系統(tǒng),而是構(gòu)建一個(gè)全新的C/S應(yīng)用,那么ESFramework可以為你節(jié)省大量的架構(gòu)設(shè)計(jì)時(shí)間、軟件開(kāi)發(fā)時(shí)間、調(diào)試和維護(hù)時(shí)間。)