本發明涉及通信技術領域,更具體地說,涉及一種負載均衡裝置和方法。
背景技術:
在市場上普遍使用的是通過NGNIX來進行軟件上的負載均衡,當網站的規模較大時,往往會進行服務的拆分,各個服務獨立部署,并通過遠程調用的方式來進行協同工作。隨著系統的繼續擴大和演進,服務器的數量會增多,相對應的NGNIX軟件的數量也會增多,其相應的NGNIX部署與配置工作也會增加,這會導致維護成本變高,單點故障的風險也隨之增加。
技術實現要素:
本發明要解決的技術問題在于如何避免現有技術中通過NGNIX來進行軟件上的負載均衡而導致的維護成本高,故障風險大的問題;針對該技術問題,提供一種負載均衡裝置,包括:
監控模塊,用于通過分布式服務框架集群監控各個服務器;
接收模塊,用于接收來自客戶端的接入請求;
發送模塊,用于根據所述客戶端的接入請求將相應的所述服務器的服務列表發送至所述客戶端;
接入模塊,用于根據所述服務列表將客戶端接入相應的所述服務器。
可選的,還包括注冊模塊,用于在各個所述服務器中編寫分布式服務框架的注冊代碼,并基于所述注冊代碼向分布式服務框架集群進行注冊;注冊成功后,接收所述分布式服務框架集群的監控。
可選的,所述注冊模塊還用于:在所述服務器啟動時,通過所述注冊代碼調用分布式服務框架集群,直接向所述分布式服務框架集群注冊所述服務器的服務器信息。
可選的,所述監控模塊還用于:
監控各所述服務器與所述分布式服務框架集群的連接情況,并將連接失敗的所述服務器從所述服務列表中移除。
可選的,還包括緩存模塊,用于將所述服務列表緩存至所述客戶端中。
本發明還提供一種負載均衡方法,包括:
通過分布式服務框架集群監控各個服務器;
接收來自客戶端的接入請求,并根據所述客戶端的接入請求將相應的所述服務器的服務列表發送至所述客戶端;
根據所述服務列表將所述客戶端接入相應的所述服務器。
可選的,在所述通過分布式服務框架集群監控各個服務器之前,還包括:在各個所述服務器中編寫分布式服務框架的注冊代碼,并基于所述注冊代碼向分布式服務框架集群進行注冊;注冊成功后,接受所述分布式服務框架集群的監控。
可選的,所述基于所述注冊代碼向分布式服務框架集群進行注冊包括:在所述服務器啟動時,通過所述注冊代碼調用分布式服務框架集群,直接向所述分布式服務框架集群注冊所述服務器的服務器信息。
可選的,所述通過分布式服務框架集群監控各個服務器包括:
監控各所述服務器與所述分布式服務框架集群的連接情況,并將連接失敗的所述服務器從所述服務列表中移除。
可選的,在所述根據所述客戶端的接入請求將相應的所述服務器的服務列表發送至所述客戶端之后,還包括:將所述服務列表緩存至所述客戶端中。
有益效果
本發明提供了一種負載均衡裝置和方法,通過分布式服務框架集群監控各個服務器,接收來自客戶端的接入請求,并根據接入請求將相應的服務器的服務列表發送給客戶端,然后根據服務列表將客戶端接入相應的服務器。通過本發明的實施,通過分布式服務框架集群可以減少單點故障,同時也降低了維護所需的成本,此外,分布式服務框架集群不需要動態的配置相關信息,節約了大量的時間。
附圖說明
下面將結合附圖及實施例對本發明作進一步說明,附圖中:
圖1為本發明第一實施例提供的負載均衡裝置組成示意圖;
圖2為本發明第一實施例提供的通過zookeeper集群監控各個服務器的示意圖;
圖3為本發明第二實施例提供的負載均衡方法流程圖;
圖4為本發明第三實施例提供的負載均衡方法流程圖。
具體實施方式
應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。
實施例一
圖1為本實施例一提供的一種負載均衡裝置組成示意圖,具體包括:
監控模塊101,用于通過分布式服務框架(zookeeper)集群監控各個服務器;
接收模塊102,用于接收來自客戶端的接入請求;
發送模塊103,用于根據客戶端的接入請求將相應的服務器的服務列表發送客戶端;
接入模塊104,用于根據服務列表將客戶端接入相應的服務器。
zookeeper是一個分布式的,開放源碼的分布式應用程序協調服務,它是一個為分布式應用提供一致性服務器的軟件,提供的功能包括但不限于:配置維護、域名服務、分布式同步、組服務等等。以配置維護為例,當一組代碼應用于多個服務器時,由于各個服務器的ip地址、接口等的差異,實際配置文件是不盡相同的,通過zookeeper集群則可以直接根據不同的服務器編寫配置文件,無需再一一寫入相應的配置文件。
在本實施例中,通過zookeeper集群監控各個服務器,即利用zookeeper與各個服務器相連,監測各個服務器的當前的狀態,包括服務器的運行情況、ip地址、端口信息等等,其中,服務器的運行情況包括正常運行和連接失敗等等,當某臺服務器與zookeeper之間不可達,死機或者其他原因無法連上,則可能認為該服務器出現的服務故障。
在本實施例中,為了使zookeeper集群可以監測各個服務器,可選的,還可以包括搭建模塊105,用于搭建zookeeper集群的相關環境,并下載相關的工具包。也就是說,首先,將zookeeper集群建立起來,設置相關的硬件信息,并寫入相應的軟件代碼等信息,保證zookeeper集群的成功建立與正常運行。
此外,還可以包括注冊模塊106,用于在各個服務器中編寫zookeeper的注冊代碼,并基于注冊代碼向zookeeper集群進行注冊;注冊成功后,接收zookeeper集群的監控。為了使zookeeper監控相應的服務器,需要將各個服務器向zookeeper進行注冊;注冊過程可以通過用戶手動來進行,也可以通過在各個服務器中編寫注冊代碼,即在各個服務器的應用程序中編寫注冊代碼,讓程序自啟動后自動調用該注冊代碼來向zookeeper集群進行相關的注冊動作,即注冊模塊106還可以用于:在服務器啟動時,通過注冊代碼調用zookeeper集群,直接向zookeeper集群注冊服務器的服務器信息。服務器信息可以包括服務器的ip地址、端口等等信息。
注冊成功后,意味著服務器和zookeeper之間已經建立連接,同時也意味著服務器已經處于zookeeper集群的監控之下,zookeeper集群可以實時監測并判斷所連的服務器的狀態,根據服務器的ip地址和端口信息生成相應的服務列表。請參考圖2,圖2示出了通過zookeeper集群監控各個服務器的示意圖。
服務列表至少可以提供相應的服務器的ip地址信息,還可以包括其他的附加信息,比如該服務器的ip地址的優先權信息等等,當客戶端接入服務器時可以參考該優先權信息來接入所需的服務器。
服務列表中對應的服務器應該是正常工作的服務器,在本實施例中,監控模塊101還可以用于:監控各個服務器與zookeeper集群的連接情況,并將連接失敗的服務器從服務列表中移除。當某服務器由于不可達、死機或者種種其他原因導致和zookeeper之間連接失敗,此時該服務器可以被認為是故障服務器,可以將在服務列表中的該服務器的相關信息移除。此時的服務列表只含有其他連接正常的服務器的信息,從而使客戶端在接收到服務列表后可以正常接入所需的服務器,而不會出現接入了故障的服務器而導致的其他問題。
然后,有服務器和zookeeper之間不可達的情況,也會有zookeeper與服務器之間恢復連接的情況;當服務器和zookeeper集群之間恢復連接時,則可以將該服務器繼續添加至服務列表中。
在本實施例中,還可以包括緩存模塊107,用于將服務列表緩存至客戶端中。客戶端在接收到服務列表之后,為了后續處理的方便,將服務列表進行緩存,那么在后續欲接入相應的服務器時,無需發起接入請求,可以直接根據緩存的服務列表接入相應的服務器。而如果服務列表發生了變化,比如某臺服務器死機下線,或者新增加了服務器,zookeeper集群可以自動通知該客戶端再次重新獲取服務列表,與此同時,則可以將緩存的服務列表移除。
本實施例提供了一種負載均衡裝置,包括監控模塊、接收模塊、發送模塊、接入模塊,通過zookeeper集群監控各個服務器,接收來自客戶端的接入請求,并根據接入請求將相應的服務器的服務列表發送給客戶端,然后根據服務列表將客戶端接入相應的服務器。通過本實施例的實施,通過zookeeper集群可以減少單點故障,同時也降低了維護所需的成本,此外,zookeeper集群不需要動態的配置相關信息,節約了大量的時間。
實施例二
圖3為本實施例二提供的一種負載均衡方法流程圖,具體包括:
S301、通過zookeeper集群監控各個服務器;
S302、接收來自客戶端的接入請求,并根據客戶端的接入請求將相應的服務器的服務列表發送客戶端;
S303、根據服務列表將客戶端接入相應的服務器。
zookeeper是一個分布式的,開放源碼的分布式應用程序協調服務,它是一個為分布式應用提供一致性服務器的軟件,提供的功能包括但不限于:配置維護、域名服務、分布式同步、組服務等等。以配置維護為例,當一組代碼應用于多個服務器時,由于各個服務器的ip地址、接口等的差異,實際配置文件是不盡相同的,通過zookeeper集群則可以直接根據不同的服務器編寫配置文件,無需再一一寫入相應的配置文件。
在本實施例中,通過zookeeper集群監控各個服務器,即利用zookeeper與各個服務器相連,監測各個服務器的當前的狀態,包括服務器的運行情況、ip地址、端口信息等等,其中,服務器的運行情況包括正常運行和連接失敗等等,當某臺服務器與zookeeper之間不可達,死機或者其他原因無法連上,則可能認為該服務器出現的服務故障。
在本實施例中,為了使zookeeper集群可以監測各個服務器,可選的,在通過zookeeper集群監控各個服務器之前,還可以包括:搭建zookeeper集群的相關環境,并下載相關的工具包。也就是說,首先,將zookeeper集群建立起來,設置相關的硬件信息,并寫入相應的軟件代碼等信息,保證zookeeper集群的成功建立與正常運行。
此外,在本實施例中,通過zookeeper集群監控各個服務器之前,還可以包括:在各個服務器中編寫zookeeper的注冊代碼,并基于注冊代碼向zookeeper集群進行注冊;注冊成功后,接收zookeeper集群的監控。為了使zookeeper監控相應的服務器,需要將各個服務器向zookeeper進行注冊;注冊過程可以通過用戶手動來進行,也可以通過在各個服務器中編寫注冊代碼,即在各個服務器的應用程序中編寫注冊代碼,讓程序自啟動后自動調用該注冊代碼來向zookeeper集群進行相關的注冊動作,即:基于注冊代碼向zookeeper集群進行注冊包括:在服務器啟動時,通過注冊代碼調用zookeeper集群,直接向zookeeper集群注冊服務器的服務器信息。
注冊成功后,意味著服務器和zookeeper之間已經建立連接,同時也意味著服務器已經處于zookeeper集群的監控之下,zookeeper集群可以實時監測并判斷所連的服務器的狀態,根據服務器的ip地址和端口信息生成相應的服務列表。
服務列表至少可以提供相應的服務器的ip地址信息,還可以包括其他的附加信息,比如該服務器的ip地址的優先權信息等等,當客戶端接入服務器時可以參考該優先權信息來接入所需的服務器。
服務列表中對應的服務器應該是正常工作的服務器,在本實施例中,通過zookeeper集群監控各個服務器還可以包括:監控各個服務器與zookeeper集群的連接情況,并將連接失敗的服務器從服務列表中移除。當某服務器由于不可達、死機或者種種其他原因導致和zookeeper之間連接失敗,此時該服務器可以被認為是故障服務器,可以將在服務列表中的該服務器的相關信息移除。此時的服務列表只含有其他連接正常的服務器的信息,從而使客戶端在接收到服務列表后可以正常接入所需的服務器,而不會出現接入了故障的服務器而導致的其他問題。
然后,有服務器和zookeeper之間不可達的情況,也會有zookeeper與服務器之間恢復連接的情況;當服務器和zookeeper集群之間恢復連接時,則可以將該服務器繼續添加至服務列表中。
在本實施例中,在根據客戶端的接入請求將相應的服務器的服務列表發送至客戶端之后,還可以包括:將服務列表緩存至客戶端中。客戶端在接收到服務列表之后,為了后續處理的方便,將服務列表進行緩存,那么在后續欲接入相應的服務器時,無需發起接入請求,可以直接根據緩存的服務列表接入相應的服務器。而如果服務列表發生了變化,比如某臺服務器死機下線,或者新增加了服務器,zookeeper集群可以自動通知該客戶端再次重新獲取服務列表,與此同時,則可以將緩存的服務列表移除。
本實施例提供了一種負載均衡方法,通過zookeeper集群監控各個服務器,接收來自客戶端的接入請求,并根據接入請求將相應的服務器的服務列表發送給客戶端,然后根據服務列表將客戶端接入相應的服務器。通過本實施例的實施,通過zookeeper集群可以減少單點故障,同時也降低了維護所需的成本,此外,zookeeper集群不需要動態的配置相關信息,節約了大量的時間。
第三實施例
圖4為本實施例三提供的一種負載均衡方法流程圖,具體包括:
S401、搭建zookeeper集群的相關環境,并下載相關的工具包;
這是zookeeper的初始化過程,包括創建zookeeper相關的硬件,并寫入所需的軟件代碼等信息。
S402、在各個服務器中編寫zookeeper的注冊代碼;
S403、啟動服務器,通過注冊代碼調用zookeeper集群,直接向zookeeper集群注冊服務器的服務器信息;
通過在服務器中編寫注冊代碼,可以讓服務器在啟動時就直接調用zookeeper集群進行注冊;除此之外,注冊過程也可以通過用戶手動來進行。
S404、注冊成功后,各服務器接受zookeeper集群的監控;
注冊成功后,意味著服務器和zookeeper之間已經建立連接,同時也意味著服務器已經處于zookeeper集群的監控之下,zookeeper集群可以實時監測并判斷所連的服務器的狀態,根據服務器的ip地址和端口信息生成相應的服務列表;服務列表至少可以提供相應的服務器的ip地址信息,還可以包括其他的附加信息,比如該服務器的ip地址的優先權信息等等,當客戶端接入服務器時可以參考該優先權信息來接入所需的服務器。
S405、zookeeper集群接收來自客戶端的接入請求,并根據接入請求將服務列表發送給客戶端;
zookeeper集群監控各個服務器時,當發現某個服務器由于不可達、死機或者種種其他原因導致和zookeeper之間連接失敗,此時該服務器可以被認為是故障服務器,可以將在服務列表中的該服務器的相關信息移除。此時的服務列表只含有其他連接正常的服務器的信息,從而使客戶端在接收到服務列表后可以正常接入所需的服務器,而不會出現接入了故障的服務器而導致的其他問題;當服務器和zookeeper集群之間恢復連接時,則可以將該服務器繼續添加至服務列表中。
S406、根據服務列表將客戶端接入相應的服務器。
客戶端在接收到服務列表之后,為了后續處理的方便,將服務列表進行緩存,那么在后續欲接入相應的服務器時,無需發起接入請求,可以直接根據緩存的服務列表接入相應的服務器。而如果服務列表發生了變化,比如某臺服務器死機下線,或者新增加了服務器,zookeeper集群可以自動通知該客戶端再次重新獲取服務列表,與此同時,則可以將緩存的服務列表移除。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,空調器,或者網絡設備等)執行本發明各個實施例所述的方法。
上面結合附圖對本發明的實施例進行了描述,但是本發明并不局限于上述的具體實施方式,上述的具體實施方式僅僅是示意性的,而不是限制性的,本領域的普通技術人員在本發明的啟示下,在不脫離本發明宗旨和權利要求所保護的范圍情況下,還可做出很多形式,這些均屬于本發明的保護之內。