摘要:可變隊(duì)列會(huì)對(duì)長(zhǎng)期沒(méi)有更新動(dòng)態(tài)的那部分不活躍用戶進(jìn)行減緩速度,減緩對(duì)他們微博的獲取頻率,同時(shí)加大對(duì)活躍用戶的獲取頻率。
一、什么是 HTQ 先介紹下基本概念。注:本文為轉(zhuǎn)載,原文請(qǐng)查看star7th的個(gè)人博客。
我們?cè)诰帉懗绦驎r(shí),偶爾會(huì)遇到需要用到異步隊(duì)列的情況。比如說(shuō),我發(fā)送一萬(wàn)封郵件,如果單純使用一個(gè)for循環(huán)來(lái)發(fā)送,則執(zhí)行時(shí)間要很長(zhǎng),要等很久才能發(fā)完,同時(shí)很容易導(dǎo)致阻塞、超時(shí)等問(wèn)題。當(dāng)郵件更多,比如一百萬(wàn)封的時(shí)候,問(wèn)題會(huì)更加明顯。這時(shí)最好的解決方案就是把這十萬(wàn)封郵件排隊(duì),一一發(fā)出去。這就是任務(wù)隊(duì)列的概念。
并且,我們并不需要等到十萬(wàn)封郵件都發(fā)送完畢后才在網(wǎng)站前臺(tái)通知用戶。我們可以把郵件一入隊(duì)列,就通知用戶。這樣,用戶等待的時(shí)間就不是漫長(zhǎng)的“發(fā)十萬(wàn)封郵件”的時(shí)間,而是“把十萬(wàn)封郵件排隊(duì)”的時(shí)間。因此能明顯地縮短了用戶等待時(shí)間。這就是異步的概念。
HTQ ,全稱 Http Task Queue ,是一個(gè)以Http方式執(zhí)行異步任務(wù)的隊(duì)列服務(wù)。你可以推送若干url進(jìn)HTQ隊(duì)列,HTQ會(huì)以Http GET 的方式訪問(wèn)這些url。如果url所在的腳本寫上各種具體的任務(wù)操作,如發(fā)送郵件等,便可以實(shí)現(xiàn)異步操作了。HTQ使用node.js編寫,可跟各種后臺(tái)語(yǔ)言如PHP、java配合使用以增強(qiáng)異步處理能力。目前支持的隊(duì)列類型有實(shí)時(shí)異步隊(duì)列、定時(shí)異步隊(duì)列、可變異步隊(duì)列。
如果你依然對(duì)HTQ陌生,則可往下看詳細(xì)的應(yīng)用場(chǎng)景以加深了解。
二、應(yīng)用場(chǎng)景 1、實(shí)時(shí)異步隊(duì)列所謂實(shí)時(shí),指的是把任務(wù)一推進(jìn)隊(duì)列就馬上執(zhí)行。一個(gè)典型的應(yīng)用場(chǎng)景就是我們上面所說(shuō)的發(fā)送郵件。郵件推送進(jìn)任務(wù)隊(duì)列,隊(duì)列馬上把它發(fā)出去。如果它推進(jìn)隊(duì)列后有其他郵件正在發(fā)送中,它則等待當(dāng)前郵件發(fā)送完畢后才發(fā)送。
除了發(fā)郵件,我們?cè)诎l(fā)文章、發(fā)微博、發(fā)評(píng)論的時(shí)候都可以用得上HTQ的實(shí)時(shí)任務(wù)隊(duì)列,尤其是數(shù)量非常大的時(shí)候。比如評(píng)論用戶太多,如果一瞬間讓服務(wù)器處理,服務(wù)器可能因?yàn)橹尾涣颂叩牟l(fā)從而造成阻塞。這個(gè)時(shí)候就可以讓評(píng)論們進(jìn)入隊(duì)列再一一處理。
2、定時(shí)異步隊(duì)列定時(shí),顧名思義,就是在特定的時(shí)間執(zhí)行任務(wù)隊(duì)列。這種隊(duì)列服務(wù)可用于定時(shí)郵件、定時(shí)短信。需要說(shuō)明的是,這里的定時(shí),不一定是精準(zhǔn)的定時(shí)。假如你設(shè)置了明天12點(diǎn)執(zhí)行某個(gè)任務(wù),那么,它在明天12點(diǎn)的時(shí)候?qū)⑦M(jìn)入隊(duì)列。假如隊(duì)列中已經(jīng)有任務(wù)在執(zhí)行,那么它會(huì)等待到前面的任務(wù)完畢才執(zhí)行。此時(shí)可能是12點(diǎn)01分鐘才執(zhí)行。
3、可變隊(duì)列我們推送10個(gè)任務(wù)進(jìn)隊(duì)列,這10個(gè)隊(duì)列會(huì)反復(fù)循環(huán)地執(zhí)行,并且它們的執(zhí)行快慢能夠根據(jù)返回情況進(jìn)行調(diào)整,這就是可變隊(duì)列。比如,我們做掃描監(jiān)控,會(huì)反復(fù)地執(zhí)行“掃描”這個(gè)任務(wù)。我們希望,在有異常情況的時(shí)候,能加快掃描的速度以便更快速地發(fā)現(xiàn)問(wèn)題;而在沒(méi)有長(zhǎng)期異常的情況能減慢一下掃描速度以節(jié)省機(jī)器資源。
再舉一個(gè)場(chǎng)景例子,通過(guò)API拉取微博新動(dòng)態(tài)。我們網(wǎng)站上有10萬(wàn)綁定了新浪微博的用戶,我們需要時(shí)常獲取他們的最新動(dòng)態(tài)以展示在我們的網(wǎng)站的用戶主頁(yè)上。 如果是采用定時(shí)獲取動(dòng)態(tài)的方式,那么,假設(shè)1分鐘能獲取1千個(gè)用戶的動(dòng)態(tài)(因?yàn)槭蹵PI使用頻率和網(wǎng)絡(luò)等原因限制,我們獲取不了太快。這里先假設(shè)一個(gè)數(shù)字),那么,獲取完所有用戶狀態(tài)需要100分鐘。對(duì)用戶來(lái)說(shuō),他在微博更新動(dòng)態(tài)后,100分鐘后才顯示到我們網(wǎng)站。這明顯滯后太多。有沒(méi)有辦法加快點(diǎn)呢?此時(shí)可以使用HTQ的可變隊(duì)列??勺冴?duì)列會(huì)對(duì)長(zhǎng)期沒(méi)有更新動(dòng)態(tài)的那部分不活躍用戶進(jìn)行減緩速度,減緩對(duì)他們微博的獲取頻率,同時(shí)加大對(duì)活躍用戶的獲取頻率。這樣,一個(gè)活躍用戶更新微博后,可能10分鐘就能同步到我們網(wǎng)站了。對(duì)于不活躍用戶,可能獲取時(shí)間會(huì)變長(zhǎng)了些,但不要緊,我們?cè)敢夥峙涓嗟馁Y源去滿足活躍用戶的需求。
使用可變隊(duì)列,能讓我們有所側(cè)重地使用我們的資源,以減少浪費(fèi)、增加利用率。
三、安裝和使用安裝和使用 請(qǐng)點(diǎn)擊該鏈接
相關(guān)文章:
自己實(shí)現(xiàn)異步執(zhí)行任務(wù)的隊(duì)列(一)
自己實(shí)現(xiàn)異步執(zhí)行任務(wù)的隊(duì)列(二)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22373.html
摘要:摘要當(dāng)常規(guī)的轉(zhuǎn)碼工作流無(wú)法滿足用戶的場(chǎng)景時(shí),需用戶自己判斷業(yè)務(wù)邏輯,并使用提交轉(zhuǎn)碼任務(wù)。例如并不是所有的視頻都需要轉(zhuǎn)碼,不同視頻需要設(shè)置不同的轉(zhuǎn)碼配置。轉(zhuǎn)碼支持標(biāo)準(zhǔn)加密,暫不支持阿里云私有加密。 摘要: 當(dāng)常規(guī)的轉(zhuǎn)碼工作流無(wú)法滿足用戶的場(chǎng)景時(shí),需用戶自己判斷業(yè)務(wù)邏輯,并使用API提交轉(zhuǎn)碼任務(wù)。例如:并不是所有的視頻都需要轉(zhuǎn)碼,不同視頻需要設(shè)置不同的轉(zhuǎn)碼配置。本文將介紹API提交轉(zhuǎn)碼任務(wù)...
摘要:的單線程,與它的用途有關(guān)。只要指定過(guò)回調(diào)函數(shù),這些事件發(fā)生時(shí)就會(huì)進(jìn)入任務(wù)隊(duì)列,等待主線程讀取。四主線程從任務(wù)隊(duì)列中讀取事件,這個(gè)過(guò)程是循環(huán)不斷的,所以整個(gè)的這種運(yùn)行機(jī)制又稱為事件循環(huán)。令人困惑的是,文檔中稱,指定的回調(diào)函數(shù),總是排在前面。 原文:http://www.cnblogs.com/Master... 一、為什么JavaScript是單線程? JavaScript語(yǔ)言的一大特點(diǎn)...
摘要:微信已經(jīng)開源了,但是市面上相關(guān)的文章較少,即使有也是多在于使用等這些,那么這次我希望能夠從這個(gè)直接用于底層通訊的部分進(jìn)行個(gè)分析。首先明確下,微信用了的開源協(xié)議庫(kù),來(lái)代替和。核心的部分我們先放下,下一篇再深入分析。 微信已經(jīng)開源了mars,但是市面上相關(guān)的文章較少,即使有也是多在于使用xlog等這些,那么這次我希望能夠從stn這個(gè)直接用于im底層通訊的部分進(jìn)行個(gè)分析。為了能分析的全面些,...
摘要:即將立秋的課多周刊第期我們的微信公眾號(hào),更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。若有幫助,請(qǐng)把課多周刊推薦給你的朋友,你的支持是我們最大的動(dòng)力。課多周刊機(jī)器人運(yùn)營(yíng)中心是如何玩轉(zhuǎn)起來(lái)的分享課多周刊是如何運(yùn)營(yíng)并堅(jiān)持下來(lái)的。 即將立秋的《課多周刊》(第2期) 我們的微信公眾號(hào):fed-talk,更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。 若有幫助,請(qǐng)把 課多周刊 推薦給你的朋友,你的支持是我們最大...
摘要:即將立秋的課多周刊第期我們的微信公眾號(hào),更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。若有幫助,請(qǐng)把課多周刊推薦給你的朋友,你的支持是我們最大的動(dòng)力。課多周刊機(jī)器人運(yùn)營(yíng)中心是如何玩轉(zhuǎn)起來(lái)的分享課多周刊是如何運(yùn)營(yíng)并堅(jiān)持下來(lái)的。 即將立秋的《課多周刊》(第2期) 我們的微信公眾號(hào):fed-talk,更多精彩內(nèi)容皆在微信公眾號(hào),歡迎關(guān)注。 若有幫助,請(qǐng)把 課多周刊 推薦給你的朋友,你的支持是我們最大...
閱讀 849·2019-08-30 15:55
閱讀 1421·2019-08-30 13:55
閱讀 2001·2019-08-29 17:13
閱讀 2853·2019-08-29 15:42
閱讀 1343·2019-08-26 14:04
閱讀 1030·2019-08-26 13:31
閱讀 3281·2019-08-26 11:34
閱讀 842·2019-08-23 18:25