關係鏈的特點之讀擴散和寫擴散

2021-06-27 12:10:03 字數 1071 閱讀 9839

inbox: 收件箱,你收到的訊息,即你所關注的人發布的訊息。

outbox: 發件箱,你發布的訊息。

寫擴散(push)

讀擴散(pull)

該方式為每個使用者維護乙個傳送列表,記錄該使用者所有發表過的訊息索引。

優點:寫很輕,節省空間。使用者每發布一條訊息,僅需更新自己的outbox。

缺點:讀操作很重,計算量大。假設你收聽了1k使用者,則初始化時,需要從1k個使用者的outbox拉取訊息,然後計算獲得最新的n條訊息。

混合模式(push+pull)

該方式既為讀寫擴散的結合,根據使用者followers的數量來決定是讀擴散還是寫擴散。例如followers大於1k的,則使用讀擴散,否則使用寫擴散。

2、關於cache

對於乙個千萬級甚至億級使用者的大型**來說,合理使用cache至關重要。

乙個使用者的核心資料由如下幾個部分組成:inbox,outbox,關係鏈,訊息內容。

outbox:快取一定數量(例如200)條最近發表的訊息。

訊息內容:按內容年齡快取;一般需要多份支援容災;需要快取xml,json,rss,atom等多種格式的快取以供api使用。

以twitter為例,其將cache分為四類:vector cache,row cache,page cache,fragment cache,均使用memcached實現。其中:

下圖為twittercache架構圖:

twitter為啥要為api通道設定fragment cache和page cahce呢?其原因是twitter的80%流量來自api。

訊息發布流程:

更新自己的outbox

載入followers列表

更新followers inbox

獲取首頁流程:

檢查inbox cache是否可用

獲取關注列表

聚合內容,獲得訊息索引

根據索引,返回最終聚合的訊息內容

3、關於儲存

4、關於洪峰處理。

一般用非同步佇列處理方式。訊息佇列產品有:kestrel(twitter使用scala實現),rabbitmq(使用erlang實現),memcacheq。

讀《親密關係》的收穫

親密關係 克里斯多福 孟 一 主要內容 本書主要講述在伴侶之間的親密關係的變化,從 月暈現象 到幻滅 內省,最後獲得啟示的過程。在 月暈 階段,我們所看到的皆是對方的美好,隨著時間的推移以及相互了解的加深,我們漸漸進入了幻滅階段,開始產生嫌隙 排斥,甚至憎惡等情緒。而進入內省階段,我們開始審視自己的...

Python之 set的特點

set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷乙個元素是否在set中速度很快。set儲存的元素和dict的key類似,必須是不變物件,因此,任何可變物件是不能放入set中的。最後,set儲存的元素也是沒有順序的。set特點 速度快 元素不可變 儲存的元素沒有順序 set的這些...

Python之 set的特點

set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷乙個元素是否在set中速度很快。set儲存的元素和dict的key類似,必須是不變物件,因此,任何可變物件是不能放入set中的。最後,set儲存的元素也是沒有順序的。set的這些特點,可以應用在哪些地方呢?星期一到星期日可以用字串...