負載均衡方法及裝置的制造方法
【專利摘要】本發明實施例提供一種負載均衡的方法及裝置。領導節點獲取處理節點的負載能力信息;所述領導節點根據所述負載能力信息均衡分配待處理任務。實現了各處理節點的負載均衡以及高可用性。
【專利說明】
負載均衡方法及裝置
技術領域
[0001]本發明實施例涉及計算機技術領域,尤其涉及一種負載均衡方法及裝置。
【背景技術】
[0002]Canal是一個開源的實時數據同步的工具,基于數據庫增量日志解析,提供增量數據訂閱以及數據消費,目前主要支持了mysql (關系型數據庫管理系統hmysql的主備復制實現原理,從上層來看,分成三步:首先,mas ter (主)將改變記錄到二進制日志(binarylog)中(這些記錄叫做二進制日志事件,binary log events,可以通過show binlogevent s進行查看);其次,slave(備)將mas ter的binary log events拷貝到它的中繼日志(relay log);最后,slave(備)重做中繼日志中的事件,將改變反映它自己的數據。
[0003]Canal在工作實現時,模擬mysql的slave的交互協議,偽裝自SSmysql slave,向mysql master發送dump協議;mysql master收到dumpi青求,開始推送binary log給slave(也就是Canal);Canal解析binary log對象。
[0004]Cana I的server模式,提供了高可用的方式,可以啟動多個節點,一個節點因為機器宕機/進程掛掉等原因失敗后,其上的所有的mysql庫的同步任務會自動轉移到另一個節點上。
[0005]然而,發明人在實現本發明的過程中發現,Canal提供的高可用機制,任務分配是搶占式的,可能會將所有的mysql庫的任務都分配到同一個節點上執行,其他節點都是空閑的,會造成某個節點壓力過大、其他節點資源的空閑浪費。
[0006]因此,一種負載均衡的方法亟待提出。
【發明內容】
[0007]本發明實施例提供一種負載均衡方法及裝置,用以解決現有技術中用戶搶占式的任務分配造成的各處理節點負載失衡的缺陷,實現了各處理節點的負載均衡以及高可用性。
[0008]本發明實施例提供一種負載均衡方法,包括:
[0009]領導節點獲取處理節點的負載能力信息;
[0010]所述領導節點根據所述負載能力信息均衡分配待處理任務。
[0011]本發明實施例提供一種負載均衡裝置,包括:
[0012]信息獲取模塊,用于領導節點獲取處理節點的負載能力信息;
[0013]任務分配模塊,用于所述領導節點根據所述負載能力信息均衡分配待處理任務。
[0014]本發明實施例提供的負載均衡方法及裝置,通過根據獲取到的處理節點的負載能力信息均衡分配待處理任務,改變了現有技術中進行任務處理時,搶占式的任務分配造成的各處理節點負載失衡的缺陷,實現了所有處理節點的負載均衡以及高可用性,避免單節點壓力大、其他節點資源浪費,提高系統的整體性能和穩定。
【附圖說明】
[0015]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0016]圖1為本申請實施例一的技術流程圖;
[0017]圖1-1為本申請實施例一的不例圖;
[0018]圖1-2為本申請實施例一的另一示例圖;
[0019]圖2為本申請實施例二的技術流程圖;
[0020]圖3為本申請實施例三的技術流程圖;
[0021]圖4為本申請實施例四的裝置結構示意圖。
【具體實施方式】
[0022]為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0023]本申請實施例適用于包含多個處理節點的集群系統。
[0024]圖1是本申請實施例一的技術流程圖,結合圖1,本申請實施例一種負載均衡的方法,主要包括如下的步驟:
[0025]步驟S110、領導節點獲取處理節點的負載能力信息;
[0026]具體的,在步驟SllO中,所述領導節點(leader)是從數據處理系統中,根據預設規則從啟動狀態下的處理節點中選出來的,其功能在于,獲取所述數據處理系統中其他處理節點的負載能力信息并進行數據處理任務的分配。此處所述的處理節點均指啟動狀態下、能夠進行任務處理的節點,后續不再贅述。具體的,所述負載能力信息包括處于啟動狀態下的所述處理節點的數量、每一所述處理節點當前正在處理的連接數量、每一所述處理節點的最快響應時間、每一所述處理節點的歷史處理性能等能夠表征所述處理節點處理能力的?目息O
[0027]步驟S120、所述領導節點根據所述負載能力信息均衡分配待處理任務。
[0028]具體的,在步驟S120中,所述領導節點均衡分配所述待處理任務,根據已啟動的所述處理節點的所述負載能力信息,采用預設算法對所述待處理任務進行均衡分配;其中,所述預設算法包括:一致性哈希算法、隨機算法、輪循算法、加權輪循算法、動態輪循算法、最快算法、最少連接算法、預判算法中的任意組合。
[0029]其中,所述隨機算法具體為,隨機地把負載分配到各個可用的處理節點上,通過隨機數生成算法選取一個處理節點用于任務處理。
[0030]其中,所述輪循算法為,按順序把每個新的連接請求分配給下一個處理節點,最終把所有請求平分給所有的處理節點。
[0031]所述加權輪循算法中,每個機器接受的連接數量是按權重比例分配的。這是對上述輪循算法的改進,例如,當一處理節點的處理能力是另一處理節點的兩倍,那么所述領導節點會把兩倍的連接數量分配給所述另一處理節點。
[0032]所述動態輪詢,類似于上述加權輪循,其不同之處在于,動態輪循的權重值基于對各個處理節點的持續監控獲取的,并且是不斷更新的。這是一個動態負載均衡算法,基于處理節點的實時性能分析分配連接,比如每個節點的當前連接數或者節點的最快響應時間等。
[0033]所述最快算法基于所有處理節點中的最快響應時間分配連接,尤其適用于處理節點跨不同網絡的環境中。
[0034]所述最少連接算法是將新的任務處理連接分配給當前連接數目最少的處理節點。
[0035]除上述算法之外,本申請實施例中,所述預設算法還可以是上述多種算法的結合使用,例如,觀察算法,同時利用最小連接算法和最快算法來實施負載均衡。處理節點根據當前的連接數和最快響應時間得到一個分數,分數較高代表性能較好,會得到更多的連接。
[0036]本申請實施例的所述預設算法還可以包括所述預判算法,所述預判算法使用上述觀察算法來計算分數,分析分數的變化趨勢來判斷某一處理節點的性能正在改善還是降低。具有改善趨勢的處理節點會得到更多的連接。
[0037]本申請實施例的技術方案中,在選擇負載均衡算法時,優先選擇所述一致性哈希算法。
[0038]所述一致性哈希算法(consistent hashing)是對簡單哈希算法的糾正算法,其實現過程如下:
[0039]步驟S121、將處理節點所在系統的整體計算能力抽象為一個環,對每一所述處理節點進行第一次哈希值計算,并按照得到的哈希值將每一所述處理節點映射至所述環上。
[0040 ] 如圖1 -1中的1、2、3三個節點就可以理解為三個可以執行任務處理的處理節點;
[0041]步驟SI22、對所述待處理任務進行第二次所述哈希值計算,并根據得到的哈希值,按順時針方向將所述待處理任務映射至所述環上與其哈希值最接近的節點上去。
[0042]例如,本申請實施例中,某一待處理任務的哈希值計算結果與所述環上處理節點3的哈希值最接近,則將這一待處理任務映射至處理節點3上,由處理節點3執行這一待處理任務。
[0043]當處理節點數量較少時,節點在環上分布不夠均勻,會導致待處理任務在分配時不能充分考慮每一處理節點的負載能力。本申請實施例為進一步優化負載均衡,引入為處理節點設置對應的虛擬節點,而每個處理節點可以對應若干個虛擬節點。
[0044]如圖1-1的圖中所示,處理節點1、2、3、4分布不均勻。假定四個處理節點型號相同,假設處理節點4的當前負載量最小,處理節點當前3負載量最大。為了負載均衡,可以為處理節點4引入虛擬節點4” ’,如圖1-2所示。按照步驟S122中的方法,將待處理任務分配至五個處理節點上,虛擬節點4”’分配到的待處理任務實際上分配在了物理處理節點4上。如此,在一定程度上實現了原本四個物理處理節點的負載均衡。
[0045]本實施中,通過根據獲取到的處理節點的負載能力信息均衡分配待處理任務,改變了現有技術中進行任務處理時,搶占式的任務分配造成的各處理節點負載失衡的缺陷,實現了所有處理節點的負載均衡以及高可用性,避免單節點壓力大、其他節點資源浪費,提高系統的整體性能和穩定。
[0046]圖2是本申請實施例二的技術六層圖,結合圖2,本申請實施例一種負載均衡的方法,還可以有如下的實施方式:
[0047]步驟S210、在至少兩個所述處理節點中,采用預設規則選取領導節點;
[0048]具體的,本申請實施例中,所述領導節點的選取可以通過ZooKeeper進行選取。
[0049]ZooKeeper運行在集群系統上,是一個分布式的應用程序協調服務,以Fast Paxos算法為基礎,實現同步服務,配置維護和命名服務等分布式應用。
[°°50] 以Canal工具為例,進行所述領導節點選取時,首先在ZooKeeper目錄/Canal/nodes 下創建 SEQUENCE、EPHEMERAL 類型的子目錄/Canal/nodes/n_,SEQUENCE 類型會使ZooKeeper自動在子目錄名字后面加上編號后綴,該編號大于此前已經存在的所有編號(例如,創建的子目錄為/Canal/nodes/nJWOOOOOOOShEPHEMERAL類型會使集群中的節點在與ZooKeeper斷開連接后,自己所創建的子目錄自動被刪除。節點讀取ZooKeeper的/Canal/nodes/這個目錄下的所有子目錄,如果發現自己所創建的編號是最小的,自己就是領導。如果自己不是最小的,就在比自己小的最大的子目錄上設置watcher監聽,如果收到watcher通知,說明監聽的那個目錄的客戶端已經死了,自己重新讀取所有子目錄,重新判斷自己是否成為了領導。
[0051]需要說明的是,本申請實施例中,所述領導節點并非是固定的,若當前的所述領導節點出現異常,例如宕機或者進程異常,則剩余的處理節點會按照所述預設規則重新選舉出一個新的領導節點,從而保證了系統的后續負載均衡。
[0052]步驟S220、所述領導節點獲取處理節點的負載能力信息;
[0053]步驟S230、所述領導節點根據所述負載能力信息均衡分配待處理任務。
[0054]步驟S220?步驟S230同實施例一中所述,此處不再贅述。
[0055]步驟S240、所述領導節點將所述均衡分配的結果保存至預設目錄;
[0056]所述預設目錄中保存有所述待處理任務的分配結果,S卩,每一所述處理節點與目標待處理任務的對應關系。例如,在Canal進行數據同步時,通過對增量日志的解析獲取待同步的數據為M,所述領導節點將M分配至4個處理節點,假設,將Ml分配給第一處理節點進行處理,將M2分配給第二處理節點進行處理、將M3分配給第三處理節點進行處理、將M4分配給第四處理節點進行處理,則在所述預設目錄中將保存有Ml?M4與上述四個節點的對應關系。例如,在ZooKeeper中,所述預設目錄可以為/Canal/node2instances。
[0057]步驟S250、所述處理節點監聽所述預設目錄,獲取需執行的目標待處理任務。
[0058]本申請實施例中,所述預設目錄中保存有每一所述處理節點被分配的目標處理任務,所述處理節點通過監聽所述預設目錄(例如,監聽如下ZooKeeper目錄:/ Canal/noddinstances)就能夠獲取任務分配結果,在獲取目標處理任務后,啟動工作線程執行任務處理。
[0059]根據步驟S220?步驟S230的執行結果,所述預設目錄中的任務分配結果充考慮了系統中每一處理節點的負載能力,避免了單個處理節點壓力大、其他處理節點資源浪費的狀況。
[0060]優選的,在步驟250之前,本申請實施例進一步還包括步驟S260。
[0061 ] 步驟S260、為每一所述目標待處理任務鎖定相應的所述處理節點,從而避免多個處理節點重復執行同一所述目標待處理任務。
[0062]當系統中包含有多個處理節點時,對于同一待處理任務,可能會出現多個處理節點執行同一待處理任務的情景,這樣會導致重復處理,浪費節點資源。因此,采用任務鎖,將一個目標待處理任務鎖定一個處理節點進程處理,可以很好地避免上述缺陷。
[0063]具體的,每一處理節點的所述工作線程在執行目標任務處理前,可以通過如下ZooKeeper目錄:/ Canal/locks/$ {instanceName}獲取任務鎖,避免多節點重復處理。
[0064]本實施例中,每一處理節點通過監聽領導節點對待處理任務的分配結果獲取被分配執行的目標待處理任務,無需人工干預就能夠實現多個處理節點的負載均衡,保證了系統的高可用以及高效率;與此同時,任務鎖機制良好地避免了多點重復處理的可能性,進一步提升了系統的處理能力。
[0065]圖3是本申請實施例三的技術流程圖,結合圖3,本申請實施例還包括如下可行的實施方式:
[0066]步驟S310、在至少兩個所述處理節點中,采用預設規則選取領導節點;
[0067]步驟S320、所述領導節點獲取處理節點的負載能力信息;
[0068]步驟S330、所述領導節點根據所述負載能力信息均衡分配待處理任務。
[0069]步驟S340、所述領導節點將所述均衡分配的結果保存至預設目錄;
[0070]步驟S350、所述處理節點監聽所述預設目錄,獲取需執行的目標待處理任務;
[0071]步驟S360、所述領導節點在監聽到所述處理節點的變化時,根據變化后的所述處理節點重新均衡分配所述待處理任務以更新所述預設目錄。
[0072]本步驟中,所述領導節點對處理節點的實時監聽可以通過ZooKeeper實現。ZooKeeper支持watch (觀察)的概念,可以系統在每個處理結點上設置一個觀察。如果被觀察系統的處理結點有變更(連接斷開),那么watch就會被觸發,watch所屬的領導節點將接收到一個通知包被告知某一結點已經發生變化。
[0073]當系統的處理節點發生變化后(可能因為宕機或者進程掛掉),部分原屬于發生變化的節點的處理任務將無法繼續執行,領導節點監聽到這一異常,會根據步驟S320?步驟S330根據剩余的處理節點重新進行待處理任務的均衡分配。
[0074]在另一種可能的情境下,系統中新增若干處理節點,為了不空閑這些新增處理節點的處理資源并提高系統效率,所述領導節也會根據步驟S320?步驟S330根據剩余的處理節點重新進行待處理任務的均衡分配以實現更好的負載均衡。
[0075]本實施例中,通過領導節點對處理節點進行實時監聽,并在系統添加新的處理節點、處理節點宕機或進程異常退出等原因掛掉后,重新分配待處理任務,無需人工干預,自動達到新的負載均衡,進一步提高了系統的可用性,保障了高效的數據處理。
[0076]圖4是本申請實施例一種負載均衡裝置的裝置結構示意圖,結合圖4,所述裝置包括:信息獲取模塊41、任務分配模塊42、任務鎖模塊43、更新模塊44、領導節點選取模塊45。
[0077]所述信息獲取模塊41,用于領導節點獲取處理節點的負載能力信息;
[0078]所述任務分配模塊42,用于所述領導節點根據所述負載能力信息均衡分配待處理任務。
[0079]進一步地,所述任務分配模塊42還用于:將所述均衡分配的結果存放至預設目錄;其中,所述預設目錄被所述處理節點監聽以獲取并執行所述均衡分配的結果中的目標待處理任務。
[0080]進一步地,所述裝置還包括任務鎖模塊43,所述任務鎖模塊43用于,在所述獲取并執行所述均衡分配的結果中的目標待處理任務之前,為每一所述目標待處理任務鎖定相應的所述處理節點,從而避免多個處理節點重復執行同一所述目標待處理任務。
[0081]進一步地,所述裝置還包括更新模塊44,所述更新模塊44用于:所述領導節點在監聽到所述處理節點的變化時,根據變化后的所述處理節點重新均衡分配所述待處理任務以更新所述預設目錄。
[0082]進一步地,所述任務分配模塊42用于:所述領導節點根據已啟動的所述處理節點的所述負載能力信息,采用預設算法對所述待處理任務進行均衡分配;其中,所述預設算法包括:一致性哈希算法、隨機算法、輪循算法、加權輪循算法、動態輪循算法、最快算法、最少連接算法、預判算法中的任意組合。
[0083]進一步地,所述裝置還包括領導節點選取模塊45,所述領導節點選取模35塊用于:在至少兩個所述處理節點中,采用預設規則選取所述領導節點。
[0084]進一步地,所述領導節點選取模塊45還用于:當所述領導節點異常時,采用所述預設規則選擇新的所述領導節點。
[0085]本實施中,所述任務分配模塊通過根據所述信息獲取模塊獲取到的處理節點的負載能力信息均衡分配待處理任務,改變了現有技術中進行任務處理時,搶占式的任務分配造成的各處理節點負載失衡的缺陷,實現了所有處理節點的負載均衡以及高可用性,避免單節點壓力大、其他節點資源浪費,提高系統的整體性能和穩定。
[0086]以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。本領域普通技術人員在不付出創造性的勞動的情況下,即可以理解并實施。
[0087]通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到各實施方式可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件。基于這樣的理解,上述技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品可以存儲在計算機可讀存儲介質中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機裝置(可以是個人計算機,服務器,或者網絡裝置等)執行各個實施例或者實施例的某些部分所述的方法。
[0088]最后應說明的是:以上實施例僅用以說明本發明的技術方案,而非對其限制;盡管參照前述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發明各實施例技術方案的精神和范圍。
【主權項】
1.一種負載均衡的方法,其特征在于,包括: 領導節點獲取處理節點的負載能力信息; 所述領導節點根據所述負載能力信息均衡分配待處理任務。2.根據權利要求1所述的方法,其特征在于,所述方法還包括: 將所述均衡分配的結果存放至預設目錄;其中,所述預設目錄被所述處理節點監聽以獲取并執行所述均衡分配的結果中的目標待處理任務。3.根據權利要求2所述的方法,其特征在于,在所述獲取并執行所述均衡分配的結果中的目標待處理任務之前,所述方法還包括: 為每一所述目標待處理任務鎖定相應的所述處理節點,從而避免多個處理節點重復執行同一所述目標待處理任務。4.根據權利要求2所述的方法,其特征在于,所述方法還包括: 所述領導節點在監聽到所述處理節點的變化時,根據變化后的所述處理節點重新均衡分配所述待處理任務以更新所述預設目錄。5.根據權利要求1或4所述的方法,其特征在于,所述均衡分配所述待處理任務,包括: 所述領導節點根據已啟動的所述處理節點的所述負載能力信息,采用預設算法對所述待處理任務進行均衡分配;其中,所述預設算法包括:一致性哈希算法、隨機算法、輪循算法、加權輪循算法、動態輪循算法、最快算法、最少連接算法、預判算法中的任意組合。6.根據權利要求1所述的方法,其特征在于,所述領導節點是在至少兩個所述處理節點中,采用預設規則選取的。7.根據權利要求6所述的方法,其特征在于,當所述領導節點異常時,采用所述預設規則選擇新的所述領導節點。8.一種負載均衡的裝置,其特征在于,包括: 信息獲取模塊,用于領導節點獲取處理節點的負載能力信息; 任務分配模塊,用于所述領導節點根據所述負載能力信息均衡分配待處理任務。9.根據權利要求8所述的裝置,其特征在于,所述任務分配模塊還用于: 將所述均衡分配的結果存放至預設目錄;其中,所述預設目錄被所述處理節點監聽以獲取并執行所述均衡分配的結果中的目標待處理任務。10.根據權利要求9所述的裝置,其特征在于,所述裝置還包括任務鎖模塊,所述任務鎖模塊用于, 在所述獲取并執行所述均衡分配的結果中的目標待處理任務之前,為每一所述目標待處理任務鎖定相應的所述處理節點,從而避免多個處理節點重復執行同一所述目標待處理任務。11.根據權利要求9所述的裝置,其特征在于,所述裝置還包括更新模塊,所述更新模塊用于: 所述領導節點在監聽到所述處理節點的變化時,根據變化后的所述處理節點重新均衡分配所述待處理任務以更新所述預設目錄。12.根據權利要求8或11所述的裝置,其特征在于,所述任務分配模塊用于: 所述領導節點根據已啟動的所述處理節點的所述負載能力信息,采用預設算法對所述待處理任務進行均衡分配;其中,所述預設算法包括:一致性哈希算法、隨機算法、輪循算法、加權輪循算法、動態輪循算法、最快算法、最少連接算法、預判算法中的任意組合。13.根據權利要求8所述的裝置,其特征在于,所述裝置還包括,領導節點選取模塊,所述領導節點選取模塊用于: 在至少兩個所述處理節點中,采用預設規則選取所述領導節點。14.根據權利要求13所述的裝置,其特征在于,所述領導節點選取模塊還用于: 當所述領導節點異常時,采用所述預設規則選擇新的所述領導節點。
【文檔編號】H04L29/08GK105939389SQ201610499271
【公開日】2016年9月14日
【申請日】2016年6月29日
【發明人】喬清杰, 劉宏斌, 國鐵龍
【申請人】樂視控股(北京)有限公司, 樂視網信息技術(北京)股份有限公司