首頁 公司 產品 產業/方案 服務 夥伴 客戶 論壇 ICE Developer Center Site Map          [搜尋]
ICE Developer Center Overview Register Training LearningSpace Workshop ICE Messaging Express MOM Glossary
Member Login Download GetLicense Support Profile iReal Program Logout

 .艾揚即時訊息技術電子週報 < ICE Messaging Weekly >. 


第 15 期 2003.04.08     本報內容由 艾揚科技 (ICE Technology Corp.) 提供

iPush® Server 部署之道 (上 ─ 單機篇)


本期內容大綱

 
[編輯手扎] ICE Messaging Editor's Note 郭漢丞  

正確部署

企業引進新的系統平台絕對是一件大事,在新系統部署階段,必須依據各項標準作業程序執行,方能確保日後系統運作的穩定性。當然,在艾揚的旗艦產品 ICE iPush® Communication Server 當中,也包含這些部署階段的規範,在本期電子報企劃的專文中,主筆蔣居裕就針對這些部署上的注意事項,一一列舉出來,為 SA/SD、Developer、乃至網管人員解答疑惑。本期以單台 iPush® Server 部署做說明,下一期則將詳細說明如何執行多部 iPush® Server 的叢集式部署。

在部署階段,「正確性」是必須遵守的準則。在關鍵的步驟上,千萬不要掉以輕心,忽略了精準,因為初期的小疏忽,很可能會造成日後應用系統運作不穩定的根源。以 iPush® Server 這樣架構在底層的即時訊息傳遞伺服器而言,如果在部署階段出現漏洞,可能會造成訊息無法順利傳遞的後果。這種錯誤如果在實際上線後才發現,可能造成使用者對於新系統的印象不佳,甚至會懷疑新系統是不是反而不夠穩定。我們之所以規劃「Deployment」套式主題,目的就是要提醒相關人員重視部署階段的「正確性」。

這樣的要求其實每一位 Developer 都清楚,但是我們還是要不厭其煩地再強調一次:使用者的第一印象將會影響深遠。即使您已經選擇了目前最好的訊息伺服器軟體,但還是千萬不要輕忽正確部署的重要性,讓每一位使用者在第一次接觸您的應用系統時,就能體驗到即時訊息傳遞的全新力量,進而善用新的資訊工具,這才是對於 Developer 努力建構應用系統的最佳回饋。

 
[訊息論壇] ICE Messaging Forum   蔣居裕

技術篇:iPush® Server 部署之道 (上 ─ 單機篇)

一旦 Developer 將訊息應用軟體開發完成,經過測試之後,接下來,就該是進行整套系統上線部署 (Go-live Deployment) 的時候了。

我們曾經在本訊息論壇中提醒 Developer,千萬不要誤把單純的 Development 開發環境當成複雜的 Deployment 上線環境,以免在應用系統上線時,才發覺大小各種問題叢生。

事實上,系統部署的規劃,應該是在系統分析設計完畢之後,就已經讓負責軟體開發的 Developer 清楚知道才對。而系統分析設計要能夠正確地規劃出部署環境,則是其具備清楚的各項前提要素,如:

  • 應用系統上線後,在尖峰時刻 (Peak Time),準備要可以同時服務多少上線的使用者?
  • 訊息的大小範圍如何?
  • 上述兩者綜合加乘考量,應該要準備多少頻寬?
  • 一部訊息伺服器夠嗎?還是必須部署伺服叢集 (Clustering)?
  • 訊息伺服器的 IP / Host Name 為何?DNS 設定要正確。
  • 訊息伺服器所使用的 Port Number 為何?
  • 訊息伺服器要部署在防火牆 (Firewall) 內,還是外?
  • 搭配訊息伺服器使用的 Web Server,其各項設定是否無誤?
  • 如果訊息應用程式為需搭配 Web Server 執行者 (如 ASP、Java Applet),那相關 Binary 檔案 (如 .ocx, .class, .jar, ......) 要放置在甚麼路徑之下?

是的,就是有這麼多系統部署上的環節要注意,所以我們才說上線環境的複雜程度,絕非單純的開發環境所能比擬。尤其現在企業講究網路安全,SA/SD、Developer 若不跟網管人員好好坐下來討論一番,是很容易出亂子的。

沒有良好的部署,就沒有良好的服務,其理至明。以下兩期,我們針對以 iPush® Server 為中心的訊息應用系統,深入討論應該如何正確部署。

本期將重點放在單台的 iPush® Server 部署上,而下一期,則會進階討論如何部署具備 Fail Over 能力的多台 iPush® Server Clustering。

AC Server 的角色與部署

一套完整的 iPush® Server,其實是由下列四個部分組成的:

  • iPush® Messaging Kernel:又稱為 iCore,為 iPush® Server 的即時傳訊核心;一般即稱之為 iPush® Server。
  • BackOffice:提供各項管理的功能與介面。
  • AuthService:即 Access Center Server (簡稱 AC Server),對欲連線登入的 User 進行認證作業 (Authentication)。
  • License Daemon:對 License Key 進行管控。
圖 1. 以 iPush® Server 為核心的訊息應用系統組件架構圖

 

我們要在這邊,特別針對 AC Server 來說個明白。

除非是很大型的訊息應用系統,否則 AC Server 不需要單獨部署在一台 Host 上。以單台服務的 iPush® Server 來說,就是將以上四個組件通通部署安裝在同一台 Host。

而即使是多台階層式的 iPush® Server 叢集,通常 AC Server 也是與最上層的 iPush® Messaging Kernel 部署在同一台 Host 上。

註一:在 iPush® Server 叢集中最上層的 iPush® Server,即為 Connection Center for iPush® Server Clustering,我們下期再來詳加說明。 

那麼,AC Server 是如何運作的呢?

對於只負責應用軟體開發的 Developer 而言,對著 iPush® API 進行函式呼叫,是感覺不到 AC Server 存在的。

以 iPush® DLL API 為例,應用程式若要與 iPush® Server 建立連線並進行使用者登入作業,則必須呼叫 ConnectReal() 這個函式:  

int ConnectReal(char *strCompName, char *strProdName, char *strUserName, char *strPassword, char *lpszProxyAddress, int nProxyPort, char *lpszCoreAddress, int nCorePort, HWND hWnd) 

一旦呼叫這個函式,若正常的話,會一連進行兩個動作:

  1. 嘗試與 iCore (iPush® Messaging Kernel) 建立 TCP 連線。若失敗,會觸發一個包含錯誤代碼的事件 WM_CONNECTION_FAIL,且應用程式會收到回傳值 0;若成功,則回傳值為該連線的 Socket Port 埠號,並進行下一個動作。
  2. 嘗試對 AC Server 進行登入作業。若成功,應用程式會收到包含 iPush® Server IP 與 Port 埠號的事件 WM_CONNECTION_READY 通知;若失敗,則應用程式會收到包含錯誤代碼的事件 WM_CONNECTION_FAIL 通知。

所以,若應用程式收到事件 WM_CONNECTION_FAIL,那麼有可能是在嘗試建立 TCP 連線時,就發生問題;也有可能是 TCP 連線成功了,但登入 AC Server 時卻發生問題。

註二:更多的 WM_CONNECTION_FAIL 事件錯誤代碼,請參考 iPush® DLL API 的 Programming Guide 說明。

對於應用程式來說,它並不直接面對 AC Server,所謂的 "嘗試對 AC Server 進行登入作業" ,是由 iPush® Server 內部來進行的。AC Server 在收到由 API 傳送過來的 User 登入帳號資料 (strCompName, strProdName, strUserName, strPassword) 後,會進行下列查驗工作:

  • Service (strCompName + strProdName) 存不存在?
  • Service 過期了沒有?
  • Service Concurrent Connection 超過了沒有?
  • User ID (strUserName) 存不存在?
  • Password (strPassword) 對不對?
  • User 帳戶過期了沒有?
  • User Concurrent Connection 超過了沒有?
  • iPush® Host Concurrent Connection 超過了沒有?
  • ......

為能讓 iCore 與 AC Server 串聯起來,完成上述作業,iPush® 必須被正確地組態 (Configuration)。所以我們可以在 iPush.ini 組態檔案中,見到如下的設定項目:

/*************************************************************************/
/* AuthAddress & AuthPort                                                                                                     */
/* Where the iPush should connect to, to be it's AC. A blank                                                  */
/* AuthAddress represent no AuthConnection needed.                                                            */
/*************************************************************************/
AuthAddress=192.168.0.211
AuthPort=1111

非常容易明白:

  • AuthAddress:告訴 iCore,它所串聯使用的 AC Server IP 為何。
  • AuthPort:該 AC Server 服務聆聽的埠號 (預設為 1111)。

而在 AC Server 運作所需的 Auth.ini 組態檔案中,也存在著對應的服務聆聽埠號設定項目,如下所示:

  • ListenPort=1111

註三:iPush.ini 檔案位於 iPush® Server 安裝目錄下的 ICEiPush2000 子目錄中 (for Windows)。

註四:Auth.ini 檔案位於 iPush® Server 安裝目錄下的 ICEAuthService 子目錄中 (for Windows)。

而 BackOffice 裡面的 Service Management、User Management,就提供了 AC Server 各項檢驗所需的資訊。

AC Server 在運作執行時,會適當地將各種行為寫入 ACLog.txt 這個紀錄檔中,其中即提供了豐富的運作歷史紀錄,是系統管理人員與 Developer 進階了解 AC Server 必讀的參考。

註五:ACLog.txt 的檔案預設位置為 iPush® Server 安裝目錄下的 ICELogFiles 子目錄中。但您可以自行在 Auth.ini 修改 LogFilename 的設定值,以改變其位置與檔案名稱 (for Windows)。

Web Server 與 iPush® Server  

整套 iPush® Server 系統,需要 Web Server 來協同運作的原因有二:

1. BackOffice 被設計成 Web 程式,各項功能透過瀏覽器來執行,所以當然一定要有 Web Server 才行囉。

2. 如果,Developer 將 iPush® 應用程式寫成 Java Applet (使用 iPush® Java Package API),那在部署上,必須將 Java Applet 擺放在與 iPush® Server 同一 Host 的 Web Server 虛擬目錄之下。這是 Java Applet (Java Class) 的安全性設計使然,若是使用 ActiveX Control 的 ASP 程式,就沒有這樣 iPush® Server 與 Web Server 要跑在同一 Host 的限制。

在 Web Server 的搭配選用上,是否有指定的種類呢?

目前 iPush® BackOffice 在 Windows 版本上,搭配 IIS 執行,在 Linux 版本上,搭配 Apache 執行。至於用來部署 Java Applet / Java Class 與 ASP / ActiveX Control 應用程式所需的 Web Server,就不限特定的種類。

Firewall 與 iPush® Server

在現今大量依賴網路通訊的企業資訊安全環境中,防火牆 (Firewall) 已經是一個必備的設備。至於一個訊息應用系統,應該將訊息伺服器擺在 Firewall 內,還是 Firewall 外,考量點應該有:

  • 在訊息應用系統中流動的資訊,其內容安全性等級需求有多高?

    如果只是公眾資訊,如股市行情、即時新聞的訂閱與傳遞,若沒有其他的考量 (如駭客刻意的攻擊),則可以將訊息伺服器擺放在 Firewall 外。
  • Firewall 的執行效能如何?

    一旦決定要將訊息伺服器擺在 Firewall 內,那就接著要考量訊息應用系統在尖峰使用時刻的網路流量,Firewall 是不是能夠有效處理?若答案為否,那就必須考慮更換執行效能更佳的 Firewall。

訊息伺服器若擺在 Firewall 內,那網管人員就必須要在 Firewall 的 Proxy 設定中,有適當的組態,以便讓訊息應用系統的訊息流量能夠順利穿越 Firewall。那這個組態所需的資訊在哪裡呢?

讓我們回到 iPush.ini 來,Firewall 的 Proxy 組態設定資訊就在其中的 ListenPort:

/**************************************************************************/
/* Listen Port                                                                                                                             */
/* Indicate the port which the iPush server listen on.                                                                 */
/**************************************************************************/
ListenPort=8000

ListenPort 即為 iPush® Messaging Kernel 服務諸 iPush® Client 連線所聆聽的埠號。依照預設,iPush® Server for Windows 的埠號為 8000,iPush® Server for Linux 的埠號為 443。當然,實際上線部署時,Developer 可以與網管人員協調改變之。

其實,對於使用者執行客戶端應用軟體的便利性來說,我們最建議 ListenPort 被設定為 443 (即 Linux 版的預設值),因為一般 Firewall 會將 443 視為 HTTPS (SSL) 通訊協定所使用的埠號,對使用這個埠號的資料封包予以放行 (此即 HTTPS Tunneling)。

既然如此,那為何 iPush® Server for Windows 的 ListenPort 埠號還要預設為 8000,而不是 443 呢?這是因為單台的 iPush® Server for Windows 必須搭配 IIS Web Server 來執行 BackOffice,而 IIS 在安裝時,就會將埠號 443 佔去,除非安裝 SSL Server-side Certificate,否則很難將這個設定 Disable。因此,iPush® Server for Windows 只好另覓預設埠號了。   

Firewall 與 iPush® Client

不管 iPush® Server 是擺放在 Firewall 內還是外,一旦伺服器端部署完成,接下來,就是 iPush® Client 端在執行時,要有正確的對應網路連結資訊。尤其是考量到那些在 Firewall 內執行 iPush® Client 應用程式的使用者,一定要在軟體的使用者介面中,保留能夠讓使用者改變 Proxy IP 與 Port 設定的功能,以便 iPush® Client 可以彈性因應其所處的網路管理環境。這在無法預先對使用者網路環境進行管控的 B2C 應用而言,尤其重要。

我們還是以 iPush® DLL API 為例,在應用程式呼叫 ConnectReal() 這個函式時:  

int ConnectReal(char *strCompName, char *strProdName, char *strUserName, char *strPassword, char *lpszProxyAddress, int nProxyPort, char *lpszCoreAddress, int nCorePort, HWND hWnd) 

其中傳入的參數 lpszProxyAddress nProxyPort,就分別是 iPush® Client 穿越 Firewall 所需的 Proxy Server IP 位址與埠號資訊。而該 Proxy Server 當然是要設定開放對應的埠號, iPush® Client 才能正常地對由參數 lpszCoreAddress / nCorePort 所指定的 iPush® Server IP 位址 / 埠號收發訊息。

iPush® Server 對 Dangling Client 的處理之道

由於 Internet 公眾網路上的不確定因素很多,所以有時在 iPush® Client 未能正常執行 Disconnect,登出並結束與 iPush® Server 連線的情況下 (如 Client 端突然當機,或是網路中斷),導致伺服器無法即時判斷並反應 Client 的連線狀態,造成 Dangling Client 的存在。

為清理這些不正常的 Dangling Client,iPush® Server 祭出的手段,可以在 iPush.ini 檔案裡一窺端倪,相關組態項目如下所示:

/**************************************************************************/
/* CheckAliveTimeBegin & CheckAliveTimeout (min.)                                                           */
/* If a client has no respond for CheckAliveTimeBegin(in minite),                                           */
/* iPush will begin sending ack request info to it. If the client still has                                      */
/* no respond after CheckAliveTimeout(in minite), iPush will close this                                   */
/* connection.                                                                                                                           */
/**************************************************************************/
CheckAliveTimeBegin=10
CheckAliveTimeout=13

  • CheckAliveTimeBegin:如果在設定的時間內 (預設為 10 分鐘),先前連線登入的 iPush® Client 沒有任何動作,則 iPush® Server 會開始為其計時。
  • CheckAliveTimeout:承上,計時經過一段設定時間 (預設為 13 分鐘) 後,若該 iPush® Client 還是沒有動作,那麼 iPush® Server 就會強迫結束其連線。
簡短結論

由此看來,透過精心校調 Auth.ini 與 iPush.ini 這兩個組態檔,搭配外圍的網路環境設定,一定可以部署出一個既正確,運作效能又佳的訊息應用系統。

不過請記得,一旦修改了 Auth.ini 或 iPush.ini 任何一個組態檔案之後,一定要重新啟動對應的 AC Server 或 iPush® Server。這樣設定修改才會生效。 

好了,以上就是我們針對單台的 iPush® Server 訊息應用服務系統所提出的各項部署說明。下一期,就讓我們來談談進階的多台 iPush® Server Clustering 部署之道


[訊息技術說文解字] ICE Messaging Glossary   陸一凡
  • Auth Center (AC) Server    認證中心

顧名思義,就是一種讓系統查核欲存取訊息服務的使用者身份的軟體機制。

為什麼要有查核系統呢?因為訊息一但進入訊息伺服器後,透過 Pub / Sub 傳遞模式將可發送給成千上萬的接收端。所以為避免非法的訊息發送行為,系統必須查驗發送者與訂閱者的身分,方可給予使用權限。

認證中心 ─ AC Server 的角色就是查驗使用者身份的把關人員,並將一干沒有使用權限,或是使用權限過期的人士隔絕於外。在新一代的伺服系統中,AC Server 將可與企業內部既有的認證資料庫結合,以減少系統人員需管控雙重資料庫所帶來的麻煩。

  • Socket   IP 通訊插頭

這個軟體機制最早是由 Berkeley Unix 所制定的一種虛擬網路連結方式,以便讓不同的電腦處理程序 (Processes) 可以相互溝通。在網路程式設計界所提及的 Socket,都是軟體上的定義和規範,與任何硬體 (如 CPU Socket) 毫無關係。

一個 Socket 的定址方式 (Addressing ),由 host.port (主機.埠號) 所組成的,也就是說透過 Socket 通訊的雙方,都必須要具備一組 host.port 位址,然後再依照不同的通訊型態 (TCP: Connection-oriented 或 UDP: Connectionless) 建立起檔案系統的敘述子 (File Descriptor) 之後,才能開始收送資料,所以具有相當高的作業系統關聯性。

如艾揚 iPush® Server 這樣的訊息中介軟體,將 Socket Programming 細節封裝起來,提供簡單易用的 API 給網路軟體開發者,而代之以 Channel 或 Subject 這樣更高階,與作業系統程式語言都無關的通訊標的 (定址方式),以便在網路上建立強大的虛擬通道,是要快速開發與部署一個穩定的網路應用系統,可以善加利用的工具。

[艾揚快訊] ICE Express   ICE Developer Center 

iPush® API for ActiveX & Java Package 檔案更新,敬請下載

iPush® ActiveX Control Module API (iPushX.ocx) v1.4.4.1 更新摘要如下: 

  • 使用 thread 及虛擬 window 來接收,以避免使用 CSocket 造成無法接收大量快速的資料 (socket 的 callback 訊息會消失)。
  • 使用數位簽章,內含 VeriSign 核發之 Code Sign Certificate。

iPush® Java Package API (iceipush.jar) v.1.1.6 更新摘要如下:

  • 將 netConnect 函式改為,如果回傳 true 表示 login 成功,false 表 timeout (沒收到 xinit 或 xaucode) 或是 login fail (有 exception)。
  • client 三分鐘會 xpin server,如果三次都沒有回 xpon 則斷線通知 client。

其他詳情,請下載各 ZIP 檔後,開啟 Readme.txt 參考之。

API 更新檔案下載,請先登入 ICE Developer Center,於 Download 區取得 >> Go !


上一期精采內容:Hello World ! ─ iPush Client by VB DIY 29.5 分鐘


若您覺得本期內容值得參考,請轉寄給認識的朋友或同事,為國內的訊息技術社群發展盡一份力。感謝您。

免費試用 iPush Server,請連結 ICE Developer Center 網站:http://www.icetech.com.tw/icedc,進行 Register → Login → GetLicense → Download 作業即可。

訂閱與取消訂閱本電子週報,請連結 ICE Messaging Weekly 網站:http://www.icetech.com.tw/icedc/weekly.shtml

查閱本電子週報舊有出刊內容,請連結 ICE Messaging Weekly 網站:http://www.icetech.com.tw/icedc/weekly.shtml

 

回艾揚即時訊息技術電子週報主頁 | 上一期 | 下一期

Copyright 2002-2004, 艾揚科技股份有限公司版權所有;歡迎轉寄。
關於電子報發送有任何問題,或是欲轉載內容,請連絡 icedc@icetech.com.tw
台北市 100 羅斯福路二段 9 號 12 樓之 1 ,TEL: +886-2-2396-1880,FAX: +886-2-2396-1881

Unsubscribe >>
欲取消訂閱艾揚即時訊息技術電子週報 (ICE Messaging Weekly),請 Mail 至 icedc@icetech.com.tw
主旨註明:取消訂閱艾揚即時訊息技術電子週報 即可。



艾揚科技股份有限公司  台北市 103 承德路二段 81 號 15 樓之 1   電話:+886-2-25586101   傳真:+886-2-25586102

Copyright © 2002-2008 ICE Technology Corporation. All Rights Reserved.