天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

微博feed系統的推(push)模式和拉(pull)模式和時間分區拉模式架構探討

     sns系統,微博系統都應用到了feed(每條微博或者sns里的新鮮事等我們稱作feed)系統,不管是twitter.com或者國內的新浪微博,人人網等,在各種技術社區,技術大會上都在分享自己的feed架構,也就是推拉模式(timyang上次也分享了新浪微薄的模式)。下面我們就微博的feed推拉(push,pull)模式做一下探討,并提出新的時間分區拉模式

      眾所周知,在微博中,當你發表一篇微博,那么所有關注你的followers(粉絲)都會在一定的時間內收到你的微薄,這有點像群發一封郵件,所有的抄送者都會在一定的時間內收到。到這里,你可能覺得沒有什么難度。我們看下下面的截圖:

    

       圖一:新浪微博姚晨

         圖二:twitter上馮大輝

     新浪微博的姚晨粉絲有2594751,她發表任何一篇微博,都需要2594751個粉絲在一定的時間內收到,twitter的馮大輝發表一篇的話,需要19868個followers收到。

     相反,姚晨需要收到他關注的545個人的所有更新,馮大輝需要收到他關注的2525個人的所有更新。到這里,你是不是感覺到有那么一點點小挑戰呢?

     下面我們看下微博一般的整體結構圖:

     

                 圖三:微博整體結構

       圖中展示了微博的整體數據流程,先了解下整體的數據結構,沒有涉及到followers等的推拉模式處理。下面我們再看下推模式(push):

          圖四:推模式結構

   推模式需要把一篇微博推送給所有關注他的人(推給所有的粉絲),比如姚晨,我們就需要推送給2594751個用戶的feeds表中。當然,feeds表可以很好的進行sharding,存儲也都是一些數字型的字段,存儲空間可能不是很大,用戶在查詢自己關注的所有人的feed時,速度快,性能非常高,但是推送量會非常大,姚晨發表一篇,就會產生200多萬條數據。試想,一個大量用戶的微薄系統通過使用推模式,是不是會產生非常驚人的數據呢?

    下面看下拉模式(pull)

            圖五:拉模式

     拉模式只需要用戶發表微博時,存儲一條微博數據到feeds表中(feeds表可以是一個臨時表,只保存近期可接受范圍的數據).用戶每次查詢feed時都會去查詢feeds表。比如姚晨打開自己的微薄首頁,就產生:SELECT id FROM feeds where uid in(following uid list) ORDER BY id DESC LIMIT n(查詢最新的n條),緩存到memcached

uidlist=>{data:id list,timeline:上次查詢出來的最新的一條數據的時間}

再次刷新:SELECT id FROM feeds where uid in(following uid list) AND timeline>(memcached存儲的上次的timeline) ORDER BY id DESC LIMIT n

 

    這種模式實現起來也是比較簡單和容易的,只是在查詢的時候需要多考慮下緩存的結構。但是feeds表會產生很大的壓力,怎么說feeds表也要保存最近十天半個月的數據吧,對于一個大點的系統,這會產生比較大的數據,如果following的人數比較多,數據庫的壓力就會非常大。而且一般在線的用戶,客戶端都會定期掃描,又會增加很大的壓力,這在查詢性能上沒有推模式的效率高。

     下面我們在對拉模式做一下改進優化

     圖五:拉模式(pull)-改進(時間分區拉模式

           拉模式的改進主要是在feeds的存儲上,使用按照時間進行分區存儲。分為最近時間段(比如最近一個小時),近期的,比較長時期等等。我們再來看下查詢的流程,比如姚晨登陸微博首頁,假設緩存中沒有任何數據,那么我們可以查詢比較長時期的feeds表,然后進入緩存。下一次查詢,通過查詢緩存中的數據的timeline,如果timeline還在最近一個小時內,那么只需要查詢最近一個小時的數據的feed表,最近一個小時的feeds表比圖四的feeds表可要小很多,查詢起來速度肯定快幾個數量級了。

          改進模式的重點在于feeds的時間分區存儲,根據上次查詢的timeline來決定查詢應該落在那個表。一般情況下,經常在線的用戶,頻繁使用的客戶端掃描操作,經常登錄的用戶,都會落在最近的feeds表區間,查詢都是比較高效的。只有那些十天,半個月才登錄一次的用戶需要去查詢比較長時間的feeds大表,一旦查詢過了,就又會落在最近時間區域,所以效率也是非常高的。

         關于時間的分區,需要根據數據量,用戶訪問特點進行一個合理的切分。如果數據發表量非常大,可以進行更多的分區。

        上面介紹的推模式和拉模式都有各自的特點,個人覺得時間分區拉模式彌補了圖四的拉模式的很大的不足,是一個成本比較低廉的解決方案。當然,時間分區拉模式也可以結合推模式,根據某些特點來增加系統的性能。

        后記:本文的目的是介紹時間分區拉模式,本人對新浪微博和twitter等的推拉模式的細節并不清楚。

it知識庫微博feed系統的推(push)模式和拉(pull)模式和時間分區拉模式架構探討,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久亚洲成a人片 | 中文字幕精品在线观看 | 欧美国产精品久久久乱码 | 成人免费观看在线视频 | 日本无码专区亚洲麻豆 | 久久这里只有热精品18 | 99亚洲精品自拍AV成人软件 | 国产 在线 亚洲 欧美 动漫 | 成人国产亚洲精品A区天堂蜜臀 | 日韩精品AV一区二区三区 | 亚洲国产在线99视频 | 亚洲1卡二卡3卡4卡新区在线 | 三级黄色高清视频 | 善良的小峓子2在钱中文版女主角 | 成人国产AV精品久久久久 | 亚洲综合中文字幕无线码 | 中文成人在线 | 一本道亚洲区免费观看 | 成人短片迅雷下载 | 亚洲精品人成电影网 | 睡觉被偷偷进入magnet | 爱爱好爽好大好紧视频 | 亚洲色婷婷久久精品AV蜜桃久久 | 秋霞伦理机在线看片 | 中文字幕视频在线免费观看 | 国产成人精品123区免费视频 | 亚洲精品成人无码区一在线观看 | 久久国产精品二区99 | 97精品一区二区视频在线观看 | 亚洲精品黄色 | 九九久久精品国产 | 亚洲伊人久久精品 | 亚洲综合色婷婷在线影院 | 暖暖 免费 高清 日本视频5 | 秋霞午夜理论理论福利无码 | 午夜伦理 第1页 | 欧美精品乱码99久久蜜桃 | 欧美深深色噜噜狠狠yyy | 亚洲精品AV一二三区无码 | 毛片999 | 高清国产在线播放成人 |