欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于消息隊(duì)列的消費(fèi)均衡方法及系統(tǒng)的制作方法

文檔序號(hào):9551393閱讀:467來(lái)源:國(guó)知局
一種基于消息隊(duì)列的消費(fèi)均衡方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及基于消息隊(duì)列的計(jì)算機(jī)通信技術(shù)領(lǐng)域,特別是涉及一種基于消息隊(duì)列的消費(fèi)均衡方法及系統(tǒng)。
【背景技術(shù)】
[0002]消息隊(duì)列系統(tǒng)(又名消息中間件)被廣泛的用于各個(gè)互聯(lián)網(wǎng)公司。作為消息的一種緩沖機(jī)制,它可以有效的減輕公司后臺(tái)服務(wù)器的壓力。
[0003]—個(gè)典型的消息隊(duì)列系統(tǒng)的結(jié)構(gòu)示意圖如圖1所示,一共由三部分組成:
[0004]1.生產(chǎn)者端:負(fù)責(zé)向消息隊(duì)列發(fā)送消息的終端。
[0005]2.消費(fèi)者端:從消息隊(duì)列中獲得消息的終端。
[0006]3.消息隊(duì)列:用于存儲(chǔ)消息的中間件。通常來(lái)說(shuō),消息隊(duì)列系統(tǒng)的中間件包括多個(gè)消息隊(duì)列,這些消息隊(duì)列用于存儲(chǔ)生產(chǎn)者端發(fā)送過(guò)來(lái)的消息。消息隊(duì)列通常設(shè)置在至少一臺(tái)服務(wù)器上,在實(shí)際操作中通常為多臺(tái)服務(wù)器。
[0007]由于這種系統(tǒng)是由三部分組成,所以可以有多個(gè)生產(chǎn)者端向同一個(gè)中間件發(fā)送消息,也有可能會(huì)有多個(gè)消費(fèi)者端從中間件中拉取消息,進(jìn)行消費(fèi)。
[0008]舉例來(lái)說(shuō),對(duì)于電商而言,用戶作為生產(chǎn)者端,其產(chǎn)生的訂單會(huì)被首先發(fā)送至消息隊(duì)列,然后其他程序作為消費(fèi)者端,會(huì)從該消息隊(duì)列中拉取消息進(jìn)行消費(fèi),即對(duì)訂單進(jìn)行處理。采用消息隊(duì)列的好處是:不管前臺(tái)產(chǎn)生訂單的速度如何迅猛,通過(guò)中間消息隊(duì)列的緩存,可以保證后臺(tái)程序的正常運(yùn)行,從而避免了網(wǎng)絡(luò)波峰可能對(duì)后臺(tái)服務(wù)器造成的壓力。
[0009]不僅如此,消息隊(duì)列還被廣泛用在及時(shí)通訊等應(yīng)用中。比如當(dāng)兩臺(tái)終端通訊時(shí),首先由終端一發(fā)送了一條消息給自己的好友,該消息會(huì)被緩存在消息隊(duì)列中,繼而被推送至對(duì)應(yīng)好友的終端的軟件中。這種設(shè)計(jì)的好處是,當(dāng)好友不在線(即沒(méi)有打開(kāi)對(duì)應(yīng)的軟件時(shí)),消息隊(duì)列可以被當(dāng)作一種數(shù)據(jù)的存儲(chǔ)工具。由于不需要提供查詢、刪除等操作,所以使用消息隊(duì)列作為存儲(chǔ)工具,比傳統(tǒng)的數(shù)據(jù)庫(kù)要高效很多。
[0010]以下為消息隊(duì)列系統(tǒng)的具體工作方式:
[0011]生產(chǎn)者端一般采用輪詢的方式向各個(gè)消息隊(duì)列輪流發(fā)送消息,例如中間件中一共有3個(gè)消息隊(duì)列,那么生產(chǎn)者端會(huì)采用“消息隊(duì)列1-消息隊(duì)列2-消息隊(duì)列3-消息隊(duì)列1-消息隊(duì)列2-消息隊(duì)列3”這種順序,分別向各個(gè)消息隊(duì)列發(fā)送消息。
[0012]對(duì)于消費(fèi)者端,目前,對(duì)于絕大數(shù)消息隊(duì)列系統(tǒng),消費(fèi)者端都可以自己決定每次從中間件拉取多少條消息,而所拉取的消息是從一個(gè)消息隊(duì)列獲取還是從多個(gè)消息隊(duì)列獲取一般由系統(tǒng)本身決定。目前而言,大多數(shù)開(kāi)源系統(tǒng)采用輪詢的方式,輪流的從各個(gè)消息隊(duì)列獲取消費(fèi)者端需要的消息。例如,當(dāng)有三個(gè)消息隊(duì)列的時(shí)候,消費(fèi)者端如果先后發(fā)送了獲取1條消息,10條消息,100條消息的命令,那么系統(tǒng)會(huì)相應(yīng)的從消息隊(duì)列1獲取1條消息給消費(fèi)者端,從消息隊(duì)列2獲取10條消息給消費(fèi)者端,從消息隊(duì)列3獲取100條消息給消費(fèi)者端。
[0013]但是,目前的消費(fèi)方案存在消費(fèi)不均衡的現(xiàn)象。所謂消費(fèi)均衡,即為各個(gè)消息隊(duì)列的未消費(fèi)消息數(shù)大致相等。目前的絕大數(shù)消息隊(duì)列系統(tǒng)在以下幾個(gè)場(chǎng)景中會(huì)出現(xiàn)消費(fèi)不均衡的現(xiàn)象:
[0014]場(chǎng)景一,當(dāng)生產(chǎn)者端沒(méi)有嚴(yán)格按照輪詢的方式向各個(gè)消息隊(duì)列發(fā)送消息,但是消費(fèi)者端依然采用輪詢的方式來(lái)消費(fèi),此時(shí)就會(huì)造成某個(gè)消息隊(duì)列中的消息積壓。例如,假設(shè)有3個(gè)消息隊(duì)列,而生產(chǎn)者端輪詢的向3個(gè)消息隊(duì)列發(fā)送消息,但是并不是每次都發(fā)送1條,而是給消息隊(duì)列1發(fā)送10條消息,給消息隊(duì)列2發(fā)送100條消息,給消息隊(duì)列3發(fā)送1000條消息。那么如果消費(fèi)者端仍然按照輪詢均勻的消費(fèi),那么消息隊(duì)列3的消息會(huì)嚴(yán)重積壓。
[0015]場(chǎng)景二,生產(chǎn)者端并非均勻消費(fèi)。例如,消費(fèi)者端可以按照每次1條消息,10條消息,100條消息的順序從各個(gè)消息隊(duì)列拉取消息,那么消息隊(duì)列3的消息會(huì)被消費(fèi)得很快,而消息隊(duì)列1的消息會(huì)消費(fèi)的很慢,盡管這兩個(gè)消息隊(duì)列的消息生產(chǎn)時(shí)間也許是一致的,同樣造成了消費(fèi)不均衡的狀態(tài)。
[0016]場(chǎng)景三,服務(wù)器集群的某個(gè)節(jié)點(diǎn)宕機(jī)。消息隊(duì)列往往支持分布式部署,多個(gè)消費(fèi)隊(duì)列可能分布在不同的節(jié)點(diǎn)上,當(dāng)一個(gè)節(jié)點(diǎn)宕機(jī)之后,該節(jié)點(diǎn)上存儲(chǔ)的消費(fèi)隊(duì)列不能繼續(xù)接收消息,但是其他在線的節(jié)點(diǎn)仍然在接收消息,或者消費(fèi)端仍在從其他在線節(jié)點(diǎn)消費(fèi)消息。當(dāng)該節(jié)點(diǎn)從故障中恢復(fù)過(guò)來(lái)之后,其存儲(chǔ)的消息數(shù)量要小于其他節(jié)點(diǎn)上消費(fèi)隊(duì)列的消息數(shù)量。所以,此時(shí),也必須采取某種均衡方式,對(duì)消費(fèi)進(jìn)行負(fù)載均衡。
[0017]基于以上情況,如何讓消費(fèi)者端做到消費(fèi)自動(dòng)均衡是本領(lǐng)域亟待解決的問(wèn)題,目前各個(gè)開(kāi)源系統(tǒng)都沒(méi)有完美的解決這一問(wèn)題。業(yè)界目前的做法,即采取上面的做法(輪詢的方法)來(lái)發(fā)送和消費(fèi)消息。由于生產(chǎn)者端和消費(fèi)者端大多數(shù)情況下也是由同一支開(kāi)發(fā)團(tuán)隊(duì)所設(shè)計(jì)開(kāi)發(fā),所以只能在嚴(yán)格設(shè)定生產(chǎn)者端和消費(fèi)者端按照均勻輪詢方法運(yùn)作的前提下,來(lái)維持消費(fèi)均衡。
[0018]基于此,業(yè)界目前并沒(méi)有提出一種通用的消費(fèi)均衡解決方案,使得它可以在各個(gè)情況下均適用。即,即使生產(chǎn)者端和消費(fèi)者端未按照均勻輪詢方法運(yùn)作,也能維持消費(fèi)均衡,提高適用性。

【發(fā)明內(nèi)容】

[0019]本發(fā)明解決的技術(shù)問(wèn)題是,提出一種通用的自動(dòng)完成消費(fèi)均衡的方法和系統(tǒng)。
[0020]更進(jìn)一步,本發(fā)明不用考慮消費(fèi)者端需要的消息數(shù)量,生產(chǎn)者端是以何種策略向隊(duì)列發(fā)送消息,也不用考慮宕機(jī)所帶來(lái)的潛在風(fēng)險(xiǎn),在各種情況下,均可保證消費(fèi)均衡。
[0021 ] 為了解決上述問(wèn)題,本發(fā)明公開(kāi)了一種基于消息隊(duì)列的消費(fèi)均衡方法,包括:
[0022]排序步驟,消費(fèi)者端實(shí)時(shí)依照多個(gè)消息隊(duì)列的未消費(fèi)消息數(shù),對(duì)該多個(gè)消息隊(duì)列進(jìn)tx排序;
[0023]消費(fèi)步驟,當(dāng)消費(fèi)者端所執(zhí)行的任一線程需要消費(fèi)消息時(shí),均以未消費(fèi)消息數(shù)最大的消息隊(duì)列作為目標(biāo)隊(duì)列,從該目標(biāo)隊(duì)列中獲取消息,進(jìn)行消費(fèi)。
[0024]該消費(fèi)步驟之后還包括維護(hù)步驟:消費(fèi)完畢后,獲取該目標(biāo)隊(duì)列的當(dāng)前未消費(fèi)消息數(shù)并反饋至該排序步驟。
[0025]該排序步驟進(jìn)一步包括:利用一異步更新線程,輪詢?cè)摱鄠€(gè)消息隊(duì)列,實(shí)時(shí)獲得多個(gè)消息隊(duì)列的未消費(fèi)消息數(shù),并據(jù)以對(duì)該多個(gè)消息隊(duì)列進(jìn)行實(shí)時(shí)排序。
[0026]所述方法利用堆結(jié)構(gòu)實(shí)現(xiàn)該排序步驟。
[0027]所述方法在執(zhí)行該消費(fèi)步驟的過(guò)程中,該堆結(jié)構(gòu)將對(duì)應(yīng)該目標(biāo)隊(duì)列的堆頂節(jié)點(diǎn)刪除,并標(biāo)記為不可用,調(diào)整剩余節(jié)點(diǎn)的順序,在該消費(fèi)步驟執(zhí)行完畢后,將該目標(biāo)隊(duì)列的節(jié)點(diǎn)重新加入該堆結(jié)構(gòu)。
[0028]本發(fā)明還公開(kāi)了一種基于消息隊(duì)列的消費(fèi)均衡系統(tǒng),包括:
[0029]排序單元,用于使得消費(fèi)者端實(shí)時(shí)依照多個(gè)消息隊(duì)列的未消費(fèi)消息數(shù),對(duì)該多個(gè)消息隊(duì)列進(jìn)行排序;
[0030]消費(fèi)單元,用于當(dāng)消費(fèi)者端所執(zhí)行的任一線程需要消費(fèi)消息時(shí),均以未消費(fèi)消息數(shù)最大的消息隊(duì)列作為目標(biāo)隊(duì)列,從該目標(biāo)隊(duì)列中獲取消息,進(jìn)行消費(fèi)。
[0031]該系統(tǒng)還包括維護(hù)單元:用于在消費(fèi)完畢后,獲取該目標(biāo)隊(duì)列的當(dāng)前未消費(fèi)消息數(shù)并反饋至該排序單元。
[0032]該排序單元進(jìn)一步包括一異步更新線程,用于輪詢?cè)摱鄠€(gè)消息隊(duì)列,實(shí)時(shí)獲得多個(gè)消息隊(duì)列的未消費(fèi)消息數(shù),并據(jù)以對(duì)該多個(gè)消息隊(duì)列進(jìn)行實(shí)時(shí)排序。
[0033]該排序單元利用堆結(jié)構(gòu)來(lái)實(shí)現(xiàn)。
[0034]所述系統(tǒng)在調(diào)用該消費(fèi)單元的過(guò)程中,該堆結(jié)構(gòu)將對(duì)應(yīng)該目標(biāo)隊(duì)列的堆頂節(jié)點(diǎn)刪除,并標(biāo)記為不可用,調(diào)整剩余節(jié)點(diǎn)的順序,在對(duì)該消費(fèi)單元的調(diào)用結(jié)束后,將該目標(biāo)隊(duì)列的節(jié)點(diǎn)重新加入該堆結(jié)構(gòu)
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
徐汇区| 辽阳县| 沭阳县| 鸡东县| 朝阳县| 育儿| 新密市| 呼伦贝尔市| 汶川县| 潼南县| 子洲县| 资中县| 垦利县| 大连市| 阜城县| 海阳市| 驻马店市| 黔西县| 介休市| 曲阜市| 平江县| 浑源县| 新津县| 清徐县| 兴业县| 五峰| 册亨县| 宿迁市| 青河县| 图木舒克市| 金阳县| 象州县| 德令哈市| 晋宁县| 屏东市| 吉林市| 凤城市| 秀山| 青阳县| 康平县| 屯门区|