TimeLine引擎
一種基於範圍(如關注賬號、關係圈,附近的人等)推送,範圍裏面的人發佈各種內容,內容按照不同的組織形式展現的流。如將用戶關注的賬號的動態流或內容流整合後,按照時間等條件排序,顯示成流狀的形式。如:微淘,微博,朋友圈、訂閱號等類似場景。
基本概念
feed:一條內容,如一條微博、朋友圈。
這裏把Feed看做 Email,每個用戶都有一個收件箱,每個公衆號(或商家)都有一個發件箱。
Inbox收件箱:用戶收到的內容箱子
Outbox發件箱:公衆號(或商家)已發佈的內容箱子
常見的Timeline模式
1、拉模式
發佈:存到公衆號(或商家)自己的Outbox(輕)
查看:所有關注公衆號(或商家)的Outbox(重)
缺點:
只適用於天生基於穩定的賬號關係(公衆號-粉絲用戶),無法支持如“個性化”和“廣告”等“定向推送”的功能,比如,公衆號就希望給某些用戶推送Feed,而不管用戶和公衆號之間的關係。
2、推模式
發佈:存到所有關注自己的用戶的Inbox(重)
查看:直接訪問用戶自己的Inbox(輕)
缺點:
拉模式以公衆號outbox爲維度存儲,一條Feed只存一份索引信息;推模式以用戶inbox爲維度存儲,一條Feed要存許多份索引信息,存儲空間成倍增長。
3、推拉模式結合
queue推送隊列:每個用戶有一個接收公衆號(或商家)推送的隊列queue,公衆號(或商家)定向推送的內容就存儲在該queue中。
inbox投遞郵箱(跟最上面說的inbox不一樣):每個用戶有一個記錄已經投遞內容的郵箱inbox,內容包括拉的timeline和推的queue兩部分,主要用於記錄已經推送給客戶端的數據,不會再被推送,且歷史順序穩定。
timeline系統參數
5-10ms
100多臺機器
10萬級別商家發件箱,存在熱點數據,單機全量熱點數據緩存。
多級緩存:本地堆外緩存(ohc、kv-v爲list、98%命中率、lru)> tair(mdb) > DB(分庫分表)
插入時失效緩存,查詢時更新。
數據結構以索引爲單位,可排序和過濾。
先排序(list自帶sort)、過濾(ANTR表達式)、返回數據