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