|
當企業的工作站越來越多,使用 C/S 的方案已逐漸無法承受負荷時,再加上繁重的 Client 端維護工,就會讓企業思考到 N-Tier 與 A/P Server 的應用,也成為今日企業必備的 e 化架構與主流解決方案。
何謂A/P Server
A/P Server,就是 Application Server,用來專門服務企業 Client 端的專屬應用程式伺服主機,簡單而,就是與 Database Server 相似,不同的是 Database 只提供資料庫的專屬服務 ( 如新增/更改/刪除/查詢/預存程式),而 A/P Server 則是提供 Client 端所有的服務,包括資料庫的存取服務,後端邏輯運算,後端服務程式等等,因此它提供了 Database Server 所不能的服務與功能,更不必讓 Client 端安裝資料庫的連線驅動程式,讓 Client 的開發工作可以減少而瘦身( 因為 Client 端會隨著時代變遷而必須重寫 ), 並盡量把商業運算與邏輯往 Server 端開發,來延長系統的使用時限。
使用應用程式伺服器的原因 主要有二,一是安全性考量,二 是系統執行的效能及信賴度考量。 在安全性方面,使用A/P Server可 以有效阻絕資料庫連線(Database Connection ) 暴露在Internet上,以防 止企業資料被駭客所入侵;在效 能方面,由於 A/P Server 本身具備 平行處理架構,當系統的負荷有 問題時, 可以使用多台 A/P Server 來輕易地提升系統效能,並具有 平衡處理的功能 ( 自動調整多台 A/P Server 的負荷)。 |
 |
EEP 的 A/P Server 的特色
EEP 長達 5 年以上的 A/P Server 經驗,使用 EEP A/P Server 的企業高達數千家,從1台 A/P Server到 20 部 A/P Server 同時運作都有,效能與穩定度得到眾多企業的肯定與信賴. EEP 2006 的 A/P Server 使用了.NET Remoting 的技術與 EEP 特有的核心技術所開發而成,同樣繼承的 EEP 優良的傳統,我們將其特色說明如下:
1.無狀態連線: 比照Web的方式採用無狀態的連線方式,也就是 Client 與 A/P Server 隨時保持不連線狀態,一直到需求發生才連線,此是為了有較佳的連接效能外,就是因為在 Internet 上的網路並不能保證隨時都在穩定的狀態中,因此必須使用無狀態連線才能讓 User 能有較佳的操作效能與方便性。
2.資量庫連線共享: 提供更貼切的資料庫 Connection Pooling 的機制,讓企業的 Client 可以共有或共享資料庫的 Connection,如有 50 個 User 同時上線時,可以只設定 10 到 20 個資料庫 Connection 供使用者使用即可,可以有效調節資料庫的效能與負載。
3.支援負載平衡功能: 可以在 A/P Server上設定那一台為 Master 的 Server 與其他的 Slave Server,當User 暴增時,Master 的 Server 就會主動平均分配給 Slave 的 Server 來分擔負荷。
4.支援 Server Method: 就是由 Client 來呼叫,並在 Serve r上執行,這部份很像 Stored Procedure,只在A/P Server 端執行程式,而非在Database Server上; 這個功能與彷間流行的Web Service很像,只是 Web Service都是透過SOAP(Simple Object Access Protocol) 的方式呼叫 服務,而 EEP 則使用了 RPC 二進位調用方式來增加執行效能。
|
5. 非同步的 Server Method:與前面 的 Server Method 一樣,EEP 另外 提供了非同步的呼叫方式,所謂 非同步就是 Client 端呼叫服務時, 不用等待A/P Server 執行完畢,因 為有些服務與作業或許需要很多 時間,此時只要改用非同步的呼 叫方式,Client 端就可以不必一直等待,等到A/P Server 執行完畢後,再通知 Client 端即可。
6. 提供動態熱插拔Module的機制: A/P Server 上提供一個可以插拔 DLL 模組的機制,如此 A/P Server
上的各個模組就可以各自獨立與分 |
 |
割,來達到系統功能可以任意變更與抽換的目的。(更新系統時可以不用讓 User 全部下線)。
7. 管理 Login 的機制: 用來管理用戶帳號的登錄與安全的管理,每個企業用戶都必須透過 EEP 的專屬 Login 機制並認證後才能使用 A/P Server上的資源。
8. 資料庫的動態切換與更換: EEP的 A/P Server 可以獨立設定多組資料庫的連線設定,當 Client 要求 A/P Server 服務時,可以動態指定任一個存在的資料庫連線,更可以用同一個 Server 端的模組來存取不同型態的資料庫 ( 如Oracle/MSSQL/Informix等 ),不用特別改寫。
9. 管理 Log 的機制: 可完整記錄任何 User 對 A/P Server 的任何動作,如 Login/Logout/存取那一個Server Module 或呼叫 Server Method 等,用來瞭解Module的使用量與當機記錄,或完整記錄 User 對Server 的存取行為。
EEP A/P SERVER的元件(一)
EEP A/P Server 上共有 8 個重要的元件,透過這 8 個重要元件,即可輕易在 A/P Server 上開發各企業所需的資料庫需求,各元件說明如下:
1. ServiceManager : 此用來管理與分配 Client 所需的服務,並以此元件來統籌資料庫 Connection與各個 Session (各個連線用戶)所需要的 Service 與狀態,此元件只要貼在 EEP 的 Server Module中,不必做任何設定。
ServiceManager 是 Client 與 A/P Server 溝通的核心元件,也是以此元件來實現 Client 的三大服務,例如:
(1) 資料服務: 依 Client 的請求,向資料庫取得 Connection Pooling,並透過 InfoCommand 元件的SQL命令取得資料,並回應給 Client ( InfoDataSet 元件 ) 所要的資料。
(2) 資料異動: 依 Client 所傳過來的異動請求,同樣向資料庫取得 Connection Pooling,以UpdateComp 元件的規格定義,對 Database 自動將異動請求轉換成 SQL 命令,進行資料異動處理。
(3) Server Method: Client 端可以呼叫A/P Server 端的服務程式,就好像 Web Service 一樣,所有在EEP A/P Server 上的 Server Method 都必須定義在此 ServiceManager 中,每個定義說明如下:
(a) ServiceName: 指 Server Method 的名稱,由開發人員自行定義,是為了讓 Client 調用時所使用的名稱。
(b) DelegateName: 委託服務的名稱,指實際內部的 Method 名稱,即在本程式中實際所設定的 Method 名稱。
(c) NonLogin: 是否不允許 Client 未 Login 時可以調用,True 為不允許,False 為允許。
例如: 在Server端的模組名稱為 MyServer(會編譯成MyServer.DLL),DelegateName 為 SrvFun,ServiceName則設為MySrvFun,則在Client要使用Server Method時則寫成:
CallMethod("MyServer","MySrvFun",object[] MyobjParam)
MyObjParam為傳遞參數。
2. InfoConnection: 此元件是開發階段所使用的元件,也就是為了在開發過程中可以讓 Client的元件可以立即取得資料,所以在設計模式中必須用此元件來設定所要連結的資料庫,重要屬性如下:
ConnectionString: 可用此來選擇 A/P Server 上有那些已設定好的資料庫連線,設定好之後,系統會自動轉化成真正的 ConnectionString。
ConnectionType: 可選擇 SqlClient/OracleClient/OleDB/ODBC 等四種,在執行模式是會以 A/P Server所設定的 DataBase Type 為主。
3. InfoCommand: 提供一個虛擬 SQL Command 元件,以此 SQL 命令來取得後端資料庫的資料並傳遞給 Client 端,此元件可自動依資料庫類型為 SQL/ORACLE/OLE DB 等不同的資料庫自動產生對應的 Command 元件,InfoCommand 是 EEP 核心元件,如果與.NET 內建的 Command 比較的話,主要的特色如下:
(1) 透過 ServiceManager 具有 Connection Pooling 的功能,容易調整 A/P Server 與 Database 間的負荷。
(2) 透過 ServiceManager,具有虛擬資料庫的能力,除了可以讓開發者不必考量 DataBase 的型別是外 ( Oracle/MSSQL 或其他),並且可以讓整個系統都具有動態切換資料庫的能力,可以隨時依使用者自由切換資料庫。
(3) 具有資料保安的功能 ( Row Security ),透過 SecStyle 屬性可輕易做到那些資料可以給那些User 來存取,這個功能是 EEP 一大特色。
(4) 效能調校功能: 配合 InfoDataset 的 PackedRecord (資料封包設定),可自由設定每次下載到Client 的資料筆數(範圍超過會自動往下切割封包) ,可有效控制通訊效能,再利用內建的Select Top 的機制來控制資料量的限制,來達到各種效能上的需求。
(5) 內部資料分割功能: 可以一 SiteControl 屬性功能,以某一個欄位做為分公司或廠區的代號,並自動配合 Client User 所屬的分公司或廠區的代號,自動分割資料(使用 Where 指令)。
InfoComand 重要屬性說明如下:
CommandText: 指 Select 的 SQL 命令,在 EEP 中,可以使用內建的 SQL Builder 來自動產生 SQL語法,此 SQL 語法也可以用 Left Join 語法關連多個 Table。
EEPAlias: 指定一個EEP的資料庫別名,此別名是定義在A/P Server的'Database Manager'中,透過A/P Server 用來對應到實體後端的資料庫,EEPAlias 通常不用定義,因為不定義代表系統會以 Client 端所選擇的 EEPAlias 為資料庫名稱。 ( Client 是在 Login 時選擇)。
InfoConnection: 設計模式中,用來對應的 Database 連線,使此 Command 的語句,可以被Active。
KeyFields: 設定此 Command 語法中,那些欄位為Key Field,可以設定多個; 此用在當與UpdateComp 元件配合時,在 Update/Delete 語法中所必需定義的 Where Keyfield 欄位; 另一個用途則用在 Client的InfoDataSe t設定 PackedRecord 時,會根據 KeyFields 來取得區間的資料等。
SecStyle: 為資料保全的模式,有下列幾種:
ByNone 不啟動: 本 InfoCommand 不作任何資料保全控管。
ByUser: 所有歸屬該User的資料都可以存取,啟動此命令時系統會自動為你加上 where 欄位=UserID,因此,此功能必須在 InfoCommand 的 Table 上必須要有這個欄位來存放UserID。
ByGroup: 所有歸屬該使用者相對的群組資料都可以存取,啟動此命令時系統會自動為你加上 where 欄位 IN ( 該 User 群組),此功能必須在 InfoCommand 的 Table 上必須要有這個欄位來存放 GroupID。
ByRole: 依角色,與 ByUser 相似,但以企業角色來下達 Where 命令,如 Where 欄位 in (RoleIds)通常一個 User 會扮演多個角色,Table 上也要有 RoleID 的欄位。
ByRoleGroup: 依角色群,與 ByGroup 相似,但以企業角色群來下達 Where 命令,如 Where 欄位 in (RoleGroupIds),通常一個 User 會扮演多個角色,多個角色有會屬於多個角色群。 Table 上也要有 RoleGroup 的欄位。
ByORG: 依組織,就是組織中的主管可以存取所有其屬下的資料,組織是一個TREE的結構,所以系統會使用Where 欄位 IN (該主管的所有屬下角色。)也就是以組織中主管的位置,去抓取其下的所有角色成員,自動放在Where的IN裡面,另外,Table上也要有RoleID的欄位。
ByORGShare: 與ByORG相似,除了與ssORG一樣外,又增加了同一個部門中的資料可以相互分享,即在TREE的結構上同一個部門下的成員的資料都是共享的,不同部門不共享,可以解決ssORG的只能讓各個角色獨立看到自己的資料而已,無法共享部門間各角色的資料。
SecFieldName: 資料保全的欄位名稱,用來定義 SecStyle 的欄位名稱,如果 byUser 就是指建檔者 Userid 欄位名稱,byGroup 即指此資料的所屬部門 ( 群組 ) 欄位名稱,ByRole/ByORG/ByORGShare 代表此資料所屬的角色代號欄位名稱,ByRoleGroup 代表此資料所屬的角色群組欄位名稱。
SecExcept: 例外群組,就是可以定義一個或多個例外的群組(UserGroup),該 User 如果隸屬這些群組時,SecStyle 就會失效,如高級主管/財務部門/MIS部門等群組,都是可以不受資料安全機制的所管控的。另外,當 SecStyle 為 ByRole 或 RoleGroup 時,則此代表 RoleGroups,非UserGroups。
SiteControl: 為True/False,用來自動分割多廠或分公司事業體資料的控制,此要配合 Client 端Login 的系統變數(存在 CliUtils.fSideCode 中),在每次啟動 Infocommand 時,就會自動加入Where 欄位=fSideCode,fSideCode是依每個 Client 來決定之,而欄位是只每筆記錄所存放的分公司或工廠的代號。
SiteFieldName: 當 SiteControl=True 時,則以此欄位名稱做為多公司多廠的欄位名稱。
SelectTop: 代表是否在啟動 InfoCommand 時,自動加上 Seletct TOP N的設定值來增加效能,此功能僅針對 MS SQL 的 Database 才會有效。
4. InfoDataSource:能整合多個 InfoCommand 來構成 Master/Detail 多層的關係,並能一起控制一起存檔等機制(類似 Delphi 的 MIDAS 來設計),其有下列幾個特色:
(1) InfoDataSource 可以串連多個 Detail 次檔,如一個 Master ,兩個或兩個以上的 Detail;也可以是 Detail 又有自己的 Detail 多階的關係,如一個 Master 對一個 Detail,此 Detail 有對應另一個 Detail,這樣就成了 Master/Detail/Detail 三階關係,也可以往下四階五階,但須注意階層越多,因要彼此要取出相對資料,所以會有效能的負擔,超過三層以上的情況必須考量效能。
(2) InfoDataSource 另一個工作就是當與多多個 UpdateComp 元件配合時,必須依照 UpdateComp 的 AutoTrans 來負責控制 Begin Trans/Commit Trans 與 Rollback Trans 的時機,當多階一起異動 (包括多階的Insert/Delete/Update)時,系統會自動控制全部一起 Commit 或一起 Rollback (如果其中有任一命令發生錯誤的話),來保障資料交易的精確性與穩定性。
InfoDataSource 重要屬性說明如下:
Master: 指向一個 InfoCommand,代表其為Master 主檔。
Detail: 指向一個InfoCommand,代表其為Detail 的次檔。
MasterColumns: Master的Key Field,就是關鍵欄位,可以設定多個。
DetailColumns: Detail 的Key Field,一般要與 Master的 Columns 對應上,依次序並且數量
須一致。

限於篇幅,本文先說明 EEP 這 4 個重要 A/P Server元件,右圖為一個 EEP Server 端開發的一個實例,以視覺化的方式貼上元件來設計,讓你更容易在 VS2005 的環境下維護你的系統,我們將在下一篇文章中介紹另外的四個UpdateComp/Transaction/LogInfo/AutoNum等元件。 |