微信朋友圈,你知道是怎么設計的嗎?
微信朋友圈是怎么設計的?本文筆者梳理了朋友圈的操作流程,并向我們介紹了它背后的設計思路。
當你一秒鐘拍了張自拍,一個小時修了下圖,然后打開朋友圈,點擊發送的那一刻,后臺到底有多少工作在進行著?
我們太習以為常,沒有意識到這背后還會有多復雜的邏輯。為什么每天幾十億量級的朋友圈發布量,都沒有讓微信崩潰過?
我看了朋友圈負責人陳明的演講,他分享了微信的架構,數據結構設計等。演講很好看,很實在,但有的時候程序員講話需要努力下才能理解,本文我將從一個產品的角度,盡量平民化的闡述整個邏輯,寫下的自己的思考和理解,希望大家可以有所收獲。
一、發朋友圈
1. CDN
當我們把精心修好的圖,朋友圈點擊發送。是不是有一種秒發零延遲的感覺?
那是因為,我們在發朋友圈時,第一步動作是把你發布的圖片傳到騰訊就近的CDN節點,這時是不經過微信后臺服務器的,所以會很快很快。
(CDN這里就不展開了,可以想象下淘寶的菜鳥倉配網絡一樣,先把貨發到倉配點,然后再配送給你。)
2. 發布表
當圖片成功傳到CDN后,這時微信客戶端才會通知朋友圈CDN,說這里有個人發了個自拍耶。
你發朋友圈時,很可能會屏蔽掉你EX或領導老板之類的對吧。
所以呢,微信朋友圈的后臺會把你發的圖片、這個圖片的URL地址、然后誰能看到這圖片(很關鍵)等等信息寫到發布表里。
3. 相冊表
當發布表寫完后,會把你這自拍索引到你的相冊表里,相冊表實際上很小,因為它就存了個索引指針而已。
也就是說,當你打開自己的相冊列表看到你過去發的成百上千的照片時,都是根據索引去發布表里取的數據。
4. 時間線
當相冊表寫好了,就會到一個很關鍵的步驟了,會觸發一個批處理動作。
就是會有個跑腿的,跑過去通知你所有的通訊錄好友,說你發了個自拍,然后就會把你發的這個自拍插入到你好友的時間線里。
當你好友刷新時,就會看到你的自拍了!Oh Yeah!
當然這前提是,你的好友沒有刪除你、拉黑你、屏蔽你、不看你。扎心,我們后面會講這些過濾的權限問題是怎么處理的。
二、刷朋友圈
好了。假設小王是你的微信好友,工作了五分鐘累的不行了,休息休息刷下朋友圈。
當小王點開朋友圈時,會拉他自己的時間線,這時他的時間線會得知有個你的新發布,小王的微信客戶端會根據你的發布的元數據去CDN找這個圖片的URL,拉到本地,然后小王就能看到你發的自拍了。
三、刪除、拉黑、標簽、不讓他看、三天可見該怎么辦
1. 誰可以看
當我們發朋友圈的時候,會有個誰可以看的選項,默認是公開,也就是你所有的好友(非刪除、黑名單狀態)都會看到。
除此,還有部分可見和不給誰看的選項,這里就是第一步的權限控制。
但這里控制的是,你發的這個照片,要加到哪些好友的時間線里;也就是說,假設你選擇了不給“領導”標簽下的人看,那領導標簽下的所有人的時間線都不會加上你的這條新朋友圈。
2. 標簽這里要多說一句
標簽實際上是幫助你更方便選擇可見好友范圍的一個東西,只有這一個作用。
舉個例子:比如說你發了自拍,選擇“男神”標簽發了出去,此時“男神”標簽下有吳彥祖和古天樂兩個人,那么吳彥祖和古天樂都能刷到你的自拍。
這時呢,你又把劉德華加到“男神”標簽下,劉德華是不會刷到你發的這張自拍的!
同理,你漸漸厭倦了古天樂,把古天樂從“男神”標簽里移了出去,古天樂依然可以看到你發的這個自拍哦。
明白了吧,你通過標簽選擇的可見范圍,都是具體到標簽下的人的。在你發布的那一瞬間,發布加到了誰的時間線里,就都定下來了。所以無論后面怎么調整標簽下的人,都不會影響這條已經發出去的自拍了。
那你說,我就是不想讓古天樂看我的這張自拍怎么辦?好辦,你可以選擇刪除他、拉黑他、不讓他看、自拍設置成僅自己可見。
3. 這就是第二步的權限控制了
當小王刷朋友圈時,上面提到會更新他的時間線。
這個時候,小王的客戶端還會做一個事情:就是查一遍權限。
也就是說,查一下時間線上的發布,有沒有是屬于不給小王看的。包括:刪除、拉黑、不給他看、三天可見,這些都是可以隨時變更設置的,因此小王每一次刷新朋友圈,時間線都會被篩選一下。
那就有寶寶說,會不會太麻煩了呀,每次都要查嗎?
實際上不太麻煩。因為首先在你發布時,就確定了要加到哪些好友的時間線里,因此小王在刷朋友圈時,不用去每個好友的相冊里去撈,這相冊還有可能存在幾百個不同的服務器里。而只需要讀自己的時間線這一個動作就行了,這樣的話效率就高上天了。
而刪除、拉黑、不給他看、三天可見這些權限的設置,并不是說大家時時刻刻每天在改的東西,可能好久才改一次。
因此小王的微信客戶端一般會把這些權限數據緩存下來,不需要每次都去拉這個數據,只有變動的時候才去變更一下。所以,怎么說呢,問題不大。
四、評論和贊
理解了上面講的整個發布表、相冊表、時間線這些東西后,評論和贊就相對好理解了。
微信后臺會專門有張表存儲評論和贊這些數據,假設三三是你和小王的共同好友,他刷朋友圈時,看到了你的這張自拍。那么會同時去評論表里拉這條發布的小王相關的評論和贊,放到這條朋友圈下面。
如果不是你和小王的共同好友,那就看不到這評論和贊。
以上,就是發朋友圈、刷朋友圈背后的一些東西。多去觀察、思考下周圍天天在用的東西,還是十分有意思的。
本文由@2B產品七七 原創發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自Unspalsh, 基于CC0協議
按這個分析,也就是客戶端會把當前用戶的所有好友的三天可見,是否對當前用戶拉黑,或不給當前用戶看都會緩存下來,并且好友的這些設置變化的時候,會同步到當前用戶,也就是當前用戶獲取完時間線數據后再本地再次根據權限過濾,那我想問下,如果是看單個好友的朋友圈呢,獲取到的是已經過濾完的數據還是單個好友的完整朋友圈在本地再次過濾
背后的邏輯梳理的很清晰明了