社区系统调研
1、http://www.chinaz.com/web/2017/1108/825814.shtml
知乎回答的動(dòng)態(tài)排名機(jī)制——威爾遜算法
我們?cè)谥踅?jīng)常會(huì)看到有的答案有幾萬(wàn)的贊竟然排在幾百贊答案的后面,這個(gè)就是知乎區(qū)別于傳統(tǒng)的論壇、貼吧單純的根據(jù)發(fā)布時(shí)間或者點(diǎn)贊數(shù)來(lái)排名的特殊機(jī)制,那么這個(gè)機(jī)制就讓時(shí)間比較晚的優(yōu)質(zhì)回答有了更多的曝光的機(jī)會(huì),那么具體知乎這個(gè)排名算法是在怎么計(jì)算的呢?這個(gè)算法被叫做威爾遜算法,公式的話(huà)太復(fù)雜這里不說(shuō),只是說(shuō)一下他是怎樣運(yùn)作的。
先來(lái)看一下知乎的產(chǎn)品設(shè)計(jì)師黃濤在知乎產(chǎn)品專(zhuān)欄是怎么說(shuō)的:
舉個(gè)例子的話(huà),比如有一個(gè)新的回答,你通過(guò)讓朋友點(diǎn)贊,短時(shí)間內(nèi)獲得了一個(gè)不錯(cuò)的排名,但是后續(xù)因?yàn)橘|(zhì)量不是很優(yōu)質(zhì),新看到的用戶(hù)不為你的答案買(mǎi)單,點(diǎn)了反對(duì),那么這個(gè)答案又會(huì)重新計(jì)算排名,可能又回到一個(gè)比較靠后的位置。
除此之外還加入了更復(fù)雜的用戶(hù)擅長(zhǎng)話(huà)題經(jīng)驗(yàn)權(quán)重,比如說(shuō)張君比較擅長(zhǎng)互聯(lián)網(wǎng)的話(huà)題,在這個(gè)話(huà)題下方有多個(gè)優(yōu)質(zhì)的回答,那么他在互聯(lián)網(wǎng)話(huà)題里面的投票的權(quán)重就高于饅頭這種普通用戶(hù)的投票,可能他投 1 票就相當(dāng)于饅頭的 100 票(這個(gè)數(shù)據(jù)是我腦補(bǔ)的,只是為了方便理解,不要當(dāng)真),所以在知乎有機(jī)會(huì)的話(huà)勾搭下大V有機(jī)會(huì)讓他幫你點(diǎn)個(gè)贊對(duì)于你的回答增加曝光是非常有幫助的。
因此未來(lái)我們會(huì)看到新創(chuàng)作的更受用戶(hù)喜歡內(nèi)容有機(jī)會(huì)獲得更多點(diǎn)贊的機(jī)會(huì),快速獲得靠前的排序,低質(zhì)內(nèi)容則會(huì)長(zhǎng)期保持在底部。對(duì)排名有影響的因素有點(diǎn)贊、反對(duì)并不是所有的回答最終都會(huì)獲得很多投票,大體上獲得投票總數(shù)較多的回答仍然會(huì)排在投票較少的回答前面,所以想要做好知乎營(yíng)銷(xiāo)也得首先保證自己的內(nèi)容是用戶(hù)喜歡的才會(huì)有更多的曝光機(jī)會(huì)。
知乎消息機(jī)制——類(lèi)似灰度測(cè)試的機(jī)制
知乎的消息分為 4 類(lèi):分別為關(guān)注的人、問(wèn)題和專(zhuān)欄有了新回答;新關(guān)注我的人;我獲得的贊與感謝;私信,其他的知乎的EDM郵件、每日精選等這里不討論。
知乎的關(guān)注機(jī)制,在一般情況下,知乎的消息都是默認(rèn):接收所有人的消息。可以讓用戶(hù)關(guān)注到他們感興趣的問(wèn)題的新的回答,也給了新回答的更多的曝光機(jī)會(huì)。
關(guān)注的人、問(wèn)題和專(zhuān)欄:關(guān)注的人、問(wèn)題或者專(zhuān)欄有了新的回答都會(huì)出現(xiàn)在你的消息列表里面,這個(gè)其實(shí)是經(jīng)過(guò)允許的消息通知,推送的都是用戶(hù)感興趣的內(nèi)容,這種消息的打開(kāi)率是比較高的。這里要說(shuō)一下的就是你關(guān)注的人給其他人點(diǎn)贊的動(dòng)態(tài)會(huì)出現(xiàn)在首頁(yè)的信息流里面。
新關(guān)注我的人:所有新關(guān)注我的人都會(huì)有消息通知,如果覺(jué)得消息太多可以選擇屏蔽掉。
獲得的贊與感謝:就是你的回答、評(píng)論有了新的贊或者感謝,這里的感謝對(duì)排名沒(méi)有影響。
私信:這個(gè)包含系統(tǒng)消息,以及站內(nèi)私信,站內(nèi)私信用于知乎的一些系統(tǒng)通知,或者用戶(hù)間的私信,知乎把他單獨(dú)拿出來(lái)也是為了怕重要信息被其他信息淹沒(méi)了。
知乎也為了減少用戶(hù)不喜歡的低質(zhì)量的回答給用戶(hù)推送消息造成的困擾,還有一個(gè)類(lèi)似灰度測(cè)試的機(jī)制,簡(jiǎn)單來(lái)說(shuō),就是某個(gè)問(wèn)題下方有一個(gè)新的回答以后,選擇關(guān)注這個(gè)問(wèn)題的人不會(huì)立刻全部收到通知,而是先有一小部分人會(huì)收到通知,根據(jù)這一小部分人的投票來(lái)決定是否推送消息給更多的人,如果先收到通知的這一小部分人覺(jué)得這個(gè)回答很贊,選擇了點(diǎn)贊的人更多,那么系統(tǒng)會(huì)把這個(gè)回答的消息推送給其他的人,如果先收到通知的這一小部分人覺(jué)得這個(gè)回答很差,選擇無(wú)視或者反對(duì)的人更多,那么這個(gè)回答的消息就不會(huì)推送給更多的人。
比如,某個(gè)同學(xué)7. 24 日回答了問(wèn)題《面試的時(shí)候,如何做自我介紹》,當(dāng)時(shí)他的回答沒(méi)有人點(diǎn)贊,所以我沒(méi)有收到消息通知。
接下來(lái)1- 2 天內(nèi),他的答案被收到消息提醒的人看到,并選擇了點(diǎn)贊,那么就會(huì)推送給更多的人,于是我在7. 25 日收到了他的回答的提醒。
?
- https://www.jianshu.com/p/87d068d79dc7
受眾
1.受眾的特點(diǎn)
《知乎用戶(hù)報(bào)告》顯示,從性別、年齡以及地域等多個(gè)維度看,知乎用戶(hù)呈現(xiàn)多元化分布的趨勢(shì)。
性別上,知乎男性用戶(hù)占比 53.3%,女性用戶(hù)占比 46.7%,男女比例正在接近均衡。
年齡上,36-40 歲的用戶(hù)在知乎占比 14%,24 歲以下的新新人類(lèi)和 25-35 歲的社會(huì)中堅(jiān),則分別占比 22% 和 61% ,后兩類(lèi)用戶(hù)正是知乎的核心群體。
地域上,知乎用戶(hù)的分布相對(duì)均衡,從一線(xiàn)城市到五線(xiàn)城市都有知乎的用戶(hù),其中一線(xiàn)、新一線(xiàn)、二線(xiàn)城市用戶(hù)占比為 41.4%。可以說(shuō),新興中產(chǎn)和影響力人群已經(jīng)成為知乎用戶(hù)的主流。
關(guān)于簡(jiǎn)書(shū)的受眾,并沒(méi)有公開(kāi)數(shù)據(jù)。不過(guò),簡(jiǎn)書(shū)創(chuàng)始人林立 2015 年底在接受 ifanr 網(wǎng)的采訪(fǎng)中曾提到,根據(jù)簡(jiǎn)書(shū)對(duì)用戶(hù)的抽樣調(diào)查,發(fā)現(xiàn)簡(jiǎn)書(shū)的用戶(hù)群體高度年輕化,超過(guò) 60% 的用戶(hù)是 90 后,00 后的比例在 20% 左右,剩下則是 80 后。其中大學(xué)學(xué)歷及以上占 75%,高中學(xué)歷占 15% 左右。
2.受眾的行為動(dòng)機(jī)
《知乎用戶(hù)報(bào)告》顯示,用戶(hù)使用知乎的主要目的是學(xué)習(xí)知識(shí)與自我提升,關(guān)注討論興趣話(huà)題,提問(wèn)和查找專(zhuān)業(yè)領(lǐng)域知識(shí),分享自己的知識(shí)和經(jīng)驗(yàn),追熱點(diǎn),結(jié)識(shí)大牛等等。
簡(jiǎn)書(shū)最開(kāi)始是做編輯器,只提供寫(xiě)作,慢慢才發(fā)展出瀏覽功能,所以,簡(jiǎn)書(shū)的受眾和傳播者一直是高度重合的,寫(xiě)作是簡(jiǎn)書(shū)用戶(hù)使用簡(jiǎn)書(shū)的最重要的動(dòng)機(jī)。
3.受眾的價(jià)值
《知乎用戶(hù)報(bào)告》顯示,知乎高學(xué)歷人群占比達(dá)到80.1%,碩士及以上人群比例高于總體水平,近兩成用戶(hù)擁有海外留學(xué)經(jīng)歷;從月收入分布來(lái)看,占比 76% 的高收入人群和小康人群是使用知乎的主力,月收入 1 萬(wàn)元以上用戶(hù)占比 30%,2 萬(wàn)元以上家庭月收入用戶(hù)占比 41%;可投資資產(chǎn) 10 萬(wàn)元以上的用戶(hù)占比 36% 。
知乎用戶(hù)的高學(xué)歷、高收入、高購(gòu)買(mǎi)力讓其整個(gè)受眾群體呈現(xiàn)出高價(jià)值特性。在受眾價(jià)值上,短期內(nèi),簡(jiǎn)書(shū)是無(wú)法企及的。
2.平臺(tái)引導(dǎo)型
1)平臺(tái)認(rèn)證
知乎的用戶(hù)標(biāo)識(shí)分為兩部分:「優(yōu)秀回答者」和「?jìng)€(gè)人與機(jī)構(gòu)認(rèn)證」。
「優(yōu)秀回答者」在知乎貢獻(xiàn)了大量專(zhuān)業(yè)內(nèi)容,他們大多數(shù)人深耕于自己的專(zhuān)業(yè)領(lǐng)域,持續(xù)在知乎上分享著知識(shí)、經(jīng)驗(yàn)和見(jiàn)解。知乎通過(guò)算法將這些優(yōu)秀回答者識(shí)別出來(lái),在他們的個(gè)人主頁(yè)和用戶(hù)名旁邊帶上了橙色的標(biāo)識(shí)。
「優(yōu)秀回答者」的計(jì)算主要參考用戶(hù)在特定領(lǐng)域內(nèi)的話(huà)題權(quán)重。高權(quán)重用戶(hù)的回答會(huì)具有一定的排序優(yōu)勢(shì)。其投票會(huì)對(duì)回答排序有更大的影響。提高自己在知乎某個(gè)領(lǐng)域下的權(quán)重只有一個(gè)方法:在這個(gè)領(lǐng)域下書(shū)寫(xiě)高質(zhì)量的回答。
知乎目前已開(kāi)放認(rèn)證的機(jī)構(gòu)認(rèn)證領(lǐng)域有:
有正規(guī)資質(zhì)的組織機(jī)構(gòu)
目前已開(kāi)放認(rèn)證的個(gè)人認(rèn)證領(lǐng)域有:
公眾人物,包括:知名作家、導(dǎo)演、演員、歌手、運(yùn)動(dòng)員等(目前僅接受運(yùn)營(yíng)邀請(qǐng)嘉賓開(kāi)通);
科研教學(xué)人員,包括國(guó)內(nèi)外知名高校的教研人員,博士學(xué)歷、博士在讀;
知名企業(yè)中高層管理人員;
金融領(lǐng)域執(zhí)業(yè)資格證持證人,包括:注冊(cè)會(huì)計(jì)師(CPA)等;
法律服務(wù)業(yè),包括執(zhí)業(yè)律師、律師事務(wù)所合伙人、專(zhuān)利代理人;
醫(yī)療行業(yè),包括執(zhí)業(yè)醫(yī)師;
工程師,包括:一級(jí)注冊(cè)建筑師、一級(jí)注冊(cè)建造師等。
知乎的身份認(rèn)證本身并不包含任何差異化的權(quán)限或權(quán)益,只是代表著交流和討論的誠(chéng)意。
簡(jiǎn)書(shū)的用戶(hù)標(biāo)識(shí)主要有:「簽約作者」和「優(yōu)質(zhì)作者」
目前簡(jiǎn)書(shū)簽約作者下設(shè)兩個(gè)方向,出版方向與課程方向,希望申請(qǐng)簽約作者,需通過(guò)出版(即簡(jiǎn)書(shū)版權(quán)作者)和課程(即簡(jiǎn)書(shū)大學(xué)堂講師)兩個(gè)方向來(lái)進(jìn)行申請(qǐng),純優(yōu)質(zhì)內(nèi)容作者將不再接受申請(qǐng)。
不同于簽約作者致力于版權(quán)及課程領(lǐng)域的開(kāi)發(fā)合作,內(nèi)容領(lǐng)域優(yōu)質(zhì)作者是從不同領(lǐng)域的內(nèi)容維度,對(duì)于簡(jiǎn)書(shū)作者文章的認(rèn)可。目前主要是邀請(qǐng)制,也可以自薦。
目前開(kāi)放認(rèn)證的領(lǐng)域有:科技、歷史、人文、故事、影視、旅行、生活、觀察、連載小說(shuō)、漫畫(huà)、體育、二次元、經(jīng)管、游戲、兒童故事、程序員、科普等。
和知乎不同的是,簡(jiǎn)書(shū)內(nèi)容領(lǐng)域優(yōu)質(zhì)作者享有一定的特權(quán),比如,在投稿專(zhuān)題和首頁(yè)時(shí)享有無(wú)需審核的權(quán)利。
通過(guò)對(duì)比可以發(fā)現(xiàn),知乎在商業(yè)化進(jìn)程上走得更遠(yuǎn),而簡(jiǎn)書(shū)對(duì)于優(yōu)質(zhì)用戶(hù)變現(xiàn)的想法則更為成熟。?
2)平臺(tái)推薦
知乎在特定專(zhuān)題主頁(yè)下,設(shè)置了活躍回答者推薦版塊,官方并未公布具體算法,但通過(guò)觀察可以發(fā)現(xiàn),活躍回答者和優(yōu)秀回答者的重合度非常高。
傳播效果
1.分發(fā)機(jī)制
知乎采用“去中心化”的內(nèi)容運(yùn)營(yíng)方式,給用戶(hù)很高的自由度,也促使用戶(hù)更快地獲取社交關(guān)系。知乎的首頁(yè)經(jīng)歷了多次改版,但總的來(lái)說(shuō)是“以人為本”的推薦機(jī)制,絕大部分內(nèi)容是用戶(hù)關(guān)注的人和話(huà)題相關(guān)內(nèi)容。
當(dāng)用戶(hù)在問(wèn)題下進(jìn)行回答后,相關(guān)的回答也會(huì)陸續(xù)分發(fā)給問(wèn)題的關(guān)注者。編輯推薦以及熱門(mén)內(nèi)容則顯示在第二個(gè)欄目中,曝光量大幅降低。
而簡(jiǎn)書(shū)采用“中心化”的內(nèi)容運(yùn)營(yíng)思路,用戶(hù)通過(guò)“投稿”機(jī)制向?qū)n}或主頁(yè)進(jìn)行投稿,簡(jiǎn)書(shū)的內(nèi)容運(yùn)營(yíng)團(tuán)隊(duì)和相關(guān)專(zhuān)題主編,通過(guò)人工篩選的方式,選出合適的稿件投放在首頁(yè)。
簡(jiǎn)書(shū)首頁(yè)除了人工篩選推薦的稿件外,由用戶(hù)互動(dòng)產(chǎn)生的熱門(mén)內(nèi)容也獲得了很重要的展示位,比如新上榜、7 日熱門(mén)、30 日熱門(mén)等。
簡(jiǎn)書(shū)用戶(hù)關(guān)注的內(nèi)容則間接顯示在第二個(gè)欄目中,曝光量大幅降低。
可以看到,知乎和簡(jiǎn)書(shū)的分發(fā)邏輯是完全不同的。在知乎上想要獲得更大曝光,最好的辦法是尋找熱門(mén)話(huà)題和高關(guān)注度的問(wèn)題進(jìn)行回答,而簡(jiǎn)書(shū)上最重要的是迎合各專(zhuān)題及首頁(yè)的編輯,獲得上首頁(yè)的機(jī)會(huì)。
2.?排序機(jī)制
根據(jù)知乎產(chǎn)品總監(jiān)@黃濤的說(shuō)法,老版知乎回答的排序算法可以簡(jiǎn)化成:
得分 = 加權(quán)贊同數(shù) - 加權(quán)反對(duì)數(shù)
新版算法在此基礎(chǔ)上進(jìn)行了改進(jìn),增加了“贊同/反對(duì)”這一變量,主要的目的是,使得新增的優(yōu)質(zhì)回答能夠有機(jī)會(huì)排到前面,綜合起來(lái),可以總結(jié)出影響知乎回答排序的主要因素:
獲得贊同會(huì)使回答的排序上升,獲得反對(duì)則會(huì)下降
獲得高權(quán)重用戶(hù)的贊同很關(guān)鍵
“贊同/反對(duì)”的值較高能獲得更多曝光
注:用戶(hù)在一系列相關(guān)話(huà)題下發(fā)布的全部回答所得到贊同、反對(duì)、沒(méi)有幫助票數(shù)決定用戶(hù)在該領(lǐng)域下的權(quán)重,在知乎上創(chuàng)作了專(zhuān)業(yè)、嚴(yán)謹(jǐn)、認(rèn)真的高質(zhì)量回答的人,在他擅長(zhǎng)的領(lǐng)域里,有更大的判斷力(即權(quán)重)。
可以看出,用戶(hù)的參與對(duì)知乎回答的排序影響非常大。而簡(jiǎn)書(shū)的排序則以時(shí)間軸為主,主要由編輯人工篩選排序。
?
?
?
?
?
?
?
?
http://kb.cnblogs.com/page/512250/ 也許很多人還不知道,知乎在規(guī)模上是僅次于百度貼吧和豆瓣的中文互聯(lián)網(wǎng)最大的UGC(用戶(hù)生成內(nèi)容)社區(qū)。知乎創(chuàng)業(yè)三年來(lái),從0開(kāi)始,到現(xiàn)在已經(jīng)有了100多臺(tái)服務(wù)器。目前知乎的注冊(cè)用戶(hù)超過(guò)了1100萬(wàn),每個(gè)月有超過(guò)8000萬(wàn)人使用;網(wǎng)站每個(gè)月的PV超過(guò)2.2億,差不多每秒鐘的動(dòng)態(tài)請(qǐng)求超過(guò)2500。
?
在ArchSummit北京2014大會(huì)上,知乎聯(lián)合創(chuàng)始人兼 CTO李申申帶來(lái)了知乎創(chuàng)業(yè)三年多來(lái)的首次全面技術(shù)分享(幻燈片下載)。本文系根據(jù)演講內(nèi)容整理而成。
?
初期架構(gòu)選型
?
在2010年10月真正開(kāi)始動(dòng)手做知乎這個(gè)產(chǎn)品時(shí),包含李申申在內(nèi),最初只有兩位工程師;到2010年12月份上線(xiàn)時(shí),工程師是四個(gè)。
?
知乎的主力開(kāi)發(fā)語(yǔ)言是Python。因?yàn)镻ython簡(jiǎn)單且強(qiáng)大,能夠快速上手,開(kāi)發(fā)效率高,而且社區(qū)活躍,團(tuán)隊(duì)成員也比較喜歡。
?
知乎使用的是Tornado框架。因?yàn)樗С之惒?#xff0c;很適合做實(shí)時(shí)Comet應(yīng)用,而且簡(jiǎn)單輕量,學(xué)習(xí)成本低,再就是有FriendFeed的成熟案例,Facebook的社區(qū)支持。知乎的產(chǎn)品有個(gè)特性,就是希望跟瀏覽器端建立一個(gè)長(zhǎng)連接,便于實(shí)時(shí)推送Feed和通知,所以Tornado比較合適。
?
最初整個(gè)團(tuán)隊(duì)的精力全部放在產(chǎn)品功能的開(kāi)發(fā)上,而其他方面,基本上能節(jié)約時(shí)間、能省的都用最簡(jiǎn)單的方法來(lái)解決,當(dāng)然這在后期也帶來(lái)了一些問(wèn)題。
?
最初的想法是用云主機(jī),節(jié)省成本。知乎的第一臺(tái)服務(wù)器是512MB內(nèi)存的Linode主機(jī)。但是網(wǎng)站上線(xiàn)后,內(nèi)測(cè)受歡迎程度超出預(yù)期,很多用戶(hù)反饋網(wǎng)站很慢。跨國(guó)網(wǎng)絡(luò)延遲比想象的要大,特別是國(guó)內(nèi)的網(wǎng)絡(luò)不均衡,全國(guó)各地用戶(hù)訪(fǎng)問(wèn)的情況都不太一樣。這個(gè)問(wèn)題,再加上當(dāng)時(shí)要做域名備案,知乎又回到了自己買(mǎi)機(jī)器找機(jī)房的老路上。
?
買(mǎi)了機(jī)器、找了機(jī)房之后又遇到了新的問(wèn)題,服務(wù)經(jīng)常宕掉。當(dāng)時(shí)服務(wù)商的機(jī)器內(nèi)存總是出問(wèn)題,動(dòng)不動(dòng)就重啟。終于有一次機(jī)器宕掉起不來(lái)了,這時(shí)知乎就做了Web和數(shù)據(jù)庫(kù)的高可用。創(chuàng)業(yè)就是這樣一個(gè)情況,永遠(yuǎn)不知道明早醒來(lái)的時(shí)候會(huì)面臨什么樣的問(wèn)題。
這是當(dāng)時(shí)那個(gè)階段的架構(gòu)圖,Web和數(shù)據(jù)庫(kù)都做了主從。當(dāng)時(shí)的圖片服務(wù)托管在又拍云上。除了主從,為了性能更好還做了讀寫(xiě)分離。為解決同步問(wèn)題,又添加了一個(gè)服務(wù)器來(lái)跑離線(xiàn)腳本,避免對(duì)線(xiàn)上服務(wù)造成響應(yīng)延遲。另外,為改進(jìn)內(nèi)網(wǎng)的吞吐量延遲,還更換了設(shè)備,使整個(gè)內(nèi)網(wǎng)的吞吐量翻了20倍。
?
在2011年上半年時(shí),知乎對(duì)Redis已經(jīng)很依賴(lài)。除了最開(kāi)始的隊(duì)列、搜索在用,后來(lái)像Cache也開(kāi)始使用,單機(jī)存儲(chǔ)成為瓶頸,所以引入了分片,同時(shí)做了一致性。
?
知乎團(tuán)隊(duì)是一個(gè)很相信工具的團(tuán)隊(duì),相信工具可以提升效率。工具其實(shí)是一個(gè)過(guò)程,工具并沒(méi)有所謂的最好的工具,只有最適合的工具。而且它是在整個(gè)過(guò)程中,隨著整個(gè)狀態(tài)的變化、環(huán)境的變化在不斷發(fā)生變化的。知乎自己開(kāi)發(fā)或使用過(guò)的工具包括Profiling(函數(shù)級(jí)追蹤請(qǐng)求,分析調(diào)優(yōu))、Werkzeug(方便調(diào)試的工具)、Puppet(配置管理)和Shipit(一鍵上線(xiàn)或回滾)等。
?
日志系統(tǒng)
?
知乎最初是邀請(qǐng)制的,2011年下半年,知乎上線(xiàn)了申請(qǐng)注冊(cè),沒(méi)有邀請(qǐng)碼的用戶(hù)也可以通過(guò)填寫(xiě)一些資料申請(qǐng)注冊(cè)知乎。用戶(hù)量又上了一個(gè)臺(tái)階,這時(shí)就有了一些發(fā)廣告的賬戶(hù),需要掃除廣告。日志系統(tǒng)的需求提上日程。
?
這個(gè)日志系統(tǒng)必須支持分布式收集、集中存儲(chǔ)、實(shí)時(shí)、可訂閱和簡(jiǎn)單等特性。當(dāng)時(shí)調(diào)研了一些開(kāi)源系統(tǒng),比如Scribe總體不錯(cuò),但是不支持訂閱。Kafka是Scala開(kāi)發(fā)的,但是團(tuán)隊(duì)在Scala方面積累較少,Flume也是類(lèi)似,而且比較重。所以開(kāi)發(fā)團(tuán)隊(duì)選擇了自己開(kāi)發(fā)一個(gè)日志系統(tǒng)——Kids(Kids Is Data Stream)。顧名思義,Kids是用來(lái)匯集各種數(shù)據(jù)流的。
?
Kids參考了Scribe的思路。Kdis在每臺(tái)服務(wù)器上可以配置成Agent或Server。Agent直接接受來(lái)自應(yīng)用的消息,把消息匯集之后,可以打給下一個(gè)Agent或者直接打給中心Server。訂閱日志時(shí),可以從Server上獲取,也可以從中心節(jié)點(diǎn)的一些Agent上獲取。
?
具體細(xì)節(jié)如下圖所示:
知乎還基于Kids做了一個(gè)Web小工具(Kids Explorer),支持實(shí)時(shí)看線(xiàn)上日志,現(xiàn)在已經(jīng)成為調(diào)試線(xiàn)上問(wèn)題最主要的工具。
?
Kids已經(jīng)開(kāi)源,放到了Github上。
?
事件驅(qū)動(dòng)的架構(gòu)
?
知乎這個(gè)產(chǎn)品有一個(gè)特點(diǎn),最早在添加一個(gè)答案后,后續(xù)的操作其實(shí)只有更新通知、更新動(dòng)態(tài)。但是隨著整個(gè)功能的增加,又多出了一些更新索引、更新計(jì)數(shù)、內(nèi)容審查等操作,后續(xù)操作五花八門(mén)。如果按照傳統(tǒng)方式,維護(hù)邏輯會(huì)越來(lái)越龐大,維護(hù)性也會(huì)非常差。這種場(chǎng)景很適合事件驅(qū)動(dòng)方式,所以開(kāi)發(fā)團(tuán)隊(duì)對(duì)整個(gè)架構(gòu)做了調(diào)整,做了事件驅(qū)動(dòng)的架構(gòu)。
?
這時(shí)首先需要的是一個(gè)消息隊(duì)列,它應(yīng)該可以獲取到各種各樣的事件,而且對(duì)一致性有很高的要求。針對(duì)這個(gè)需求,知乎開(kāi)發(fā)了一個(gè)叫Sink的小工具。它拿到消息后,先做本地的保存、持久化,然后再把消息分發(fā)出去。如果那臺(tái)機(jī)器掛掉了,重啟時(shí)可以完整恢復(fù),確保消息不會(huì)丟失。然后它通過(guò)Miller開(kāi)發(fā)框架,把消息放到任務(wù)隊(duì)列。Sink更像是串行消息訂閱服務(wù),但任務(wù)需要并行化處理, Beanstalkd就派上了用場(chǎng),由其對(duì)任務(wù)進(jìn)行全周期管理。架構(gòu)如下圖所示:
舉例而言,如果現(xiàn)在有用戶(hù)回答了問(wèn)題,首先系統(tǒng)會(huì)把問(wèn)題寫(xiě)到MySQL里面,把消息塞到Sink,然后把問(wèn)題返回給用戶(hù)。Sink通過(guò)Miller把任務(wù)發(fā)給Beanstalkd,Worker自己可以找到任務(wù)并處理。
?
最開(kāi)始上線(xiàn)時(shí),每秒鐘有10個(gè)消息,然后有70個(gè)任務(wù)產(chǎn)生。現(xiàn)在每秒鐘有100個(gè)事件,有1500個(gè)任務(wù)產(chǎn)生,就是通過(guò)現(xiàn)在的事件驅(qū)動(dòng)架構(gòu)支撐的。
?
頁(yè)面渲染優(yōu)化
?
知乎在2013年時(shí)每天有上百萬(wàn)的PV,頁(yè)面渲染其實(shí)是計(jì)算密集型的,另外因?yàn)橐@取數(shù)據(jù),所以也有IO密集型的特點(diǎn)。這時(shí)開(kāi)發(fā)團(tuán)隊(duì)就對(duì)頁(yè)面進(jìn)行了組件化,還升級(jí)了數(shù)據(jù)獲取機(jī)制。知乎按照整個(gè)頁(yè)面組件樹(shù)的結(jié)構(gòu),自上而下分層地獲取數(shù)據(jù),當(dāng)上層的數(shù)據(jù)已經(jīng)獲取了,下層的數(shù)據(jù)就不需要再下去了,有幾層基本上就有幾次數(shù)據(jù)獲取。
?
結(jié)合這個(gè)思路,知乎自己做了一套模板渲染開(kāi)發(fā)框架——ZhihuNode。
?
經(jīng)歷了一系列改進(jìn)之后,頁(yè)面的性能大幅度提升。問(wèn)題頁(yè)面從500ms 減少到150ms,Feed頁(yè)面從1s減少到600ms。
?
面向服務(wù)的架構(gòu)(SOA)
?
隨著知乎的功能越來(lái)越龐雜,整個(gè)系統(tǒng)也越來(lái)越大。知乎是怎么做的服務(wù)化呢?
?
首先需要一個(gè)最基本的RPC框架,RPC框架也經(jīng)歷了好幾版演進(jìn)。
?
第一版是Wish,它是一個(gè)嚴(yán)格定義序列化的模型。傳輸層用到了STP,這是自己寫(xiě)的很簡(jiǎn)單的傳輸協(xié)議,跑在TCP上。一開(kāi)始用的還不錯(cuò),因?yàn)橐婚_(kāi)始只寫(xiě)了一兩個(gè)服務(wù)。但是隨著服務(wù)增多,一些問(wèn)題開(kāi)始出現(xiàn),首先是ProtocolBuffer會(huì)生成一些描述代碼,很冗長(zhǎng),放到整個(gè)庫(kù)里顯得很丑陋。另外,嚴(yán)格的定義使其不便使用。這時(shí)有位工程師開(kāi)發(fā)了新的RPC框架——Snow,它使用簡(jiǎn)單的JSON做數(shù)據(jù)序列化。但是松散的數(shù)據(jù)定義面對(duì)的問(wèn)題是,比如說(shuō)服務(wù)要去升級(jí),要改寫(xiě)數(shù)據(jù)結(jié)構(gòu),很難知道有哪幾個(gè)服務(wù)在使用,也很難通知它們,往往錯(cuò)誤就發(fā)生了。于是又出了第三個(gè)RPC框架,寫(xiě)RPC框架的工程師,希望結(jié)合前面兩個(gè)框架的特點(diǎn),首先保持Snow簡(jiǎn)單,其次需要相對(duì)嚴(yán)格的序列化協(xié)議。這一版本引入了Apache Avro。同時(shí)加入了特別的機(jī)制,在傳輸層和序列化協(xié)議這一層都做成了可插拔的方式,既可以用JSON,也可以用Avro,傳輸層可以用STP,也可以用二進(jìn)制協(xié)議。
?
再就是搭了一個(gè)服務(wù)注冊(cè)發(fā)現(xiàn),只需要簡(jiǎn)單的定義服務(wù)的名字就可以找到服務(wù)在哪臺(tái)機(jī)器上。同時(shí),知乎也有相應(yīng)的調(diào)優(yōu)的工具,基于Zipkin開(kāi)發(fā)了自己的Tracing系統(tǒng)。
?
按照調(diào)用關(guān)系,知乎的服務(wù)分成了3層:聚合層、內(nèi)容層和基礎(chǔ)層。按屬性又可以分成3類(lèi):數(shù)據(jù)服務(wù)、邏輯服務(wù)和通道服務(wù)。數(shù)據(jù)服務(wù)主要是一些要做特殊數(shù)據(jù)類(lèi)型的存儲(chǔ),比如圖片服務(wù)。邏輯服務(wù)更多的是CPU密集、計(jì)算密集的操作,比如答案格式的定義、解析等。通道服務(wù)的特點(diǎn)是沒(méi)有存儲(chǔ),更多是做一個(gè)轉(zhuǎn)發(fā),比如說(shuō)Sink。
這是引入服務(wù)化之后整體的架構(gòu)。
總結(jié)
- 上一篇: 罗克韦尔AB PLC RSLogix50
- 下一篇: 比较好用的自定义软键盘