1. 起因, 隨著twitter sina微博,騰訊微博的開放平臺相繼推出, 大部分和互聯(lián)網(wǎng)相關(guān)的公司又多了一個營銷的手段:信息同步。也即是用戶把自己的新浪微博賬號或者騰訊微博賬號和你的網(wǎng)站關(guān)聯(lián)起來了,用戶在你的網(wǎng)站產(chǎn)生的 任何信息都可以同步發(fā)送到sina微博,qq微博上去(前提是經(jīng)過用戶的允許,這樣用戶既可以不需要同樣的信息復(fù)制到多個網(wǎng)站, 又可以相應(yīng)的推廣你的網(wǎng)站的入口曝光率)。目前同步比較好的例子是:微博通,街旁,切客等。
2. 為什么要用緩沖隊(duì)列服務(wù),我們舉個例子。如果你做了一個網(wǎng)站,用戶在你的網(wǎng)站上關(guān)聯(lián)了sina微博,QQ微博,開心網(wǎng),人人網(wǎng), 豆瓣,twitter, facebook(可能還要在國外設(shè)置代理)等等第三方平臺,用戶產(chǎn)生了一個動作后(比如發(fā)了一條心情狀態(tài)),你的網(wǎng)站要同時同步到這些網(wǎng)站去,每個第三 方平臺都要經(jīng)過多次外網(wǎng)http請求,所有的這些請求加起來是可能是很長的時間(幾秒, 甚至幾十秒),這對于前段用戶肯定肯定是無法忍受的。所以這個時候同步信息的話必須采取異步的方式,也就是用戶在你的網(wǎng)站發(fā)表一個狀態(tài)服務(wù)端只是把這條狀 體對應(yīng)的信息存儲起來, 然后就提示用戶發(fā)表成功, 具體的信息同步是后端以腳本的方式異步運(yùn)行的。用戶通俗的話來說就是用戶先發(fā)表后同步,由于校本執(zhí)行速度很快, 用戶幾乎感覺不出來同步的時間差。你也許會問我怎么知道哪些信息要同步到第三方平臺去呢,這也就是使用redis使用緩沖隊(duì)列服務(wù)器的原因,當(dāng)用戶發(fā)表信 息后,我們同事把信息寫入緩沖隊(duì)列服務(wù)器,后臺腳本會不停的去檢查緩沖隊(duì)列服務(wù)器是否有數(shù)據(jù),如果有數(shù)據(jù)則取出發(fā)送到第三方開放平臺。
3. 系統(tǒng)擴(kuò)展性
a). 如果腳本處理過慢,可能造成緩沖隊(duì)列擁堵,我們可能通過擴(kuò)展后臺腳本個數(shù)來加快同步到第三方平臺的處理速度。
b). 如果需要同步的信息量過大, 造成寫入隊(duì)列的并發(fā)數(shù)極大,肯能通過擴(kuò)展隊(duì)列服務(wù)來達(dá)到分散減壓的目的(基本不會出現(xiàn))。
5. 效率如何 假設(shè)你的網(wǎng)站每天產(chǎn)生100W條信息 需要同步到第三方平臺。
redis官方測試數(shù)據(jù)(SET操作每秒鐘 110000 次,GET操作每秒鐘 81000 次)。
一個腳本每天的同步量, 86400/2 = 43200, (假設(shè)平均每同步一條信息花費(fèi)時間為2s,) 一個腳本每天大概可以同步4W條數(shù)據(jù)。
平均每秒同步的數(shù)據(jù) 100W/86400 < 12個 高峰時期擴(kuò)大十倍也就是每秒 120條信息。由此可見每天100W 甚至 1000W的信息同步量對redis來說都是沒有任何壓力的。
我們只需要加快腳本處理的速度即可, 100W數(shù)據(jù)只需要同事25個腳本負(fù)責(zé)同步即可,(數(shù)據(jù)量增加了,擴(kuò)展起來非常方面)。
總結(jié),此方式已經(jīng)應(yīng)用于國內(nèi)某LBS社區(qū),每天的PV大概300W,產(chǎn)生的信息同步量每天大概2W左右。當(dāng)前是2個腳本負(fù)責(zé)同步相關(guān)操作,隊(duì)列里面基本沒有任何擁堵信息。