複製鏈接
請複製以下鏈接發送給好友

TONGLINK/Q

鎖定
TongLINK/Q是和IBM MQ相近的消息中間件,其最主要的功能是保證消息的一致性,舉一個例子,如果一個應用從socket中接收了銀行A發來的數據,在處理數據過程中,應用程序崩潰,這時,銀行A數據就會丟失,銀行業務數據就核對不上,如果採用TongLINK/Q,以事務方式從TongLINK/Q中收消息,同樣是應用程序崩潰,這時,TongLINK/Q事務回退,數據就不會丟失,應用程序重啓後,可以接着從消息隊列取出消息繼續處理,如果設置了回退次數,超過一定的次數,消息進入死信隊列。這樣,不論應用程序寫的是否正確,運行情況如何,消息不會丟。
TongLINK/Q保證在應用程序崩潰,進程被殺死(包括TongLINK/Q所有的核進程),IPC資源被誤刪除,機器重啓,斷網,網絡丟包,內存耗盡,硬盤空間耗盡等各種異常情況下,TongLINK/Q都能保證事務的一致性,保證消息不丟不重複。由於以上特性,對於可靠性要求很高應用程序,底層可採用TongLINK/Q,這樣,應用程序開發者就不用再考慮應用程序被殺死或崩潰時丟消息的問題。
TongLINK/Q的其它功能,如消息順序保證、路由備份,路由選擇,集羣,客户端集羣,jms等都是在此基礎功能之上開發環境和業務應用性功能,是第二位的功能,具體可參看相關的手冊。
外文名
TONGLINK/Q
功    能
程序崩潰後數據仍不丟不重複

TONGLINK/Q基本介紹

TongLink/Q
每個節點都有一個節點名稱,節點名稱由英文字母、下劃線、數字組成,但必須以英文字母打頭,長度不得超過20個字符
每個節點對應一個IP地址,節點名配置在hosts文件中。
節點間的連接通過TongLinkQ間虛擬的數據通道。
TongLinkQ節點啓動:系統會在後台產生一個後台進程,該進程是TongLinkQ守護進程,也是TongLinkQ的系統核心,主要負責數據的收發、控制端對端消息的傳輸以及監控網絡的運行狀況。
TongLinkQ的連接
常連接:正常關閉或者發生故障時才關閉的連接,連接斷開後會自動連接。
路由:不相鄰節點間的通訊。不相鄰的兩個節點和第三個中間節點組成的通信傳輸路徑稱為通信路由
路由方式靜態路由:由用户配置到某個子網的所有數據經由某個節點轉發。匹配規則支持*和?,*代表:後續字符不進行比較,?代表:當前字符不進行比較。使用靜態路由方式要注意避免路由的死循環。

TONGLINK/Q消息管理

消息定義:在分佈式應用中,不同的應用進程之間傳遞、交換的信息。消息由消息內容和接收方名單組成。
消息內容及格式由消息的提供者和接收方協商決定。形式上表現為一個數據包或者一個文件。
消息的名稱由用户指定,最大長度為48k;消息標識指消息發送方核心產生消息的時間和ID即SRC+MSGID,消息的全局標識。
消息的類型分為數據報消息(BUF_MSG)、文件消息(FILE_MSG)和事件消息(EVENT_MSG)
數據報消息(BUF_MSG):用户API通過內存BUFF發送和接收消息,發送和接收BUF是兩個獨立的內存空間,由用户定義內存大小,用户必須定義足夠大的內存空間來存儲接收和發送的消息 ,空間不夠會導致發送和接收消息失敗,數據報消息本身沒有長度限制,實際受TongLinkQ的可用BUFF數限制。
文件消息(FILE_MSG):用户通過文件進行消息發送和接收,文件固定的保存在FILESDIR目錄下,文件名可包含目錄、路徑,可帶空格,不能用“..”,要保證文件名的唯一性,如果文件名或者路徑中帶有空格,在發送時需要用“”引起,發送消息識別出文件重複則發送失敗,接收方收到重複文件的REQ則需要給發送方回覆一個錯誤信息,停止消息傳輸;可指定文件發送後是否刪除。
事件消息(EVENT_MSG):系統事件產生的消息。事件存放在事件隊列中(包括專門的事件隊列EVENT和普通的接收隊列),事件分為兩類定義的事件和訂閲的事件,定義的事件產生的消息存放在專門的事件隊列EVENT中,而訂閲的事件產生的消息可存放在任意一個可靠的接收隊列中。
消息的生命週期
消息的生命週期是消息的所屬屬性之一,它用來控制消息從開始發送到最終被用户接收所允許的最長時間。消息的生命週期就是消息的存活時間。超過生命週期的消息,系統會自動丟棄。核心通過生命週期這一機制有效的清理一些過期的消息,釋放佔用的核心資源,保證整個系統的效率。消息生命週期的單位是秒,由用户確定,消息的可靠傳輸是侷限在消息的生命週期內的。
生命週期的設定
發送方生命週期的計算:從提交到核心開始計算,如果有事務,從事務提交開始計算目前生命週期是每三秒減一次,接收方不計算請求包發送所消耗的時間,未和發送方完全同步。
發送方消息生命週期超時:
1 消息未發送完成,則消息結果為發送失敗;如果應用訂閲消息結果,則產生消息的消息結果,寫事件隊列。
2 若消息發送完成,則繼續等待一個塊超時時間,用於等待消息結果返回,若繼續等待超時,則消息結果為等待處理結果超時,等待處理結果超時不等於接收方處理消息肯定失敗。如果應用訂閲消息結果,則產生消息的消息結果,寫入事件隊列。 3 若應用需要確切結果,可以通過查詢日誌或者應用層查詢來獲取消息結果。
接收方的生命週期:接收方接收到消息請求時,其開始的剩餘生命週期時間減去在發送隊列裏等待的時間,但忽略報頭傳遞時間。
注意:如果有未完成的消息(正在發送或者正在接收),不能修改機器時間,因為系統恢復時,會根據消息的創建時間和當前的時間去重新計算消息的剩餘週期。
消息的加密和壓縮
TongLinkQ提供對消息的加密和壓縮的功能。用户可以選擇自動加密和壓縮。系統會先進行壓縮,然後加密。
消息發送方式
1 API不等待核心應答後返回和API等待核心應答後返回。
API不等待核心應答後返回:發送方API處理完消息後立即返回,不再等待任何應答。這種方式是可以較快的連續的發送消息,因而核心無法即時處理消息,要求有比較大的發送BUF空間,因為不等待應答,核心有可能未收到消息,故不能保證信息的可靠性,並且不產生消息結果。
這種方式只能在獨立的發送語句中使用,不支持發送事務過程中的發送語句操作。不支持log_on方式,不支持事務,不支持事件。
API等待核心應答後返回:發送方核心將消息寫入發送方隊列返回結果,表明TongLinkQ核心已經成功的記錄了該消息,API接收到核心的應答後返回。使用這種方法需要定義API等待應答的時間,該時間不能超過消息的生命週期,API超時返回,不能保證TongLinkQ處理消息失敗,若需要保證絕對的可靠,需要使用發送過程事務。可用於獨立發送和事務發送。
消息的可靠性:用於核心收到消息後的管理。不負責API與核心間通訊過程中消息的可靠性管理。TongLinkQ系統提供兩種消息:可靠消息和非可靠消息。
非可靠消息(LOG_OFF)的消息數據保存在內存裏,TongLinkQ運行時支持網絡故障斷點續傳。TongLinkQ重新啓動後,消息丟失,這種方式應用在需要較高傳輸效率的系統。
可靠消息(LOG_ON)的消息保存在數據硬盤上,TongLinkQ運行時支持網絡故障斷點續傳,TongLinkQ重新啓動後,根據接收方接收消息的大小進行恢復,實現斷點續傳,但可能丟失的部分數據會重複傳送(有可能這部分數據接收成功,也有可能接收失敗),可能丟失的數據大小依賴於TCP的BUF大小和策略。
消息的優先級:TongLinkQ系統為了處理消息的優先層次提供了消息優先級的功能,可以對不同級別的消息進行相應的處理。
每個發送隊列可以包含多個優先級,優先級可以定義,最多為10級。可以定義每個優先級所允許發送的塊數;TongLinkQ按照塊數比例發送各優先級中的消息,高優先級的消息有更多的發送機會,同一優先級中的消息順序發送,即先到先發。
在發送隊列中,1有轉發優先權,用於設置需要轉發的數據塊數,可以定義可獲取發送時間(機會)的比率;2 有系統優先權,用於存放系統消息,具有最高的優先級,系統優先級裏的消息發送完畢之後才能發送其他優先級中的消息,不支持獨佔優先級(強佔所有時間)和等待優先級(無其他消息發送時才發送)。