TONGLINK/Q

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的連線
常連線:正常關閉或者發生故障時才關閉的連線,連線斷開後會自動連線。
路由:不相鄰節點間的通訊。不相鄰的兩個節點和第三個中間節點組成的通信傳輸路徑稱為通信路由
路由方式靜態路由:由用戶配置到某個子網的所有數據經由某個節點轉發。匹配規則支持*和?,*代表:後續字元不進行比較,?代表:當前字元不進行比較。使用靜態路由方式要注意避免路由的死循環。

訊息管理

訊息定義:在分散式套用中,不同的套用進程之間傳遞、交換的信息。訊息由訊息內容和接收方名單組成。
訊息內容及格式由訊息的提供者和接收方協商決定。形式上表現為一個數據包或者一個檔案。
訊息的名稱由用戶指定,最大長度為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 有系統優先權,用於存放系統訊息,具有最高的優先權,系統優先權里的訊息傳送完畢之後才能傳送其他優先權中的訊息,不支持獨占優先權(強占所有時間)和等待優先權(無其他訊息傳送時才傳送)。

相關詞條

熱門詞條

聯絡我們