- 相關(guān)推薦
XCOM
創(chuàng)建XCOM共享空間,眾人拾柴火焰高,讓我們?cè)诖丝臻g種子、澆水、開(kāi)花、結(jié)果
iXcom技術(shù)白皮書(shū)
1. 前言... 1
2. iXcom簡(jiǎn)介... 2
3. iXcom的功能... 3
4. iXcom的特點(diǎn)... 4
5. 基本概念... 5
5.1. 應(yīng)用... 5
5.2. 節(jié)點(diǎn)... 5
5.3. 電文... 6
5.4. 電文號(hào)... 7
5.4.1. 映射電文號(hào)... 7
5.5. 回線... 7
5.6. 主機(jī)名... 8
5.7. 主機(jī)代號(hào)... 8
5.8. 電文實(shí)時(shí)傳輸... 8
5.9. 電文可靠傳輸... 8
5.10. 靜態(tài)連接... 9
5.11. 動(dòng)態(tài)連接... 9
5.12. 隊(duì)列... 10
5.12.1. 發(fā)送隊(duì)列... 10
5.12.2. 接收隊(duì)列... 11
5.13. 分組發(fā)送... 11
5.14. 分組接收... 11
6. 體系結(jié)構(gòu)... 11
6.1. 系統(tǒng)核心... 12
6.1.1. 基礎(chǔ)平臺(tái)構(gòu)件層... 12
6.1.2. 數(shù)據(jù)處理構(gòu)件層... 13
6.2. 通信管理... 14
6.3. 應(yīng)用適配器層... 15
1. 前言本文檔介紹寶信軟件的中間件產(chǎn)品iXcom。iXcom屬于消息通信中間件,它的主要功能是在應(yīng)用程序間傳遞消息,這些消息可以在不同的通信協(xié)議(基于TCP/IP Socket)、不同的主機(jī)系統(tǒng)和不同的應(yīng)系統(tǒng)。
iXcom提供簡(jiǎn)單易用、高效可靠的分布式應(yīng)用開(kāi)發(fā)和通信平臺(tái),利用它可以快速方便地開(kāi)發(fā)可靠、高效的分布式應(yīng)用。
iXcom提供遠(yuǎn)程監(jiān)控和控制功能,可以方便的控制通信線路和得知通信運(yùn)行狀況。
iXcom提供對(duì)多種主流數(shù)據(jù)庫(kù)的支持,支持Oracle,SQLServer等數(shù)據(jù)庫(kù)。
iXcom提供對(duì)多種開(kāi)發(fā)語(yǔ)言的支持,支持C/C++ , Java, .NET, VB , Delphi等語(yǔ)言。
2. iXcom簡(jiǎn)介iXcom 是面向分布式應(yīng)用的消息中間件,它為網(wǎng)絡(luò)環(huán)境下客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu)的應(yīng)用系統(tǒng)的開(kāi)發(fā)和運(yùn)行,提供了靈活和易用的基礎(chǔ)平臺(tái)。
iXcom提供兩種通訊模式,實(shí)時(shí)傳輸模式和可靠傳輸模式。在實(shí)時(shí)傳輸模式上,iXcom提供快速地?cái)?shù)據(jù)發(fā)送能力,但在通信出現(xiàn)異常時(shí)不能保證數(shù)據(jù)地可靠到達(dá)。在可靠傳輸模式下,iXcom提供可靠的數(shù)據(jù)發(fā)送能力,嚴(yán)格按照應(yīng)用發(fā)送電文的先后順序進(jìn)行電文發(fā)送,保證電文的可靠傳輸。
一個(gè)iXcom 的基本工作示意圖如圖1 所示。應(yīng)用程序分布在網(wǎng)絡(luò)上的兩個(gè)結(jié)點(diǎn)上,當(dāng)應(yīng)用程序之間要傳送消息時(shí),應(yīng)用程序只需將消息電文號(hào)和消息的內(nèi)容通過(guò)iXcom提供的接口傳給iXcom。iXcom 便會(huì)利用網(wǎng)絡(luò)結(jié)點(diǎn)上的各個(gè)iXcom運(yùn)行系統(tǒng)組成的虛擬網(wǎng),將消息輸送到消息接收者所在的結(jié)點(diǎn)上,然后提交給消息的接收者。
圖1
3. iXcom的功能iXcom的主要功能如下:
提供端到端的實(shí)時(shí)通信服務(wù)。應(yīng)用不必關(guān)心網(wǎng)絡(luò)通信和其它的網(wǎng)絡(luò)細(xì)節(jié),應(yīng)用只需關(guān)注應(yīng)用業(yè)務(wù)層,減少學(xué)習(xí)和使用的難度。
提供端到端的可靠通信服務(wù)。適用于分布式環(huán)境下各種不同類型的應(yīng)用開(kāi)發(fā),特別是對(duì)通信的可靠性要求較高的應(yīng)用,提供多層次的異步通信機(jī)制。通信的應(yīng)用雙方在處理時(shí)間上可以互不相關(guān),發(fā)送方在發(fā)送數(shù)據(jù)時(shí)接收方應(yīng)用可以還未啟動(dòng)。
提供對(duì)發(fā)送電文的并發(fā)傳輸(通信規(guī)約必須是動(dòng)態(tài)連接的)和接收電文的并發(fā)處理,適用于對(duì)效率要求比較高的業(yè)務(wù)領(lǐng)域。
提供簡(jiǎn)單易用、快速、高效可靠的分布式應(yīng)用系統(tǒng)的開(kāi)發(fā)平臺(tái),應(yīng)用編程接口(API)簡(jiǎn)單且易學(xué)易用。網(wǎng)絡(luò)異構(gòu)環(huán)境和細(xì)節(jié)對(duì)用戶完全透明并且支持多種網(wǎng)絡(luò)底層環(huán)境,并提供了跨操作系統(tǒng)的C/C++/Java接口;
iXcom可以和具有不同通信規(guī)約的節(jié)點(diǎn)進(jìn)行通信。
提供WebService,XML-RPC接口,可以和J2EE和.NET進(jìn)行集成。
支持工業(yè)通信協(xié)議Modbus、3964R等協(xié)議。
通過(guò)iXcom提供的協(xié)議框架,可以對(duì)通信協(xié)議進(jìn)行擴(kuò)展。
可靠傳輸方式下,支持電文的廣播和多播發(fā)送。
提供對(duì)多種消息格式(ASCII和二進(jìn)制)傳輸?shù)闹С;提供快速可靠的面向事?wù)處理的數(shù)據(jù)遞送功能,保證數(shù)據(jù)的完整性和可靠性;
提供分布式(C/S和B/S)的管理平臺(tái),通過(guò)DNS服務(wù)和應(yīng)用管理等方式,提供對(duì)iXcom的管理和監(jiān)控。
4. iXcom的特點(diǎn)iXcom有以下特點(diǎn):
支持多種操作系統(tǒng),如IBMAIX、HP-UX 、Linux、Windows 2000/NT/XP/2003 等。
支持多種開(kāi)發(fā)工具。iXcom在所有平臺(tái)上都支持C、C++、Fortran和JAVA;在Windows 系列平臺(tái)上,提供VB/Delphi/C# 等接口。
網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)的支持量大:網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)的支持可從數(shù)十個(gè)到上千個(gè),具體上限的多少與主機(jī)的性能有關(guān)。
基于TCP/IP Socket 。
支持客戶/服務(wù)器(Client/Server)方式。
5. 基本概念5.1.應(yīng)用
與具體業(yè)務(wù)有關(guān)的程序,包括客戶端處理輸入輸出的`客戶程序(Client)、服務(wù)端負(fù)責(zé)業(yè)務(wù)邏輯的服務(wù)程序(Server)。
5.2.節(jié)點(diǎn)
節(jié)點(diǎn)就是通信程序的宿主主機(jī)。一個(gè)iXcom可以和多個(gè)節(jié)點(diǎn)通信。一個(gè)節(jié)點(diǎn)主要有五個(gè)屬性:IP地址、Port號(hào)、通信規(guī)約、主機(jī)名稱和主機(jī)代號(hào)。
IP地址
節(jié)點(diǎn)的IP地址,可以有備用IP地。
Port號(hào)
節(jié)點(diǎn)通信程序的監(jiān)聽(tīng)端口號(hào)
通信規(guī)約(Protocol)
iXcom和外部主機(jī)互相通信的規(guī)約
主機(jī)名稱(HostName)
標(biāo)識(shí)節(jié)點(diǎn)名稱,不大于8個(gè)ascii字符
主機(jī)代號(hào)(HostDC)
標(biāo)識(shí)節(jié)點(diǎn)代號(hào),用做發(fā)送電文時(shí)的目的'地,用2個(gè)ascii字符表示。
注:在本文章,沒(méi)有特殊指名的話,節(jié)點(diǎn)和主機(jī)是同一概念。
5.3.電文
在通信中間件之間傳送的數(shù)據(jù)包,一般由電文頭、電文體(數(shù)據(jù)塊)和結(jié)束符組成。
其中電文頭長(zhǎng)度an>1-2個(gè)字符,對(duì)于特定的通信規(guī)約而言,結(jié)束符是確定不變的'。
數(shù)據(jù)電文(Data Message)
用于傳送應(yīng)用系統(tǒng)的數(shù)據(jù)塊,iXcom不對(duì)該類型電文進(jìn)行拆分,但該電文有可能被底層的TCP協(xié)議進(jìn)行拆分和重組。
應(yīng)答電文(ACK Message)
由通信的接收方發(fā)送,用于告知發(fā)送方電文是否已被正確接收。
心跳電文(Heartbeat message)
用于監(jiān)視回線和對(duì)方通信程序的狀態(tài),用作狀態(tài)檢測(cè),雙方可根據(jù)實(shí)際需要決定是否發(fā)送心跳電文。
注:
1. 應(yīng)答電文是用于保證通信的可靠傳輸。
2. 控制電文、心跳電文是通信相關(guān)的電文,應(yīng)用不用關(guān)心此類電文。
5.4.電文號(hào)
用于標(biāo)識(shí)一條電文的類型和目的,一般在電文頭部中有電文號(hào)字
段。電文號(hào)是通信雙方按業(yè)務(wù)劃分共通制定的,它一般用長(zhǎng)度不大于6位的ASCII字符表示。
5.4.1. 映射電文號(hào)
用于歷史問(wèn)題等原因,可能在同一項(xiàng)目中出現(xiàn)電文號(hào)重復(fù)的現(xiàn)
象。為了便于應(yīng)用方便處理電文,iXcom提供映射電文號(hào)的功能,應(yīng)用可以根據(jù)需對(duì)每個(gè)電文號(hào)定義它的映射電文號(hào),該映射電文號(hào)必須是全局唯一的`,也就是說(shuō)在同一項(xiàng)目中雖然電文號(hào)可以重復(fù),但映射電文號(hào)必須是唯一的。
注:若項(xiàng)目中有重復(fù)電文號(hào),iXcom和應(yīng)用之間的接口有如下約定:
1) 應(yīng)用發(fā)送電文時(shí),提供的電文號(hào)必須是映射電文號(hào)。當(dāng)iXcom發(fā)送電文時(shí),iXcom會(huì)把映射電文號(hào)轉(zhuǎn)化成實(shí)際的電文號(hào)進(jìn)行發(fā)送。
2) iXcom收到電文后,將把收到電文的映射電文號(hào)發(fā)送給應(yīng)用,而不是原有電文號(hào)。
5.5.回線
在通信程序雙方之間建立的一條TCP 連接,一條回線既可以接收也可以發(fā)送數(shù)據(jù)。一般來(lái)說(shuō),通信雙方通信程序之間需要建立兩條回線。
一般情況下,在iXcom中采用的回線模式如下:
5.6.通信模式
通常來(lái)說(shuō),XCOM間通信,雙方都有一個(gè)客戶端和服務(wù)端。甲方要發(fā)數(shù)據(jù)給乙方,甲方XCOM的客戶端把數(shù)據(jù)發(fā)給乙方的服務(wù)端。反之,乙方發(fā)數(shù)據(jù)給甲方,是乙方的客戶端把數(shù)據(jù)發(fā)給甲方的'服務(wù)端。
Socket類型
<></>對(duì)應(yīng)值
<></>說(shuō)明
<></>WRITE
<></>C
<></>客戶端session讀寫(xiě):本方作為客戶端,主動(dòng)連接對(duì)方,連接建立后,該Socket連接可以發(fā)送電文。
<></>READ
<></>S
<></>服務(wù)器端session讀寫(xiě):本方作為服務(wù)器端,等待對(duì)方主動(dòng)連接,連接建立后,該Socket連接上可以接收電文并且發(fā)送底層應(yīng)答(按規(guī)約情況而定)。
<></>READ_WRITE
<></>CS
<></>客戶端和服務(wù)端兩個(gè)session都讀寫(xiě),融合以上兩個(gè)session的功能。
<></>5.7.主機(jī)名
用于在通信時(shí)標(biāo)識(shí)通信節(jié)點(diǎn)的主機(jī)名字。
5.8.主機(jī)代號(hào)
用于在電文收發(fā)時(shí)標(biāo)識(shí)發(fā)送方和接收方,一般在電文頭部中有主機(jī)代號(hào)的字段,用2個(gè)大寫(xiě)ascii碼字母表示。
5.9.電文實(shí)時(shí)傳輸
電文實(shí)時(shí)傳輸指電文必須在規(guī)定的時(shí)間內(nèi)必須傳遞到目標(biāo)節(jié)點(diǎn)。iXcom在規(guī)定時(shí)間內(nèi)提供快速可靠的傳輸機(jī)制,保證消息傳遞的實(shí)時(shí)性和可靠性,但在異常(網(wǎng)絡(luò)設(shè)備異;?qū)Φ葯C(jī)進(jìn)程異常)時(shí)不保證消息的`可靠傳輸。在異常情況下,應(yīng)用發(fā)送給iXcom的電文數(shù)據(jù)將被丟棄,iXcom將給應(yīng)用誤返回值,應(yīng)用必須考慮電文重發(fā)或其它處理機(jī)制。
5.10. 電文可靠傳輸
電文可靠傳輸指電文的傳遞在時(shí)間上無(wú)特殊的要求,在網(wǎng)絡(luò)連通的情況下必須保證消息可靠的`傳遞到目標(biāo)節(jié)點(diǎn)。電文發(fā)送時(shí),在遇到可恢復(fù)的故障(包括機(jī)器故障或網(wǎng)絡(luò)故障)情況下,通過(guò)后續(xù)重發(fā)電文能夠保證消息的可靠傳輸。
5.11. 靜態(tài)連接
指通信雙方建立的TCP/IP連接一直保持,直到停止通信程序或異常終止。當(dāng)通信出現(xiàn)異常時(shí),客戶端必須具備重新連接服務(wù)端功能,保證通信的可靠性。靜態(tài)連接示意圖如下:
注:若通信規(guī)約不存在應(yīng)答電文,等待應(yīng)答階段將不存在。
5.12. 動(dòng)態(tài)連接
動(dòng)態(tài)socket通信是指計(jì)算機(jī)之間的'TCP/IP連接方式是動(dòng)態(tài)的,當(dāng)一次通信結(jié)束后,計(jì)算機(jī)之間的連接隨之關(guān)閉,下一次傳送電文時(shí),需要重新建立socket連接。如下圖所示:
(注:發(fā)送方在收到應(yīng)答電文后必須關(guān)閉socket連接。)
5.13. 隊(duì)列
在可靠傳輸模式下,隊(duì)列是消息存儲(chǔ)的地方。消息在收發(fā)過(guò)程中將存儲(chǔ)于隊(duì)列中,可靠隊(duì)列中的消息存儲(chǔ)于數(shù)據(jù)庫(kù)中,不可靠隊(duì)列中的消息存儲(chǔ)于內(nèi)存緩沖區(qū)中。隊(duì)列結(jié)構(gòu)由消息索引和數(shù)據(jù)存儲(chǔ)區(qū)等部分組成。iXcom 系統(tǒng)提供的`隊(duì)列基本類型為發(fā)送隊(duì)列和接收隊(duì)列。
5.13.1. 發(fā)送隊(duì)列
發(fā)往目的地的電文存儲(chǔ)在發(fā)送隊(duì)列中,電文根據(jù)發(fā)送目的地(即主機(jī)代號(hào))分別被放到不同的邏輯發(fā)送隊(duì)列中,iXcom核心從發(fā)送隊(duì)列中取出電文進(jìn)行網(wǎng)絡(luò)發(fā)送。
5.13.2. 接收隊(duì)列
iXcom收到電文后,將根據(jù)發(fā)送方的設(shè)置(即主代號(hào))將電文放到相應(yīng)的邏輯接收隊(duì)列中。
5.14. 分組發(fā)送
應(yīng)用可以根據(jù)業(yè)務(wù)的需求把發(fā)往某一主機(jī)的電文號(hào)按業(yè)務(wù)進(jìn)行分組。每個(gè)組看作一個(gè)隊(duì)列,每一組電文有對(duì)應(yīng)的'組號(hào)(整數(shù))。對(duì)應(yīng)于每一個(gè)隊(duì)列,iXcom有一個(gè)且同一時(shí)刻只有一個(gè)進(jìn)程對(duì)該隊(duì)列進(jìn)行操作發(fā)送,隊(duì)列與隊(duì)列之間的電文是互不影響的,一個(gè)隊(duì)列中的電文堵塞,不會(huì)影響其他隊(duì)列的電文。
注:分組發(fā)送僅限于動(dòng)態(tài)連接方式,不能用于靜態(tài)連接方式。
5.15. 分組接收
應(yīng)用可以根據(jù)業(yè)務(wù)的需要把來(lái)自同一主機(jī)的電文按業(yè)務(wù)進(jìn)行分組。每個(gè)組看作一個(gè)隊(duì)列,每一組電文有對(duì)應(yīng)的組號(hào)(整數(shù))。對(duì)應(yīng)于每一個(gè)隊(duì)列,iXcom有一個(gè)且同一時(shí)刻只有一個(gè)進(jìn)程對(duì)該隊(duì)列進(jìn)行操作發(fā)送(發(fā)送給應(yīng)用,如Tuxedo),隊(duì)列與隊(duì)列之間的電文是互不影響的,一個(gè)隊(duì)列中的電文堵塞,不會(huì)影響其他隊(duì)列的電文。
6. 體系結(jié)構(gòu)本節(jié)描述iXcom的.基本組成和運(yùn)行方式。
在應(yīng)用系統(tǒng)進(jìn)行數(shù)據(jù)通訊時(shí),應(yīng)用進(jìn)程通過(guò)iXcom接口函數(shù),將電文放入隊(duì)列中。iXcom 核心進(jìn)程從隊(duì)列中取出消息,根椐電文中的電文號(hào),通過(guò)iXcom 之間(或與其它通信程序)建立的數(shù)據(jù)通道,將該電文傳送到接收者所在iXcom(或其它通信程序)。接收者所在的iXcom 核心收到電文后將電文寫(xiě)入接收隊(duì)列中,接收應(yīng)用進(jìn)程通過(guò)調(diào)用iXcom的接口函數(shù),從接收隊(duì)列中取出電文。至此,一個(gè)電文傳遞完畢。
6.1.系統(tǒng)核心
系統(tǒng)核心由兩大部分組成,即基礎(chǔ)平臺(tái)構(gòu)件層和數(shù)據(jù)處理構(gòu)件層。
6.1.1. 基礎(chǔ)平臺(tái)構(gòu)件層
基礎(chǔ)平臺(tái)構(gòu)件層由以下幾部分組成,包括事件分派、socket傳輸、進(jìn)程管理、數(shù)據(jù)庫(kù)連接池和線程池。
事件分派
事件分派主要工作是建立socket連接、維護(hù)監(jiān)控通信鏈路;從通信鏈路中讀取數(shù)據(jù)并分派給協(xié)議插件。
Socket傳輸
應(yīng)用電文發(fā)送和處理。
進(jìn)程管理
進(jìn)程管理主要工作是管理和維護(hù)iXcom的各進(jìn)程。
數(shù)據(jù)庫(kù)連接池
數(shù)據(jù)庫(kù)連接池主要工作是在電文可靠傳輸模式下,提高數(shù)據(jù)庫(kù)訪問(wèn)速度的.效率。
線程池
線程池主要工作在于提高在并發(fā)處理電文時(shí)的處理效率。
6.1.2. 數(shù)據(jù)處理構(gòu)件層
數(shù)據(jù)處理構(gòu)件層由以下幾部分組成,包括電文交換、
電文時(shí)序控制、數(shù)據(jù)轉(zhuǎn)換、協(xié)議插件和異常處理。
電文存儲(chǔ)
電文存儲(chǔ)包括電文的寫(xiě)入和讀取。當(dāng)收到一條電文時(shí),iXcom要把它寫(xiě)入數(shù)據(jù)庫(kù),以便后續(xù)的應(yīng)用處理;當(dāng)有待發(fā)數(shù)據(jù)時(shí),iXcom要從數(shù)據(jù)庫(kù)中讀取相應(yīng)的數(shù)據(jù),然后通過(guò)基礎(chǔ)平臺(tái)層發(fā)送給目的地。
電文時(shí)序控制
若應(yīng)用電文存在業(yè)務(wù)關(guān)系,iXcom發(fā)送電文是嚴(yán)格按照應(yīng)用寫(xiě)入電文的先后順序進(jìn)行電文發(fā)送。
數(shù)據(jù)轉(zhuǎn)換
當(dāng)電文中存在二進(jìn)制數(shù)據(jù)時(shí),iXcom可以通過(guò)該電文號(hào)所對(duì)應(yīng)的轉(zhuǎn)換格式把該電文內(nèi)容全部轉(zhuǎn)換成ascii碼電文,方便應(yīng)用的處理。
協(xié)議插件
異常處理
當(dāng)iXcom收到異常數(shù)據(jù)時(shí)(如電文號(hào)不對(duì)等),會(huì)給對(duì)方發(fā)送底層負(fù)應(yīng)答電文。
6.2.通信管理
通信管理主要由幾部分組成,包括運(yùn)行管理、平臺(tái)監(jiān)控、配置管理和日志管理。
運(yùn)行管理
通過(guò)運(yùn)行管理功能,可以啟動(dòng)和關(guān)閉回線,可以置回線開(kāi)啟和關(guān)閉狀態(tài)。
平臺(tái)監(jiān)控
通過(guò)平臺(tái)監(jiān)控,可以實(shí)時(shí)獲取當(dāng)前通信狀態(tài)(在線或離線)。
配置管理
通過(guò)配置管理:
可以查看當(dāng)前主機(jī)配置信息,可以查看當(dāng)前電文號(hào)配置信息。
可以修改原有主機(jī)信息(比如IP地址或port號(hào)),可以增加電文號(hào),可以新增回線。
日志管理
通過(guò)日志管理,可以查看各條回線的通信狀態(tài)信息,從而進(jìn)行通信跟蹤維護(hù)和排障。
6.3.應(yīng)用適配器層
應(yīng)用適配器是應(yīng)用和iXcom進(jìn)行溝通的橋梁,應(yīng)用通過(guò)適配器
把待發(fā)數(shù)據(jù)發(fā)送給iXcom進(jìn)行處理;iXcom通過(guò)適配器把待處理數(shù)據(jù)發(fā)送給應(yīng)用進(jìn)行處理。