一般而言,我們平常接觸的大多數(shù)項目都應該是單純使用B/S或是C/S,除非在特殊場合,否則比較少混合使用B/S,C/S架構(gòu)。首先說一下對這二種架構(gòu)特點的一些個人理解。B/S應該是目前很多項目都應用的架構(gòu),瀏覽器的方式使得用戶的使用十分方便,用戶可以何時何地通過Internet訪問URL而進行相應的工作,升級維護也能比較集中,缺點就是瀏覽器的表現(xiàn)能力受限以及常常受非議的安全性問題,如果軟件的應用范圍區(qū)域不集中,而且用戶經(jīng)常變換地點進行訪問,那么這種架構(gòu)是非常適合的。C/S架構(gòu)的C端有非常強的處理能力,所以在交互表現(xiàn)和安全方面可以做得比瀏覽器強,但是缺點也是非常明顯的,安裝部署、升級維護、版本兼容都是比較頭大的事情,一般的適用場景是集中的辦公室場所,用戶使用范圍相對穩(wěn)定,以及一些對業(yè)務處理非常復雜的場合,為了降低服務器的負荷,同樣需要C模式的支持。
以前接觸過的電信領(lǐng)域,就有過混合架構(gòu)的軟件。但是都是非常寵大,一直都對其實現(xiàn)方案比較感興趣,但是都沒有機會進一步了解。最近搜索了一下相關(guān)的資料,總結(jié)一下混合應用的一些想法(只針對Java方向)。
①混合架構(gòu)的問題集中點。服務端共享,客戶端采用不同的表現(xiàn)方式,共享的應該是業(yè)務層接口,持久層應該是屏蔽的。應用層的消息傳遞就是整個應用的關(guān)鍵所在,雖然像Jakarta提供的httpClient這種模仿瀏覽器的組件,但是畢竟是模仿,在很多方面的功能還是缺失的。
②最傳統(tǒng)的方式是采用EJB做為服務,這個寵然大物容易讓人害怕,不過在分布式的系統(tǒng)中它還是有應用優(yōu)勢的,像電信和金融這種行業(yè)應用還是比較廣的,而且現(xiàn)成的中間件和應用服務器商都比較多,像Oracel、BEA、IBM、Sun都有成熟的應用產(chǎn)品,當然開發(fā)的成本和人力投入也是恐龍級數(shù)據(jù)的。
③有網(wǎng)友說在C端直接訪問數(shù)據(jù)庫,B/S結(jié)構(gòu)不變,也就是通過數(shù)據(jù)庫進行共享。這種方式是不可取的,二個缺點:把服務器的業(yè)務邏輯搬到了C端上,嚴格上講是不安全的,升級維護也非常麻煩;并發(fā)控制的壓力都在數(shù)據(jù)庫上。
④采用RMI,這個老古董相信應該很多人都不使用了,因為它的使用要一連串的手續(xù),比如服務接口定義必須實現(xiàn)Remote接口,服務Server在實現(xiàn)時必須繼承UnicastRemoteobject類,必須使用rmic指令產(chǎn)生stub和skeleton等,設(shè)置上繁雜。
⑤Spring 遠程服務。這個應該說是比較可取的,大家都比較喜歡輕量級的東西。就如第一點所說的,通過遠程服務,我們可以在客戶直接調(diào)用服務端的服務接口,就像本地調(diào)用一樣,Spring對遠程服務提供了好幾種實現(xiàn)方案。
⑥WebService。適合異構(gòu)環(huán)境,但是WSDL的這種方式相對來說會比較耗費資料,因為標準定義除了業(yè)務內(nèi)容外,還有許多另外的說明內(nèi)容。
Spring遠程服務實現(xiàn)方案介紹:
⑴Spring + RMI。Spring把傳統(tǒng)的RMI方式的繁雜設(shè)置去掉,只要配置Bean文件就和定義服務接口可以。RMI的服務啟動和管理都交給Spring來處理。RMI訪問的缺點就是對防火墻的穿透力比較差。
⑵Spring + Caucho的Hessian、Burlap。Hessian使用Http將對象以中性的二進制消息進行傳送,而不像RMI使用Java的序列化格式(這種序列化是專制的,不是Sun提供的序列化機制),由于是二進制消息,所以不受限于某種實現(xiàn)語言,傳輸時所需要的帶寬較小是其優(yōu)點。Burlap是以XML文件格式傳送對象,XML文件有較高可讀性,應用程序只要能解釋XML就能接收消息,當然也不限于某種語言,但是組裝XML和解釋XML都需要消耗資源,當傳輸大數(shù)據(jù)時性能應該存在問題。
⑶Spring + Http Invoker。由于Hessian的序列化機制不是正統(tǒng)的Java序列化機制,所以當遇到傳輸復雜的業(yè)務模型時,就會存在各種問題,為此,Spring又提供了Http Invoker,同樣是使用Http傳送對象,而且是使用Java的序列化機制。相比RMI,Http對防火墻的穿透力要強。
后來嘗試了最后的這種Http Invoker方式,是在Spring2.0版本下嘗試的,開發(fā)非常簡單,網(wǎng)上也有大量的資料介紹。應該說從這里入口可以做一些嘗試。目前遇到的一個項目就需要混合架構(gòu),B/S采用Spring2 + Struts2 + Hiberntae3,瀏覽器只提供一些查詢功能和數(shù)據(jù)展現(xiàn),C端采用Eclipse的RCP平臺,共享服務器的業(yè)務接口,調(diào)用就采用Http Invoker遠程服務,復雜的業(yè)務功能都集中在C端上。
剛進場的時候戲就落幕