一種ha訪問自適應的方法
【專利摘要】本發明提供一種HA訪問自適應的方法,該方法讓使用者調用同步接口或異步接口訪問節點,返回節點id;根據返回節點id,訪問節點id的設備,若成功,則用該設備提供服務;否則將節點id和訪問錯誤碼作為形參傳入反饋接口。這樣讓使用者訪問簡單,降低網絡負擔。
【專利說明】一種HA訪問自適應的方法
【技術領域】
[0001]本發明涉及一種訪問節點技術,具體涉及一種HA訪問自適應的方法。
【背景技術】
[0002]在分布式系統中,互備方式是一種常用的高可用機制,即主設備提供服務,其他節點作為熱備節點隨時準備接管主設備。這是由于一方面分布式系統涉及到的節點比較多,故障率本身就比單節點高,另外一點分布式系統一般期望獲得更高的可用性。這種互備方式中最常用的是主從互備,即當主設備發生故障時,從設備接管主設備工作繼續提供服務。這種方式對訪問者來說是一個挑戰,因為同一時刻即有可能是主設備在提供服務,也有可能是從設備在提供服務。
[0003]一種比較簡單的實現方法是使用者采用輪詢的方式,即不管當前宄竟是哪個設備在提供服務,都從頭開始進行嘗試,直到碰到正在提供服務的節點。
[0004]輪詢方式實現邏輯簡單,易于理解,但是其弊端也是顯而易見的。首先,如果使用者直接輪詢訪問,那每個使用者都要做類似工作,代碼冗余度會非常高;其次如果對輪詢進行封裝,為了做到靈活、通用,每個使用者可能需要注冊比較多的函數以達到私有目的;這對使用者來說都是一種負擔,很不友好。此外也是最重要的缺點,由于輪詢,增加了訪問延遲,同時由于無效消息的發送,大大加重了網絡負擔。
【發明內容】
[0005]為了克服上述現有技術的不足,本發明提供一種HA訪問自適應的方法,該方法對外提供一套接口,具體包括獲取需要訪問的節點id的同步接口和異步接口,以及反饋接口,使用者只需通過三個接口即可達到HA訪問的自適應。
[0006]為了實現上述發明目的,本發明采取如下技術方案:
[0007]一種HA訪問自適應的方法,該方法具體步驟如下:
[0008](I)使用者調用同步接口或異步接口訪問節點,返回節點id ;
[0009](2)使用者根據返回節點id,若訪問節點id的設備成功,則用該設備提供服務;否則將節點id和訪問錯誤碼作為形參傳入反饋接口。
[0010]本發明提供的優選技術方案中,所述同步接口訪問節點的具體步驟如下:
[0011]A、調用同步接口獲取訪問主節點id ;
[0012]B、根據主節點id查找HA訪問結構并加讀鎖;
[0013]C、若HA訪問結構的全局狀態為OK,則找到狀態為ACTIVE的節點并返回節點id ;
否則在信號量上睡眠,等待結構被修復線程修復;
[0014]D、修復完成被喚醒后繼續查看全局狀態并查找ACTIVE節點,再返回節點id。
[0015]本發明提供的第二優選技術方案中,所述異步接口訪問節點的具體步驟如下:
[0016]A、調用異步接口獲取訪問節點id ;
[0017]B、根據主節點id查找HA訪問結構并加讀鎖;
[0018]C、若HA訪問結構的全局狀態為OK,則獲取ACTIVE節點并返回節點id ;否則分配異步wait結構并設置回調函數,將wait結構掛入HA訪問結構的wait結構隊列并返回特定錯誤碼,修復線程進行修復;
[0019]D、使用者看到特定錯誤碼則繼續處理其他任務;
[0020]E、HA結構修復完成后調用回調函數重新投遞任務,使用者則可以繼續處理該任務。
[0021 ] 本發明提供的第三優選技術方案中,所述反饋接口的執行方式,具體步驟如下:
[0022]A、反饋接口接收節點id和訪問錯誤碼;
[0023]B、判斷訪問錯誤碼是否為系統定義的特定錯誤碼,若是則將全局狀態置為RECOVERY,掛入修復鏈表list_ha,觸發修復線程進行修復;
[0024]C、修復完成后,再重新訪問節點id的設備。
[0025]本發明提供的第四優選技術方案中,所述修復線程修復全局狀態為RECOVERY狀態,修復過程即向組內所有節點發送消息,并將應答接管主節點工作的節點設置為ACTIVE狀態,其余設置為STANDBY狀態,并修改全局狀態為0K,喚醒等待隊列的同步或異步等待者。
[0026]本發明提供的第五優選技術方案中,該方法的主要數據結構包括:讀寫鎖rwlock、全局狀態gstate、所有主從節點id、節點狀態nodestates、修復鏈表list_ha和等待隊列Waitq0
[0027]本發明提供的第六優選技術方案中,所述全局狀態包括OK和RECOVERY兩種狀態,OK表示可用,RECOVERY表示正在修復;所述節點狀態包括ACTVIE和STANDBY兩種狀態,當全局狀態為OK時,有且只有一個節點狀態為ACTIVE,其余皆為STANDBY狀態。
[0028]與現有技術相比,本發明的有益效果在于:
[0029]本發明只需要通過三個接口即可達到HA訪問的自適應,代碼冗余度大大降低,不需要注冊較多的函數來達到私有目的
[0030]具有很好的擴展性,由于使用者不用了解自動定位細節,所以自適應方法內部進行調整不影響外網使用者。
[0031]降低使用者的訪問延遲,同時沒有了不必要的消息發送,大大降低了網絡負擔。
【專利附圖】
【附圖說明】
[0032]圖1是同步接口訪問節點的流程圖
[0033]圖2是異步接口訪問節點的流程圖
【具體實施方式】
[0034]下面結合附圖對本發明作進一步詳細說明。
[0035]系統內有A、B兩個節點互為熱備(即其中一個出現故障,另外一個代替它繼續提供服務),使用者訪問A節點,使用者調用HA的同步接口或異步接口,獲取訪問節點id。
[0036]使用者根據訪問節點id,訪問節點id的設備(讓它提供A的服務),如果訪問出錯,節點id直接返回拒絕服務或者網絡錯誤,錯誤碼為ERR,使用者需要調用HA的反饋接口將ERR傳入,告訴HA需要A提供服務的訪問出錯,錯誤碼為ERR。
[0037]HA模塊會根據錯誤碼(只有網絡錯及拒絕服務錯誤才會將A加入探測列表)判斷是否需要對A重新探測,如果需要重新探測,則利用掛載點list_ha將A結構掛入修復隊列,同時置全局狀態為RECOVERY。待修復線程重新探測出A節點的服務由哪個節點承擔后,置全局狀態為0K。
[0038]由圖1所示,調用同步接口的具體步驟如下:
[0039]A、調用同步接口獲取訪問主節點id ;
[0040]B、根據主節點id找到HA訪問結構并給訪問結構加讀鎖;
[0041]C、若HA訪問結構的全局狀態為0K,則找到狀態為ACTIVE的節點并返回節點id ;否則分配wait結構,掛入訪問結構的waitq隊列
[0042]D、修復完成被喚醒后繼續查看全局狀態并查找ACTIVE節點,再返回節點id。
[0043]由圖2所示,調用異步接口的具體步驟如下:
[0044]A、調用異步接口獲取訪問節點id ;
[0045]B、根據主節點id查找HA訪問結構并加讀鎖;
[0046]C、若HA訪問結構的全局狀態為0K,則獲取ACTIVE節點并返回節點id ;否則分配異步wait結構并設置回調函數,將wait結構掛入HA訪問結構的waitq隊列并返回特定錯誤碼,修復線程進行修復;
[0047]D、使用者看到特定錯誤碼則繼續處理其他任務;
[0048]E、HA結構修復完成后調用回調函數重新投遞任務,使用者則可以繼續處理該任務。
[0049]最后應當說明的是:以上實施例僅用以說明本發明的技術方案而非對其限制,盡管參照上述實施例對本發明進行了詳細的說明,所屬領域的普通技術人員依然可以對本發明的【具體實施方式】進行修改或者等同替換,這些未脫離本發明精神和范圍的任何修改或者等同替換,均在申請待批的本發明的權利要求保護范圍之內。
【權利要求】
1.一種HA訪問自適應的方法,其特征在于,該方法具體步驟如下: (1)調用同步接口或異步接口訪問節點,返回節點id; (2)根據返回節點id,訪問節點id的設備,若成功,則用該設備提供服務;否則將節點id和訪問錯誤碼作為形參傳入反饋接口。
2.根據權利要求1所述HA訪問自適應的方法,其特征在于,所述同步接口訪問節點包括如下步驟如下: A、調用同步接口獲取訪問主節點id; B、根據主節點id查找HA訪問結構并加讀鎖; C、若HA訪問結構的全局狀態為0K,則找到狀態為ACTIVE的節點并返回節點id;否則在信號量上睡眠,等待結構被修復線程修復; D、修復完成被喚醒后繼續查看全局狀態并查找ACTIVE節點,再返回節點id。
3.根據權利要求1所述HA訪問自適應的方法,其特征在于,所述異步接口訪問節點的具體步驟如下: A、調用異步接口獲取訪問節點id; B、根據主節點id查找HA訪問結構并加讀鎖; C、若HA訪問結構的全局狀態為0K,則獲取ACTIVE節點并返回節點id;否則分配異步wait結構并設置回調函數,將wait結構掛入HA訪問結構的waitq隊列并返回特定錯誤碼,修復線程進行修復; D、使用者看到特定錯誤碼則繼續處理其他任務; E、HA結構修復完成后調用回調函數重新投遞任務,使用者則可以繼續處理該任務。
4.根據權利要求1所述HA訪問自適應的方法,其特征在于,所述反饋接口的執行方式,具體步驟如下: A、反饋接口接收節點id和訪問錯誤碼; B、判斷訪問錯誤碼是否為系統定義的特定錯誤碼,若是則將全局狀態置為RECOVERY,掛入修復鏈表list_ha,觸發修復線程進行修復; C、修復完成后,再重新訪問節點id的設備; 所述特定錯誤碼包括拒絕服務和網絡錯誤。
5.根據權利要求2或3任一所述HA訪問自適應的方法,其特征在于,所述修復線程修復全局狀態為RECOVERY狀態,修復過程即向組內所有節點發送消息,并將應答接管主節點工作的節點設置為ACTIVE狀態,其余設置為STANDBY狀態,并修改全局狀態為0K,喚醒等待隊列的同步或異步等待者。
6.根據權利要求1所述HA訪問自適應的方法,其特征在于,該方法的主要數據結構包括:讀寫鎖rwlock、全局狀態gstate、所有主從節點id、節點狀態nodestates、修復鏈表list_ha和等待隊列Waitq0
7.根據權利要求6所述HA訪問自適應的方法,其特征在于,所述全局狀態包括OK和RECOVERY兩種狀態,OK表示可用,RECOVERY表示正在修復;所述節點狀態包括ACTVIE和STANDBY兩種狀態,當全局狀態為OK時,有且只有一個節點狀態為ACTIVE,其余皆為STANDBY 狀態。
【文檔編號】G06F11/07GK104484236SQ201410709886
【公開日】2015年4月1日 申請日期:2014年11月28日 優先權日:2014年11月28日
【發明者】馬照云, 楊浩 申請人:曙光云計算技術有限公司