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