三層客戶/服務器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一:優點:靈活性和可擴展性。
應用三層開發技術(分佈式)的原因
(參考書目: Delphi 5.x分佈式多層應用系統篇)
一:解決客戶機/服務器結構的維護成本問題,改善客戶機/服務器結構延展性問題。
客戶機/服務器結構支持的用戶人數有一定限度(200人以下)。則種結構限制了Internet/Intranet及電子商務的發展。三層開發應用Database Pooling, Object pooling,Resource Pooling,線程模式提供了高度延展性。
二:解決應用邏輯重複使用的問題。
例如:當企業要在原有的客戶機/服務器結構上添加Web瀏覽服務時,就需要配置Web服務器,重新編寫所有應用邏輯,並且更新MIS系統。在三層結構中,用COM/DCOM, CORBA(Common Object Request Broker Architecture)對象,或Enterprise Java Bean等,封裝企業的邏輯程序代碼(稱之爲企業對象),可以解決上述問題。大大降低開發和維護的成本。
三:整合不同系統結構的需要,及時應用新技術的需要。
二:Microsoft的三層服務模型
1:結構:是windows DNA(distributed internet applications,分佈式內部網)COM(component object model ,構件對象模型)構件作爲實現系統及應用程序服務的工具。
l 用戶服務
l 業務服務
l 數據服務
(1)用戶服務:windows DNA定義了四種可用於實現用戶服務層的客戶:
n 標準瀏覽客戶:依賴於簡單,基於頁面的HTML來管理數據表示和與用戶進行交互.其兼容性 很好,功能不豐富。
n 增強型瀏覽器客戶:汲取某個特殊瀏覽器(ex: Dynamic HTML ,腳本及ActiveX控件)的優點來最大化用戶接口的豐富性和功能 ,適用於公司intranet .
n 依賴型Internet客戶:能在客戶機器上將對Internet的訪問和對操作系統的訪問集成在一塊。
n 增強型Internet客戶:Microsoft Office 97和Microsoft Visual Studio.
(2)業務服務:通過將基於服務器的Microsoft產品與定製的COM構件運行環境集成在一塊來實現。
n Web服務( Microfsoft Internet Information Server與Active Server Pages ).
n 事務和構件服務 (Microsoft Transaction server和 COM) .
n 消息服務(Microsoft消息隊列服務器)。
n 通用數據訪問(universal data access)(Microsoft數據訪問過件)
l 大型機環境的互操作(Microsoft SNA服務器). 其詳細信息在下面的專題中列出。
(3)數據服務:
n Microsoft SQL Server7數據庫。
n Microsoft Exchange server 5.5版本的目錄和信息庫。
專題:
業務服務
一:Web服務( Microsoft Internet Information Server與Active Server Pages ).
Web服務對象模型:
1,server對象:提供對服務器上方法和屬性的訪問.例:問(universal data access)(Microsoft數據訪問構件) setobjmyobject=server.createobject(“businessserver.myruleobject”)
2:Session對象: 用來存儲一個特定用戶會話所必須的信息。
3:Application對象:用來使某個應用程序的所有用戶共享息。
4:Request對象:略。
5:Response對象:略.
二:事務和構件服務 (Microsoft Transaction server和 COM)
1:Microsoft事務服務器(MTS)是基於構件的事務處理系統,用來滿足複雜事務處理。MTS支 持SQL Server和任
何基於X/open算法的XA協議的數據庫(見註釋)。
MTS提供的服務有:
n 對分佈事務的支持。
n 用於控制實例化和使用對象安全的服務。
n 過程和線程的自動管理。
n 對象實例的管理。
n 數據庫連接管理(連接池)。
在應用程序中可聲明相應的構件完成以上服務。
2:MTS和SQL server事務一樣,要求原子執行,或整個成功,整個失敗。Transaction Server與Microsoft Distributed Transaction Coordinator(MSDTC)交互確認事務滿足ACID(原子性Atomicity,一致性Consistency,分離性Isolatation和耐久性Durability)。
3:MTS和SQL server事務的區別.MTS可以用visual basic ,visual c++ 等封裝的MTS構件實現 , Recordset對
象的addnew方法添加新行。SQL server事務只能由Transact-SQL代碼編寫,如 (ADO).
4:Windows DNA(windows distributed internet application architecture):將客戶/服務模式開發與web和在一起的戰略 .
使用HTML,DHTML,Active server pages向用戶提供第一層(表達層), MTS和MTS的構件, 如IIS(internet information server),IIS/ASP構件及ASP腳本佔據中間層(業務邏輯層),SQL server作爲數據服務層。
5:MTS使用分佈事務協調者(Distributed Transaction Coordinator , DTC)事務引擎.DTC使用兩級段交付標準。
關於DTC的信息可通過一下方法得到:用MMC(Microsoft Management Console)打開c:/winnt/system32/services.msc,
在右邊的列表中找到DTC服務,察看其屬性。
6:使用MTS最大化系統性能。(注意事項)
n 避免傳遞或返回對象。
n 儘可能通過值(BY VAL)來傳遞參數。(By Val關鍵字使網絡間的旅程最小)
n 避免創建數據庫遊標。少用RecordSet對象。
n 通過使對象包容器線程化(Apartment Threaded),MTS可以在多個對象中執行併發的客戶請求。
7:
註釋:XA是一種由X/Open組織定義的兩相提交協議,允許多個數據庫服務期間的事務協同,並將其看作一個事務。(Unix數據庫,包括oracle ,informix,db2都支持)
三:消息服務(Microsoft消息隊列服務器)。
1:Microsoft消息隊列(Microsoft Message Queue ,MSMQ)爲應用程序提供了異步通信功能.MSMQ被認爲是連接分佈式應用程序中業務與數據服務層的橋樑。
2:MSMQ自動與MTS集成。應用程序可以將MSMQ消息封裝在MTS事務中。
3:MSMQ與Microsoft exchange服務器的不同.exchange提供用戶到用戶(person -to -person)的消息傳送.而MSMQ提供應用程序到應用程序(application - to -application)的消息傳送.
四:通用數據訪問(universal data access)(Microsoft數據訪問構件)
數據訪問構件跨越了業務服務層和數據服務層之間的界限。ADO,OLE DB(嵌入式數據庫)以及ODBC共同組成了Microsoft數據訪問構件(MDAC).
五:大型機環境的互操作(Microsoft SNA服務器)
Microsoft的COM &DCOM(簡介)
一:COM是一種定義對象服務器如何與對象客戶進行交互的協議。對象服務器(object server)是實現COM類的模塊。對象客戶(object consumer)是使用COM對象的模塊。
DCOM擴展了COM協議,使得對象服務器可以位於一臺與客戶不同的計算機。 通過RPC向對象服務器調用。(CORBA也是分佈對象協議)
COM通過SSPI(Security Support Provider Interface,安全支持提供者接口)來管理對象的安全性。
二:應用服務器(中間層)應具備的特性:
n 遠層啓動,監視和中止的能力。
n 可擴展的能力。
n 易於配置的能力。
n 安全失效的能力。
遠層啓動功能:如果用戶想在遠程計算機上創建一個COM對象,遠程機上的DCOM服務控制管理器(Service Control Manager ,SCM)會自動啓動COM服務器並使COM對象可用。具體信息可在開始菜單中運行DCOMCNFG命令。
易於配置的能力:在Windows資源管理器中右擊一個COM DLL或EXE就可激活註冊或撤銷註冊。
可擴展的能力:可擴展的第一等級和第二等級。DCOM提供的兩種負載均衡。1),靜態負載均衡(指定應用服務器的運行機器),可在DCOMCNFG中的應用程序的屬性中指定。2):動態負載均衡,由調度程序進行分配。
Delphi提供的相關技術:
u COM / DCOM / COM+企業對象。
u CORBA企業對象。
u XML / HTML
u CGI / SAPI/NSAPI
u ASP
u Active X (Active Form)
u ADO / OLE DB
u BDE / IDAPI SQL Links
u MTS對象
u MIDAS服務器
u CORBA服務器。
相關組件在1) File菜單/new/ Multitier和ActiveX頁中。
2)在組件面板中的ADO, Midas, Internet Express, ActiveX等頁中。
Corba簡介
1:什麼是corba(common object request broker architecture)?
Corba是由object manangement group(OMG)定義的分佈式對象標準結構。語言中立,使用了面向對象的設計結構,允許軟件對象在不同的操作系統平臺和應用程序中重複使用。
如果想實現一下功能,corba是較好的解決方案:
l 應用系統要整合異質平臺和操作系統。
l 應用程序服務器必須執行在linux/unix機器中。
l 應用系統必須執行關鍵性任務,具備安全強固的容錯能力,必須穩定,有效率。
l 想開發使用Web對象的Internet/Intranet解決方案。
l 應用系統未來想和Java整合。
2:corba的結構
corba對象是一個提供特定服務的組件,它通過定義一組輸出接口來聲明可以提供的服務。在這個輸出接口中,corba對象定義了客戶端可以調用的方法和存取屬性。客戶端只要指明提供服務的corba對象的名稱以及要調用的方法或是要
存取的屬性就可以通過ORB得到corba對象提供服務。
術語介紹:
ORB: object request broker.聯結客戶端和中介的corb對象。
Stub對象: 運行在客戶端的corba對象的複製品,在客戶端調用的是Stub對象,然後Stub對象通過ORB遠程調用
CORBA對象,Stub對象用Marshaling(對象指針轉換,使對方程序能夠識別)自動爲你傳遞參數和數據。
Skeleton對象:運行在服務器端的對象,將傳遞到服務器的數據還原成服務器端使用格式。然後根據自動根據客戶端要求調用CORBA對象。
調用方式:
u 靜態調用:客戶端程序通過Stub對象將數據傳遞到corba對象,corba對象執行完畢後,通過Skeleton對象
把結果再Marshaling回客戶端的Stub對象,經由Stub對象回覆數據格式後,再回傳給客戶端的應用程序。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 動態調用(Dynamic Interface Invocation DII):客戶端不需要先有stub對象,也不需要知道遠程corba對象提供的方法和屬性,corba程序可以在執行時取得這些信息,然後動態的調用corba對象。
DII比靜態調用有更大的彈性,但編程較難,且執行效率不如靜態調用。
3:corba提供的核心服務
n Event Service: 以“提供者—消費者(Supplier_consumer)“模型通過一個事件信道然提供者對象以異步的方式傳遞事件給消費者對象。
n Naming Service: 允許程序員使用階層式的方式爲企業對象命名,然後在程序中可以使用這些有意義的名稱來存取這些對象。
n Transaction Service:提供分佈式應用系統能夠執行關鍵任務,允許企業對象在異質平臺和數據庫之間進行數據的Two-Phase Commit的交易管理。
n Security Service :包括存取控制(Access control),稽查控制(Auding),認證控制(Authentication),存取政策控制(Plicy Control).
MIDAS介紹
一:MIDAS概念
MIDAS (Multi-tier Distributed Application Services Suite (多層分佈式應用程序服務器)) 是開發多層應用系統使用的中介透明引擎。通過MIDAS,程序員可以通過相同的組件存取不同的後端應用程序服務器(如,COM/DCOM應用程序服務器,CORBA應用程序服務器,MTS中介軟件),MIDAS也提供容錯能力,負載平衡以及高執行效率的能力。
中介者和功能:
u 遠程數據中介者(Remote Data Broker):提供客戶端存取遠程數據的能力。
u Constraint中介者:允許客戶端應用程序下載遠程數據庫對數據設定的constraint。讓數據在客戶端被數據庫的constraint檢查。減少網絡流量。
u 企業對象中介者(Business Object Broker):允許應用系統開發執行企業邏輯的企業對象。
u 容錯能力:當一個客戶端聯結的應用程序服務器發生錯誤時,企業對象中介者就會在網絡中尋找另一個提供相同功能的應用程序服務器,將客戶端聯結到該應用程序服務器上,客戶並不知道發生的一切。這時必須使用無狀態對象。
u 負載平衡:當客戶端多於服務器數目時,企業對象中介者自動平衡服務器的連接數目。
二:數據處理
應用程序服務器從數據庫取出客戶端想要的數據,進行數據封包(data packet),通過Iappserver接口以OleVariant的形式傳遞給客戶端,到達後,通過客戶端的MIDASServer整理,加入到ClientDataSet的數據快儲內存中,這時,客戶端於應用程序服務器的連接斷開。
在客戶端應用了TclientDataSet的ApplyUpdates方法要求更新時,MIDASServer把更新之前的數據封裝在數據封包中,然後再封裝被更新的數據(只含被改變的),當應用程序服務器收到這些Delta數據封包之後,Resolver先將其解析,
然後對於每一筆更新的數據,Resolver首先根據第一筆封裝的原始數據到數據庫中尋找紀錄,如果紀錄已經被其他用戶改變了,MIDAS會把原來客戶端傳來的數據和數據庫中最新的這筆數據一塊傳回客戶端,要求用戶決定如何處理。
如果數據更新失敗,則MIDAS會把發生問題的數據封裝在數據封包之中傳回客戶端