多協(xié)議棧負(fù)載均衡方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,特別是涉及一種多協(xié)議棧負(fù)載均衡方法及裝置。
【背景技術(shù)】
[0002]云計算的快速發(fā)展,使得計算的工作越來越集中在數(shù)據(jù)中心完成,而終端更多的是利用網(wǎng)絡(luò)快速的將請求的任務(wù)發(fā)送到數(shù)據(jù)中心,所以終端對計算能力的需求在降低,而對網(wǎng)絡(luò)能力的需求在增加。而協(xié)議棧作為應(yīng)用和物理網(wǎng)絡(luò)之間的橋梁卻沒有得到快速發(fā)展,已經(jīng)逐漸成為了兩者之間的瓶頸。多個協(xié)議棧組合處理單個或者多個端口的擴展方式已經(jīng)成為必然。此時,要采用分流算法將屬于相同連接的數(shù)據(jù)包轉(zhuǎn)發(fā)給不同的協(xié)議棧,由于所有協(xié)議棧共用一個分發(fā)模塊,不算是真正的并行處理,容易在分發(fā)模塊處出現(xiàn)性能瓶頸。
[0003]現(xiàn)在商用1G網(wǎng)卡大部分具備有RSS (Receive Side Scaling,接收方擴展)等分流功能,通過對接收的網(wǎng)絡(luò)數(shù)據(jù)包基于三元組/五元組進(jìn)行哈希(hash),完成硬件分流的任務(wù),將屬于同一個連接的數(shù)據(jù)包發(fā)給網(wǎng)卡的同一個RSS網(wǎng)卡收隊列,即發(fā)給同一個協(xié)議棧實例來處理。如圖1所示,每個網(wǎng)卡接口 100有多個協(xié)議棧,如協(xié)議棧0,協(xié)議棧1、協(xié)議棧2、協(xié)議棧3,每個協(xié)議棧綁定至少I個RSS網(wǎng)卡收、發(fā)隊列,RSS網(wǎng)卡收隊列由對應(yīng)的協(xié)議棧處理。例如,通常通過防火墻網(wǎng)關(guān)發(fā)出的數(shù)據(jù)包具有相同的IP (Internet Protocol,網(wǎng)絡(luò)協(xié)議),如果網(wǎng)卡的RSS分流只是基于源、目的IP以及協(xié)議三元組來進(jìn)行哈希(hash)分流的話,這些通過同一個網(wǎng)關(guān)的數(shù)據(jù)包很可能分配到了同一個RSS網(wǎng)卡收隊列,導(dǎo)致和該隊列相連的協(xié)議??赡艽嬖谶^載的情況。因此,基于數(shù)據(jù)包的三元組/五元組進(jìn)行簡單hash分流,存在不能通過感知協(xié)議棧的真實負(fù)載情況進(jìn)行靈活的負(fù)載均衡分發(fā)的缺點。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實施方式提供一種多協(xié)議棧負(fù)載均衡方法及裝置,能夠在多協(xié)議棧環(huán)境下,通過對協(xié)議棧以及應(yīng)用的負(fù)載感知,與RSS網(wǎng)卡收/發(fā)隊列、流表匹配相結(jié)合,實現(xiàn)協(xié)議棧的負(fù)載均衡,減少了 CPU的數(shù)據(jù)分發(fā)開銷。
[0005]第一方面提供一種多協(xié)議棧負(fù)載均衡方法,該方法包括:響應(yīng)應(yīng)用的請求創(chuàng)建第一套接字并部署在所有的協(xié)議棧上;接收請求連接的數(shù)據(jù)包;判斷請求連接的數(shù)據(jù)包的協(xié)議類型,如果協(xié)議類型是傳輸控制協(xié)議,則:創(chuàng)建第二套接字以建立會話連接;根據(jù)每個協(xié)議棧的負(fù)載情況,為第二套接字選擇一個協(xié)議棧;在第二套接字的數(shù)據(jù)包通過網(wǎng)卡的默認(rèn)分流規(guī)則不能把數(shù)據(jù)包分流到選擇的協(xié)議棧所綁定的接收方擴展RSS網(wǎng)卡收隊列上時,根據(jù)網(wǎng)卡的分流策略在網(wǎng)卡上創(chuàng)建匹配流表,并在接收到數(shù)據(jù)包后,把接收的第二套接字的數(shù)據(jù)包分流到RSS網(wǎng)卡收隊列上;進(jìn)行第二套接字與選擇的協(xié)議棧間的數(shù)據(jù)包分發(fā)。
[0006]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,還包括:會話結(jié)束后,釋放第二套接字,并刪除網(wǎng)卡上創(chuàng)建的匹配流表。
[0007]結(jié)合第一方面,在第一方面的第二種可能的實現(xiàn)方式中,如果協(xié)議類型是用戶數(shù)據(jù)報協(xié)議,則:由收到請求連接的數(shù)據(jù)包的協(xié)議棧進(jìn)行協(xié)議處理。
[0008]結(jié)合第一方面,在第一方面的第三種可能的實現(xiàn)方式中,在響應(yīng)應(yīng)用的請求創(chuàng)建第一套接字并部署在所有的協(xié)議棧上的步驟之前,對網(wǎng)卡和所有的協(xié)議棧進(jìn)行初始化配置,包括:讀取并存儲網(wǎng)卡的硬件配置信息;獲取用戶配置信息,并結(jié)合硬件配置信息形成網(wǎng)卡配置策略,寫入網(wǎng)卡;啟動多個協(xié)議棧,并根據(jù)網(wǎng)卡配置策略,為每個協(xié)議棧至少綁定一個RSS網(wǎng)卡收隊列以及一個RSS網(wǎng)卡發(fā)隊列。
[0009]結(jié)合第一方面,在第一方面的第四種可能的實現(xiàn)方式中,響應(yīng)應(yīng)用的請求創(chuàng)建第一套接字并部署在所有的協(xié)議棧上包括:調(diào)用應(yīng)用編程接口創(chuàng)建第一套接字;第一套接字創(chuàng)建后,調(diào)用bind函數(shù)將第一套接字綁定到特定的IP地址,并調(diào)用listen函數(shù)監(jiān)聽指定端口的數(shù)據(jù)包請求;收到第一套接字的監(jiān)聽方法調(diào)用時,將第一套接字部署在所有的協(xié)議棧上。
[0010]結(jié)合第一方面,在第一方面的第五種可能的實現(xiàn)方式中,創(chuàng)建第二套接字以建立會話連接的步驟包括:根據(jù)各協(xié)議棧的網(wǎng)絡(luò)運行的實際情況,創(chuàng)建第二套接字。
[0011]結(jié)合第一方面,在第一方面的第六種可能的實現(xiàn)方式中,創(chuàng)建第二套接字以建立會話連接的步驟包括:將接收的對端發(fā)送的請求連接的數(shù)據(jù)包轉(zhuǎn)給應(yīng)用;待應(yīng)用確認(rèn)后創(chuàng)建第二套接字。
[0012]結(jié)合第一方面,在第一方面的第七種可能的實現(xiàn)方式中,會話結(jié)束包括接收并響應(yīng)應(yīng)用下發(fā)的釋放第二套接字的請求,或者接收并響應(yīng)對端發(fā)送的連接釋放請求。
[0013]第二方面提供一種多協(xié)議棧負(fù)載均衡方法,該方法包括:創(chuàng)建第一套接字,并根據(jù)每個協(xié)議棧的負(fù)載情況,為第一套接字選擇一個協(xié)議棧以建立會話連接;若第一套接字的數(shù)據(jù)包通過網(wǎng)卡的默認(rèn)分流規(guī)則不能分流到協(xié)議棧所綁定的接收方擴展RSS網(wǎng)卡收隊列上,則根據(jù)網(wǎng)卡的分流策略在網(wǎng)卡上創(chuàng)建匹配流表,并在接收到數(shù)據(jù)包后,把接收的數(shù)據(jù)包分流到RSS網(wǎng)卡收隊列上;進(jìn)行第一套接字與選擇的協(xié)議棧間的數(shù)據(jù)包分發(fā)。
[0014]結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,還包括:會話結(jié)束后,釋放第一套接字,并刪除網(wǎng)卡上創(chuàng)建的匹配流表
[0015]結(jié)合第二方面,在第二方面的第二種可能的實現(xiàn)方式中,在創(chuàng)建第一套接字之前,對網(wǎng)卡和所有的協(xié)議棧進(jìn)行初始化配置,包括:讀取并存儲網(wǎng)卡的硬件配置信息;獲取用戶配置信息,并結(jié)合硬件配置信息形成網(wǎng)卡配置策略,寫入網(wǎng)卡;啟動多個協(xié)議棧,并根據(jù)網(wǎng)卡配置策略,為每個協(xié)議棧至少綁定一個RSS網(wǎng)卡收隊列以及一個RSS網(wǎng)卡發(fā)隊列。
[0016]結(jié)合第二方面,在第二方面的第三種可能的實現(xiàn)方式中,會話結(jié)束包括接收并響應(yīng)應(yīng)用下發(fā)的釋放第一套接字的請求,或者接收并響應(yīng)對端發(fā)送的連接釋放請求。
[0017]第三方面提供一種多實例協(xié)議棧負(fù)載均衡裝置,該裝置包括:協(xié)議棧模塊、網(wǎng)卡、數(shù)據(jù)分發(fā)模塊以及負(fù)載均衡模塊,協(xié)議棧模塊包括多個協(xié)議棧,其中:數(shù)據(jù)分發(fā)模塊,用于響應(yīng)應(yīng)用的請求創(chuàng)建第一套接字并部署在所有的協(xié)議棧上;協(xié)議棧模塊,用于接收請求連接的數(shù)據(jù)包,判斷請求連接的數(shù)據(jù)包的協(xié)議類型;數(shù)據(jù)分發(fā)模塊,用于,如果協(xié)議類型是傳輸控制協(xié)議,則創(chuàng)建第二套接字以建立會話連接;負(fù)載均衡模塊,用于,如果協(xié)議類型是傳輸控制協(xié)議,則根據(jù)每個協(xié)議棧的負(fù)載情況,為第二套接字選擇一個協(xié)議棧,并在第二套接字的數(shù)據(jù)包通過網(wǎng)卡的默認(rèn)分流規(guī)則不能分流到選擇的協(xié)議棧所綁定的接收方擴展RSS網(wǎng)卡收隊列上時,根據(jù)網(wǎng)卡的分流策略在網(wǎng)卡上創(chuàng)建匹配流表,并在接收到數(shù)據(jù)包后,把接收的第二套接字的數(shù)據(jù)包分流到RSS網(wǎng)卡收隊列上;數(shù)據(jù)分發(fā)模塊,還用于進(jìn)行第二套接字與選擇的協(xié)議棧間的數(shù)據(jù)包分發(fā)。
[0018]結(jié)合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,在會話結(jié)束后,協(xié)議棧模塊,還用于,控制選擇的協(xié)議棧釋放第二套接字;負(fù)載均衡模塊,還用于刪除網(wǎng)卡上創(chuàng)建的匹配流表。
[0019]結(jié)合第三方面,在第三方面的第二種可能的實現(xiàn)方式中,協(xié)議棧模塊,還用于,如果協(xié)議類型是用戶數(shù)據(jù)報協(xié)議,則控制收到請求連接的數(shù)據(jù)包的協(xié)議棧進(jìn)行協(xié)議處理。
[0020]結(jié)合第三方面,在第三方面的第三種可能的實現(xiàn)方式中,負(fù)載均衡模塊,還用于對網(wǎng)卡和所有的協(xié)議棧進(jìn)行初始化配置,包括:具體用于讀取并存儲網(wǎng)卡的硬件配置信息,獲取用戶配置信息并結(jié)合硬件配置信息形成網(wǎng)卡配置策略,寫入網(wǎng)卡;協(xié)議棧模塊,還用于啟動多個協(xié)議棧,并根據(jù)網(wǎng)卡配置策略,為每個協(xié)議棧至少綁定一個RSS網(wǎng)卡收隊列以及一個RSS網(wǎng)卡發(fā)隊列。
[0021]結(jié)合第三方面,在第三方面的第四種可能的實現(xiàn)方式中,數(shù)據(jù)分發(fā)模塊,用于響應(yīng)應(yīng)用的請求創(chuàng)建第一套接字并部署在所有的協(xié)議棧上,具體為:數(shù)據(jù)分發(fā)模塊用于響應(yīng)應(yīng)用調(diào)用應(yīng)用編程接口的通知創(chuàng)建第一套接字,并接收第一套接字的監(jiān)聽方法調(diào)用,其中,第一套接字創(chuàng)建后,應(yīng)用調(diào)用bind函數(shù)將第一套接字綁定到特定的IP地址,并調(diào)用listen函數(shù)監(jiān)聽指定端口的數(shù)據(jù)包請求;負(fù)載均衡模塊,還用于通知各協(xié)議棧將第一套接字部署在所有的協(xié)議棧上。
[0022]結(jié)合第三方面,在第三方面的第五種可能的實現(xiàn)方式中,數(shù)據(jù)分發(fā)模塊用于創(chuàng)建第二套接字以建立會話連接,具體為:用于根據(jù)各協(xié)議棧的網(wǎng)絡(luò)運行的實際情況,創(chuàng)建第二套接字。
[0023]結(jié)合第三方面,在第三方面的第六種可能的實現(xiàn)方式中,協(xié)議棧模塊用于創(chuàng)建第二套接字以建立會話連接,具體為:用于將接收的對端發(fā)送的請求連接的數(shù)據(jù)包轉(zhuǎn)給應(yīng)用;所述數(shù)據(jù)分發(fā)模塊,用于待應(yīng)用確認(rèn)后創(chuàng)建第二套接字。
[0024]結(jié)合第三方面,在第三方面的第七種可能的實現(xiàn)方式中,數(shù)據(jù)分發(fā)模塊接收并響應(yīng)應(yīng)用下發(fā)的釋放第二套接字的請求,或者協(xié)議棧模塊接收并響應(yīng)對端發(fā)送的連接釋放請求,則表示會話結(jié)束。
[0025]第四方面提供一種多實例協(xié)議棧負(fù)載均衡裝置,該裝置包括:協(xié)議棧模塊、網(wǎng)卡、數(shù)據(jù)分發(fā)模塊以及負(fù)載均衡模塊,協(xié)議棧模塊包括多個協(xié)議棧,其中:數(shù)據(jù)分發(fā)模塊,用于創(chuàng)建第一套接字;負(fù)載均衡模塊,用于根據(jù)每個協(xié)議棧的負(fù)載情況,為第一套接字選擇一個協(xié)議棧以建立會話連接,若第一套接字的數(shù)據(jù)包通過網(wǎng)卡的默認(rèn)分流規(guī)則不能分流到協(xié)議棧所綁定的接收方擴展RSS網(wǎng)卡收隊列上,則根據(jù)網(wǎng)卡的分流策略在網(wǎng)卡上創(chuàng)建匹配流表,并在接收到數(shù)據(jù)包后,把接收的數(shù)據(jù)包分流到RSS網(wǎng)卡收隊列上;數(shù)據(jù)分發(fā)模塊,還用于進(jìn)行第一套接字與選擇的協(xié)議棧間的數(shù)據(jù)包分發(fā)。
[0026]結(jié)合第四方面,在第四方面的第一種可能的實現(xiàn)方式中,在會話結(jié)束后,協(xié)議棧模塊,用于控制選擇的協(xié)議棧釋放第一套接字;負(fù)載均衡模塊,還用于刪除網(wǎng)卡上創(chuàng)建的匹配流表。
[0027]結(jié)合第四方面,在第四方面的第二種可能的實現(xiàn)方式中,負(fù)載均衡模塊,還用于對網(wǎng)卡和所有的協(xié)議棧進(jìn)行初始化配置,包括:具體用于讀取并存儲網(wǎng)卡的硬件配置信息,獲取用戶配置信息并結(jié)合硬件配置信息形成網(wǎng)卡配置策略,寫入網(wǎng)卡;協(xié)議棧模塊,還用于啟動多個協(xié)議棧,并根據(jù)網(wǎng)卡配置策略,為每個協(xié)議棧至少綁定一個RSS網(wǎng)卡收隊列以及一個RSS網(wǎng)卡發(fā)隊列。
[0028]結(jié)合第四方面,在第四方面的第三種可能的實現(xiàn)方式中,數(shù)據(jù)分發(fā)模塊接收并響應(yīng)應(yīng)用下發(fā)的釋放第一套接字的請求,或者協(xié)議棧模塊接收并響應(yīng)對端發(fā)送的連接釋放請求,則表示會話結(jié)束。
[0029]本發(fā)明實施方式提供的多協(xié)議棧負(fù)載均衡方法及裝置,通過響應(yīng)應(yīng)用的請求創(chuàng)建第一套接字并部署在所有的協(xié)議棧上;在接收請求連接的數(shù)據(jù)包后,如果請求連接的數(shù)據(jù)包的協(xié)議類型是傳輸控制協(xié)議,則創(chuàng)建第二套接字以建立會話連接;并根據(jù)每個協(xié)議棧的負(fù)