負(fù)載均衡(Load Balance)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,將請(qǐng)求/數(shù)據(jù)【均勻】分?jǐn)偟蕉鄠€(gè)操作單元上執(zhí)行,負(fù)載均衡的關(guān)鍵在于【均勻】。
負(fù)載均衡建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
一.負(fù)載均衡原理
系統(tǒng)的擴(kuò)展可分為縱向(垂直)擴(kuò)展和橫向(水平)擴(kuò)展。縱向擴(kuò)展,是從單機(jī)的角度通過增加硬件處理能力,比如CPU處理能力,內(nèi)存容量,磁盤等方面,實(shí)現(xiàn)服務(wù)器處理能力的提升,不能滿足大型分布式系統(tǒng)(網(wǎng)站),大流量,高并發(fā),海量數(shù)據(jù)的問題。因此需要采用橫向擴(kuò)展的方式,通過添加機(jī)器來滿足大型網(wǎng)站服務(wù)的處理能力。比如:一臺(tái)機(jī)器不能滿足,則增加兩臺(tái)或者多臺(tái)機(jī)器,共同承擔(dān)訪問壓力。
l 應(yīng)用集群:將同一應(yīng)用部署到多臺(tái)機(jī)器上,組成處理集群,接收負(fù)載均衡設(shè)備分發(fā)的請(qǐng)求,進(jìn)行處理,并返回相應(yīng)數(shù)據(jù)。
l 負(fù)載均衡設(shè)備:將用戶訪問的請(qǐng)求,根據(jù)負(fù)載均衡算法,分發(fā)到集群中的一臺(tái)處理服務(wù)器。(一種把網(wǎng)絡(luò)請(qǐng)求分散到一個(gè)服務(wù)器集群中的可用服務(wù)器上去的設(shè)備)
負(fù)載均衡的作用(解決的問題):
1.解決并發(fā)壓力,提高應(yīng)用處理性能(增加吞吐量,加強(qiáng)網(wǎng)絡(luò)處理能力);
2.提供故障轉(zhuǎn)移,實(shí)現(xiàn)高可用;
3.通過添加或減少服務(wù)器數(shù)量,提供網(wǎng)站伸縮性(擴(kuò)展性);
4.安全防護(hù);(負(fù)載均衡設(shè)備上做一些過濾,黑白名單等處理)
二. 負(fù)載均衡分類
根據(jù)實(shí)現(xiàn)技術(shù)不同,可分為DNS負(fù)載均衡,HTTP負(fù)載均衡,IP負(fù)載均衡,鏈路層負(fù)載均衡等。
2.1 DNS負(fù)載均衡
最早的負(fù)載均衡技術(shù),利用域名解析實(shí)現(xiàn)負(fù)載均衡,在DNS服務(wù)器,配置多個(gè)A記錄,這些A記錄對(duì)應(yīng)的服務(wù)器構(gòu)成集群。大型網(wǎng)站總是部分使用DNS解析,作為第一級(jí)負(fù)載均衡。
優(yōu)點(diǎn)
1>. 使用簡(jiǎn)單:負(fù)載均衡工作,交給DNS服務(wù)器處理,省掉了負(fù)載均衡服務(wù)器維護(hù)的麻煩;
2>. 提高性能:可以支持基于地址的域名解析,解析成距離用戶最近的服務(wù)器地址,可以加快訪問速度,改善性能;
缺點(diǎn)
1>. 可用性差:DNS解析是多級(jí)解析,新增/修改DNS后,解析時(shí)間較長(zhǎng);解析過程中,用戶訪問網(wǎng)站將失敗;
2>. 擴(kuò)展性低:DNS負(fù)載均衡的控制權(quán)在域名商那里,無法對(duì)其做更多的改善和擴(kuò)展;
3>.SPAN>
實(shí)踐建議
將DNS作為第一級(jí)負(fù)載均衡,A記錄對(duì)應(yīng)著內(nèi)部負(fù)載均衡的IP地址,通過內(nèi)部負(fù)載均衡將請(qǐng)求分發(fā)到真實(shí)的Web服務(wù)器上。一般用于互聯(lián)網(wǎng)公司,復(fù)雜的業(yè)務(wù)系統(tǒng)不合適使用。
2.2 IP負(fù)載均衡
在網(wǎng)絡(luò)層通過修改請(qǐng)求目標(biāo)地址進(jìn)行負(fù)載均衡。
用戶請(qǐng)求數(shù)據(jù)包,到達(dá)負(fù)載均衡服務(wù)器后,負(fù)載均衡服務(wù)器在操作系統(tǒng)內(nèi)核進(jìn)程獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)負(fù)載均衡算法得到一臺(tái)真實(shí)服務(wù)器地址,然后將請(qǐng)求目的地址修改為,獲得的真實(shí)ip地址,不需要經(jīng)過用戶進(jìn)程處理。
真實(shí)服務(wù)器處理完成后,響應(yīng)數(shù)據(jù)包回到負(fù)載均衡服務(wù)器,負(fù)載均衡服務(wù)器,再將數(shù)據(jù)包源地址修改為自身的ip地址,發(fā)送給用戶瀏覽器。
IP負(fù)載均衡,真實(shí)物理服務(wù)器返回給負(fù)載均衡服務(wù)器,存在兩種方式:(1)負(fù)載均衡服務(wù)器在修改目的ip地址的同時(shí)修改源地址。將數(shù)據(jù)包源地址設(shè)為自身盤,即源地址轉(zhuǎn)換(snat)。(2)將負(fù)載均衡服務(wù)器同時(shí)作為真實(shí)物理服務(wù)器集群的網(wǎng)關(guān)服務(wù)器。
優(yōu)點(diǎn):在內(nèi)核進(jìn)程完成數(shù)據(jù)分發(fā),比在應(yīng)用層分發(fā)性能更好;
缺點(diǎn):所有請(qǐng)求響應(yīng)都需要經(jīng)過負(fù)載均衡服務(wù)器,集群最大吞吐量受限于負(fù)載均衡服務(wù)器網(wǎng)卡帶寬;
2.4 鏈路層負(fù)載均衡
在通信協(xié)議的數(shù)據(jù)鏈路層修改mac地址,進(jìn)行負(fù)載均衡。
數(shù)據(jù)分發(fā)時(shí),不修改ip地址,指修改目標(biāo)mac地址,配置真實(shí)物理服務(wù)器集群所有機(jī)器虛擬ip和負(fù)載均衡服務(wù)器ip地址一致,達(dá)到不修改數(shù)據(jù)包的源地址和目標(biāo)地址,進(jìn)行數(shù)據(jù)分發(fā)的目的。
實(shí)際處理服務(wù)器ip和數(shù)據(jù)請(qǐng)求目的ip一致,不需要經(jīng)過負(fù)載均衡服務(wù)器進(jìn)行地址轉(zhuǎn)換,可將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器,避免負(fù)載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸。也稱為直接路由模式(DR模式)。
優(yōu)點(diǎn):性能好;
缺點(diǎn):配置復(fù)雜;
實(shí)踐建議:DR模式是目前使用最廣泛的一種負(fù)載均衡方式。
2.5混合型負(fù)載均衡
由于多個(gè)服務(wù)器群內(nèi)硬件設(shè)備、各自的規(guī)模、提供的服務(wù)等的差異,可以考慮給每個(gè)服務(wù)器群采用最合適的負(fù)載均衡方式,然后又在這多個(gè)服務(wù)器群間再一次負(fù)載均衡或群集起來以一個(gè)整體向外界提供服務(wù)(即把這多個(gè)服務(wù)器群當(dāng)做一個(gè)新的服務(wù)器群),從而達(dá)到最佳的性能。將這種方式稱之為混合型負(fù)載均衡。
此種方式有時(shí)也用于單臺(tái)均衡設(shè)備的性能不能滿足大量連接請(qǐng)求的情況下。是目前大型互聯(lián)網(wǎng)公司,普遍使用的方式。
以上模式適合有動(dòng)靜分離的場(chǎng)景,反向代理服務(wù)器(集群)可以起到緩存和動(dòng)態(tài)請(qǐng)求分發(fā)的作用,當(dāng)時(shí)靜態(tài)資源緩存在代理服務(wù)器時(shí),則直接返回到瀏覽器。如果動(dòng)態(tài)頁面則請(qǐng)求后面的應(yīng)用負(fù)載均衡(應(yīng)用集群)。
當(dāng)談到網(wǎng)絡(luò)架構(gòu)和性能優(yōu)化時(shí),負(fù)載均衡是一個(gè)至關(guān)重要的概念。在今天這個(gè)數(shù)字化時(shí)代,網(wǎng)站訪問量巨大,服務(wù)器壓力空前增加,因此負(fù)載均衡技術(shù)變得尤為重要。
負(fù)載均衡是一種技術(shù),用于在多臺(tái)服務(wù)器之間分發(fā)負(fù)載,確保每臺(tái)服務(wù)器都能高效處理請(qǐng)求。它通過智能地將流量分發(fā)到不同的服務(wù)器上,不僅提高了網(wǎng)站的性能,還增強(qiáng)了系統(tǒng)的穩(wěn)定性和可靠性。
負(fù)載均衡通過分配用戶請(qǐng)求來避免單個(gè)服務(wù)器過載,確保每臺(tái)服務(wù)器都處于最佳工作狀態(tài)。它可以根據(jù)服務(wù)器的負(fù)載情況,流量量和性能等因素,動(dòng)態(tài)調(diào)整請(qǐng)求分發(fā)策略,從而提高整個(gè)系統(tǒng)的性能。
在高流量的網(wǎng)站或應(yīng)用程序中,單臺(tái)服務(wù)器可能無法滿足所有用戶的請(qǐng)求,容易導(dǎo)致性能下降甚至宕機(jī)。而引入負(fù)載均衡技術(shù)可以有效地解決這一問題,提高系統(tǒng)的吞吐量和穩(wěn)定性。
另外,在進(jìn)行系統(tǒng)維護(hù)或升級(jí)時(shí),可以通過負(fù)載均衡將流量導(dǎo)向到其他正常運(yùn)行的服務(wù)器上,從而實(shí)現(xiàn)零停機(jī)時(shí)間,保證用戶的訪問體驗(yàn)。
域名解析在負(fù)載均衡中扮演著至關(guān)重要的角色。當(dāng)用戶輸入一個(gè)域名并訪問網(wǎng)站時(shí),域名解析會(huì)將域名轉(zhuǎn)換為對(duì)應(yīng)的IP地址,然后負(fù)載均衡將根據(jù)特定的算法將用戶請(qǐng)求分配到后端的服務(wù)器上。
通過合理配置域名解析和負(fù)載均衡,可以實(shí)現(xiàn)靈活的負(fù)載分配策略,提高系統(tǒng)的可靠性和性能。同時(shí),及時(shí)更新域名解析記錄也可以確保負(fù)載均衡系統(tǒng)的穩(wěn)定運(yùn)行。
引入適當(dāng)?shù)?strong>負(fù)載均衡方案可以帶來諸多優(yōu)勢(shì),包括:
在當(dāng)今互聯(lián)網(wǎng)發(fā)展迅猛的環(huán)境下,合理配置負(fù)載均衡技術(shù)對(duì)于保證網(wǎng)站的穩(wěn)定運(yùn)行和性能優(yōu)化至關(guān)重要。通過了解負(fù)載均衡的原理、常見算法和與域名解析的結(jié)合,可以為網(wǎng)絡(luò)架構(gòu)的設(shè)計(jì)提供更有效的解決方案,確保系統(tǒng)運(yùn)行的高可用性和高性能。
所謂負(fù)載均衡,就是 Nginx 把請(qǐng)求均勻的分?jǐn)偨o上游的應(yīng)用服務(wù)器,這樣即使某一個(gè)服務(wù)器宕機(jī)也不會(huì)影響請(qǐng)求的處理,或者當(dāng)應(yīng)用服務(wù)器扛不住了,可以隨時(shí)進(jìn)行擴(kuò)容。
在 x 軸上,可以通過橫向擴(kuò)展應(yīng)用服務(wù)器集群,Nginx 基于 Round-Robin 或者 Least-Connected 算法分發(fā)請(qǐng)求。但是橫向擴(kuò)展并不能解決所有問題,當(dāng)數(shù)據(jù)量大的情況下,無論擴(kuò)展多少臺(tái)服務(wù),單臺(tái)服務(wù)器數(shù)據(jù)量依然很大。
在 y 軸上,可以基于 URL 進(jìn)行不同功能的分發(fā)。需要對(duì) Nginx 基于 URL 進(jìn)行 location 的配置,成本較高。
在 z 軸上可以基于用戶信息進(jìn)行擴(kuò)展。例如將用戶 IP 地址或者其他信息映射到某個(gè)特定的服務(wù)或者集群上去。
這就是 Nginx 的負(fù)載均衡功能,它的主要目的就是為了增強(qiáng)服務(wù)的處理能力和容災(zāi)能力。
實(shí)現(xiàn)負(fù)載均衡的原理為:假設(shè)Apache接收到http://127.0.0.1 /test請(qǐng)求,由于該請(qǐng)求滿足ProxyPass條件(其URL前綴為“/"),該請(qǐng)求會(huì) 被分發(fā)到后臺(tái)某一個(gè)BalancerMember。
譬如該請(qǐng)求可能會(huì)轉(zhuǎn)發(fā)到http://127.0.0.1:8080/進(jìn)行處理。
當(dāng)?shù)诙€(gè)滿足條件的URL請(qǐng)求過來時(shí),該請(qǐng)求可能會(huì)被分發(fā)到另外一臺(tái)BalancerMember,譬如,可能會(huì)轉(zhuǎn)發(fā)到 http://127.0.0.1:7080/如此循環(huán)反復(fù),便實(shí)現(xiàn)了負(fù)載均衡的機(jī)制。
負(fù)載均衡是一種將工作負(fù)載分配到多個(gè)服務(wù)器或計(jì)算資源上的技術(shù),以提高系統(tǒng)的性能、可靠性和可擴(kuò)展性。它可以通過不同的方式實(shí)現(xiàn),有以下幾種常見的負(fù)載均衡方式及其區(qū)別:
基于硬件的負(fù)載均衡:使用專用的硬件設(shè)備(如負(fù)載均衡器)來分發(fā)流量和請(qǐng)求。這些設(shè)備通常具有高性能和可靠性,并提供豐富的負(fù)載均衡算法和功能。它們可以在網(wǎng)絡(luò)層或應(yīng)用層進(jìn)行負(fù)載均衡,并能夠處理大量的并發(fā)請(qǐng)求。
基于軟件的負(fù)載均衡:使用軟件來實(shí)現(xiàn)負(fù)載均衡功能,通常在服務(wù)器上運(yùn)行。這種方式可以通過軟件負(fù)載均衡器、反向代理服務(wù)器或應(yīng)用程序級(jí)別的負(fù)載均衡來實(shí)現(xiàn)。它相對(duì)于硬件負(fù)載均衡來說成本較低,但性能可能會(huì)受到服務(wù)器資源的限制。
DNS負(fù)載均衡:通過DNS服務(wù)器將請(qǐng)求分發(fā)到不同的服務(wù)器上。DNS負(fù)載均衡可以根據(jù)不同的策略(如輪詢、加權(quán)輪詢、最少連接等)將請(qǐng)求分發(fā)到不同的IP地址,從而實(shí)現(xiàn)負(fù)載均衡。然而,DNS負(fù)載均衡的效果可能受到DNS緩存和TTL(Time to Live)的影響。
內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN):CDN是一種分布式的網(wǎng)絡(luò)架構(gòu),通過將內(nèi)容緩存到離用戶更近的邊緣節(jié)點(diǎn)上,以提供更快的訪問速度和更好的用戶體驗(yàn)。CDN可以根據(jù)用戶的地理位置和網(wǎng)絡(luò)狀況來選擇最佳的邊緣節(jié)點(diǎn),從而實(shí)現(xiàn)負(fù)載均衡。
總體而言,不同的負(fù)載均衡方式適用于不同的場(chǎng)景和需求。硬件負(fù)載均衡器通常適用于大規(guī)模、高性能的環(huán)境,而軟件負(fù)載均衡和DNS負(fù)載均衡適用于中小規(guī)模的環(huán)境。CDN則適用于需要提供全球范圍內(nèi)快速訪問的應(yīng)用。選擇適合自己需求的負(fù)載均衡方式需要考慮到性能、可靠性、成本和可擴(kuò)展性等因素。
負(fù)載均衡(Load Balance)是指將負(fù)載(工作任務(wù))進(jìn)行平衡、分?jǐn)偟蕉鄠€(gè)操作單元上運(yùn)行,促使多臺(tái)設(shè)備共同更快、更高效完成某一項(xiàng)或者多項(xiàng)任務(wù)。負(fù)載均衡在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上,提供了一種透明并且廉價(jià)有效的方法擴(kuò)展服務(wù)器和網(wǎng)絡(luò)設(shè)備的帶寬、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力,增加吞吐量、提高網(wǎng)絡(luò)的可用性和靈活性。
負(fù)載均衡包含兩方面的含義:
①將一個(gè)復(fù)雜任務(wù)拆分成多個(gè)子任務(wù),然后交由多個(gè)操作單元協(xié)作處理,最后共同完成這項(xiàng)任務(wù)。是不是有點(diǎn)像分布式計(jì)算呢?
②將海量、高并發(fā)訪問處理均分到多個(gè)處理單元中,雨露均沾,避免旱的旱死,澇的澇死
Activemq 的作用就是系統(tǒng)之間進(jìn)行通信。 當(dāng)然可以使用其他方式進(jìn)行系統(tǒng)間通信, 如果使用 Activemq 的話可以對(duì)系統(tǒng)之間的調(diào)用進(jìn)行解耦,
實(shí)現(xiàn)系統(tǒng)間的異步通信。 原理就是生產(chǎn)者生產(chǎn)消息, 把消息發(fā)送給activemq。 Activemq 接收到消息, 然后查看有多少個(gè)消費(fèi)者,
然后把消息轉(zhuǎn)發(fā)給消費(fèi)者, 此過程中生產(chǎn)者無需參與。 消費(fèi)者接收到消息后做相應(yīng)的處理和生產(chǎn)者沒有任何關(guān)系
負(fù)載均衡是一種將網(wǎng)絡(luò)流量分配到多個(gè)服務(wù)器或計(jì)算機(jī)資源上的技術(shù)。當(dāng)一個(gè)服務(wù)器的負(fù)載過高時(shí),負(fù)載均衡可以將部分流量分配到其他服務(wù)器上,以達(dá)到負(fù)載均衡,提高系統(tǒng)的可靠性、可用性和性能。負(fù)載均衡可以通過多種方式實(shí)現(xiàn),包括硬件設(shè)備、軟件應(yīng)用和云服務(wù)等。負(fù)載均衡在現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)中扮演著重要的角色,可以幫助企業(yè)提高網(wǎng)站和應(yīng)用程序的可用性和性能。
負(fù)載均衡就是分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。
負(fù)載均衡建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
Remoting:網(wǎng)絡(luò)通信框架,實(shí)現(xiàn)了sync-over-async和request-response消息機(jī)制。
RPC:一個(gè)遠(yuǎn)程過程調(diào)用的抽象,支持負(fù)載均衡、容災(zāi)和集群功能。
Registry:服務(wù)目錄框架用于服務(wù)的注冊(cè)和服務(wù)事件發(fā)布和訂閱。(類似第一篇文章中的點(diǎn)菜寶)
dubbo架構(gòu)
Provider: 暴露服務(wù)的提供方。
Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
Registry: 服務(wù)注冊(cè)中心和發(fā)現(xiàn)中心。
Monitor: 統(tǒng)計(jì)服務(wù)和調(diào)用次數(shù),調(diào)用時(shí)間監(jiān)控中心。(dubbo的控制臺(tái)頁面中可以顯示)
Container:服務(wù)運(yùn)行的容器。
調(diào)用關(guān)系:
0、服務(wù)器負(fù)責(zé)啟動(dòng),加載,運(yùn)行提供者(例如在tomcat容器中,啟動(dòng)dubbo服務(wù)端)。
1、提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。
2、消費(fèi)者啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)。
3、注冊(cè)中心返回提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。
4、消費(fèi)者,從遠(yuǎn)程接口列表中,調(diào)用遠(yuǎn)程接口,dubbo會(huì)基于負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗則選擇另一臺(tái)。
5、消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。(可以在dubbo的可視化界面看到)
dubbo的容錯(cuò)方案
當(dāng)我們的系統(tǒng)中用到Dubbo的集群環(huán)境,因?yàn)楦鞣N原因在集群調(diào)用失敗時(shí),Dubbo提供了多種容錯(cuò)方案,缺省為failover重試。
Dubbo的集群容錯(cuò)在這里想說說他是因?yàn)槲覀儗?shí)際的項(xiàng)目中出現(xiàn)了此類的問題,因?yàn)橐蕾嚨牡谌巾?xiàng)目出現(xiàn)異常,導(dǎo)致dubbo調(diào)用超時(shí),此時(shí)使用的是默認(rèn)的集群容錯(cuò)方式,而配置的reties='3',這樣前段系統(tǒng)連續(xù)掉用了三次服務(wù),結(jié)果可想而知.
先說一下各節(jié)點(diǎn)關(guān)系:
這里的Invoker是Provider的一個(gè)可調(diào)用Service的抽象,Invoker封裝了Provider地址及Service接口信息。
Directory代表多個(gè)Invoker,可以把它看成List<Invoker>,但與List不同的是,它的值可能是動(dòng)態(tài)變化的,比如注冊(cè)中心推送變更。
Cluster將Directory中的多個(gè)Invoker偽裝成一個(gè)Invoker,對(duì)上層透明,偽裝過程包含了容錯(cuò)邏輯,調(diào)用失敗后,重試另一個(gè)。
Router負(fù)責(zé)從多個(gè)Invoker中按路由規(guī)則選出子集,比如讀寫分離,應(yīng)用隔離等。
LoadBalance負(fù)責(zé)從多個(gè)Invoker中選出具體的一個(gè)用于本次調(diào)用,選的過程包含了負(fù)載均衡算法,調(diào)用失敗后,需要重選。
集群容錯(cuò)模式:
Failover Cluster
失敗自動(dòng)切換,當(dāng)出現(xiàn)失敗,重試其它服務(wù)器。(缺省)
通常用于讀操作,但重試會(huì)帶來更長(zhǎng)延遲。
可通過retries="2"來設(shè)置重試次數(shù)(不含第一次)。正是文章剛開始說的那種情況.
Failfast Cluster
快速失敗,只發(fā)起一次調(diào)用,失敗立即報(bào)錯(cuò)。
通常用于非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
失敗安全,出現(xiàn)異常時(shí),直接忽略。
通常用于寫入審計(jì)日志等操作。
Failback Cluster
失敗自動(dòng)恢復(fù),后臺(tái)記錄失敗請(qǐng)求,定時(shí)重發(fā)。
通常用于消息通知操作。
Forking Cluster
并行調(diào)用多個(gè)服務(wù)器,只要一個(gè)成功即返回。
通常用于實(shí)時(shí)性要求較高的讀操作,但需要浪費(fèi)更多服務(wù)資源。
可通過forks="2"來設(shè)置最大并行數(shù)。
Broadcast Cluster
廣播調(diào)用所有提供者,逐個(gè)調(diào)用,任意一臺(tái)報(bào)錯(cuò)則報(bào)錯(cuò)。(2.1.0開始支持)
通常用于通知所有提供者更新緩存或日志等本地資源信息。
重試次數(shù)配置如:(failover集群模式生效)
<dubbo:serviceretries="2"/>
或:<dubbo:referenceretries="2"/>
或:<dubbo:reference>
<dubbo:methodname="findFoo"retries="2"/>
</dubbo:reference>
集群模式配置如:
<dubbo:servicecluster="failsafe"/>
或:<dubbo:referencecluster="failsafe"/>
dubbo負(fù)載均衡策略:
在集群負(fù)載均衡時(shí),Dubbo提供了多種均衡策略,缺省為random隨機(jī)調(diào)用。
RandomLoadBalance
隨機(jī),按權(quán)重設(shè)置隨機(jī)概率。
在一個(gè)截面上碰撞的概率高,但調(diào)用量越大分布越均勻,而且按概率使用權(quán)重后也比較均勻,有利于動(dòng)態(tài)調(diào)整提供者權(quán)重。
RoundRobin LoadBalance
輪循,按公約后的權(quán)重設(shè)置輪循比率。
存在慢的提供者累積請(qǐng)求問題,比如:第二臺(tái)機(jī)器很慢,但沒掛,當(dāng)請(qǐng)求調(diào)到第二臺(tái)時(shí)就卡在那,久而久之,所有請(qǐng)求都卡在調(diào)到第二臺(tái)上。
LeastActive LoadBalance
最少活躍調(diào)用數(shù),相同活躍數(shù)的隨機(jī),活躍數(shù)指調(diào)用前后計(jì)數(shù)差。
使慢的提供者收到更少請(qǐng)求,因?yàn)樵铰奶峁┱叩恼{(diào)用前后計(jì)數(shù)差會(huì)越大。
ConsistentHashLoadBalance
一致性Hash,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者。
當(dāng)某一臺(tái)提供者掛時(shí),原本發(fā)往該提供者的請(qǐng)求,基于虛擬節(jié)點(diǎn),平攤到其它提供者,不會(huì)引起劇烈變動(dòng)。
Dubbo的集群容錯(cuò)和負(fù)載均衡同樣也是Dubbo本身的高級(jí)特性.正如我們?cè)谡f自定義擴(kuò)展的時(shí)候一樣,這兩個(gè)特征同樣也可以進(jìn)行自定義擴(kuò)展,用戶可以根據(jù)自己實(shí)際的需求來擴(kuò)展他們從而滿足項(xiàng)目的實(shí)際需求.