[譯]揭秘LinkedIn的工作風(fēng)格

原文:Job Flavors at LinkedIn: Part I

譯者:杰微刊兼職翻譯汪建

作者:Caleb Johnson

我們相信LinkedIn能通過(guò)某種方式提供關(guān)于工作機(jī)會(huì)的個(gè)性化視圖,而其他網(wǎng)站無(wú)法提供這種個(gè)性化。在我們新版的Job詳情頁(yè)面,它能夠顯示用戶有價(jià)值的信息,比如該公司他們可能認(rèn)識(shí)的人,這可以讓他們比其他的應(yīng)聘者擁有優(yōu)勢(shì),或者可以讓某個(gè)比較特別的工作比其他工作更加突出顯示。然而,我們面臨的最大的問(wèn)題是讓會(huì)員們?nèi)リP(guān)注Job詳情頁(yè)面,對(duì)于候選人某個(gè)工作可能相當(dāng)適合,但如果他們都從來(lái)沒(méi)有看到Job詳情頁(yè)面,他們將會(huì)錯(cuò)過(guò)一個(gè)非常好的機(jī)會(huì)。

我們需要做的事就是去激發(fā)求職者的興趣并找到解決問(wèn)題的答案?!皩?duì)于這個(gè)人這份工作最有趣的一件事是什么?”最初,LinkedIn有個(gè)工作列表的單純功能,比如搜索結(jié)果的列表清單或者推薦工作列表。除了職位或者公司名稱,沒(méi)有其他任何方式可以使某個(gè)工作更突出。我們想在較新的體驗(yàn)版本中展示工作的所有“風(fēng)格”,這將使某個(gè)工作變得特別。例如,會(huì)員可以從以前工作或?qū)W校的同事中了解情況,或者某個(gè)工作代表在薪資上有一個(gè)很好的躍升,這些都是為了幫求職者縮小范圍并且為他們找到最好工作。在這篇文章中,我們將討論我們?yōu)闀?huì)員們展示Job風(fēng)格的基礎(chǔ)設(shè)施。

需求

在我們開(kāi)始設(shè)計(jì)該系統(tǒng)時(shí),我們有三個(gè)需求:

1、低延遲:我們想在LinkedIn的很多地方展示工作風(fēng)格,但他們都有嚴(yán)格的延遲要求,比如Feed和工作搜索。在于相關(guān)利益者交談后,我們確定對(duì)于95%的訪問(wèn)我們可以比原來(lái)增加不超過(guò)50ms的延遲(即95%的調(diào)用都應(yīng)該花費(fèi)小于50ms)。

2、可擴(kuò)展性:我們需要用某種方式去創(chuàng)建該系統(tǒng)從而保證它的可擴(kuò)展性,不僅要支持超過(guò)450萬(wàn)會(huì)員乘以15萬(wàn)個(gè)工作的視圖的數(shù)據(jù)大小,而且還要支持大量的工作風(fēng)格數(shù)據(jù)。為了讓我們能在任何地方展示我們的工作風(fēng)格,我們要支持最少每秒5000次查詢(QPS),并且在高峰期要承受10000 QPS。我們還需要預(yù)留足夠的空間來(lái)應(yīng)付增長(zhǎng),因?yàn)槲覀円呀?jīng)看到從去年以來(lái)所有的工作頁(yè)面已經(jīng)增加了75%。

3、功能可擴(kuò)展:應(yīng)該要能很容易添加新的風(fēng)格或者刪除舊的風(fēng)格,我們希望這是未來(lái)求職者在LinkedIn上找工作的核心體驗(yàn),并且對(duì)于新的開(kāi)發(fā)者它要能很簡(jiǎn)單的進(jìn)行維護(hù)。添加新的風(fēng)格不要求必須要知道以前的其他風(fēng)格的知識(shí),關(guān)于跟蹤、建模、排名等等的相關(guān)知識(shí)也不需要。

架構(gòu)總覽


job風(fēng)格生態(tài)系統(tǒng)由兩個(gè)主要部分組成:一個(gè)無(wú)狀態(tài)的Rest.li(https://github.com/linkedin/rest.li)層和一組被Rest.li調(diào)用的數(shù)據(jù)存儲(chǔ)訪問(wèn)層。通過(guò)使用Rest.li和D2(https://github.com/linkedin/rest.li/wiki/Dynamic-Discovery),我們可以無(wú)限擴(kuò)展這個(gè)中間層并保證其具備容錯(cuò)和負(fù)載均衡,好吧,也許不是無(wú)限,但幾乎能能滿足所有實(shí)際需要。前端客戶端利用工作列表、會(huì)員和一系列的工作風(fēng)格向我們的中間層發(fā)起請(qǐng)求去核查??蛻舳艘鞔_要求他們想要請(qǐng)求的風(fēng)格,否則一旦添加一個(gè)新的風(fēng)格,我們可能突然就開(kāi)始發(fā)送回去,客戶端就會(huì)不知道如何展示它。

接著,對(duì)于每個(gè)風(fēng)格的請(qǐng)求,工作名單被發(fā)送到相應(yīng)的“風(fēng)格委托者”上去為該用戶獲取必要的風(fēng)格元數(shù)據(jù)。每個(gè)委托者都實(shí)現(xiàn)了一個(gè)具有兩個(gè)功能的簡(jiǎn)單接口,

1)返回處理的風(fēng)格的相關(guān)信息;

2)給定一個(gè)請(qǐng)求,返回它的風(fēng)格是否有效,并返回相關(guān)風(fēng)格的任何額外的元數(shù)據(jù)。

這使得獲取風(fēng)格信息的實(shí)際實(shí)現(xiàn)是完全開(kāi)放的,截至LinkedIn不同團(tuán)隊(duì)提出的關(guān)于風(fēng)格的新思路,我們不希望約束使用的技術(shù)和信息系統(tǒng)。因此,這就迫使該系統(tǒng)要高度解耦,該委托者要能對(duì)其他委托者保持獨(dú)立運(yùn)行。每個(gè)委托者都知道自己的依賴,也不需要依賴其他委托者的具體實(shí)現(xiàn)細(xì)節(jié)。話雖這么說(shuō),但有些委托者仍然有共同的依賴,但這將能夠很好地避免重復(fù)調(diào)用,我們可以對(duì)下游服務(wù)做一個(gè)批調(diào)用,然后將信息拆分返回給請(qǐng)求它的每個(gè)委托者。例如,一個(gè)風(fēng)格可能需要會(huì)員當(dāng)前的學(xué)校信息,但是其他委托者又需要當(dāng)前公司的信息,這兩者都可以通過(guò)調(diào)用檔案服務(wù)而獲取到。幸運(yùn)的是,我們可以在請(qǐng)求下游服務(wù)時(shí)簡(jiǎn)單地嵌入parseq-batching,它能夠智能地為我們合并重疊的請(qǐng)求。委托者不必為這個(gè)功能做任何額外事情。他們只管按正常使用客戶端即可,他們能通過(guò)空閑的委托者們得到高效的批處理服務(wù)。

一旦獲得所有委托者的依賴關(guān)系,委托者將訪問(wèn)數(shù)據(jù)庫(kù)去獲取它相關(guān)的工作風(fēng)格。隨著每個(gè)委托者的結(jié)束(為安全起見(jiàn)將存在問(wèn)題的委托者都做超時(shí)處理),有效的工作風(fēng)格數(shù)據(jù)被發(fā)動(dòng)到排名和選擇引擎。我們對(duì)一個(gè)給定的工作風(fēng)格用兩個(gè)啟發(fā)式的得分和排名:會(huì)員親和力和工作風(fēng)格親和力。會(huì)員親和力是由會(huì)員針對(duì)每個(gè)風(fēng)格做出的歷史反應(yīng)決定,會(huì)員過(guò)去感興趣的風(fēng)格比被他們已經(jīng)忽略或丟棄的風(fēng)格會(huì)有更高的排名。工作風(fēng)格親和力是只對(duì)于某個(gè)工作的風(fēng)格的強(qiáng)度:一個(gè)公司從會(huì)員當(dāng)前的公司雇用數(shù)十個(gè)人,例如,如果會(huì)員能在該公司上有認(rèn)識(shí)的人脈也許會(huì)更容易激發(fā)他的興趣。一旦每個(gè)元組(會(huì)員、工作、風(fēng)格)被打分和排名后,最高排名的風(fēng)格將被選擇并在響應(yīng)中返回??蛻舳撕头?wù)器端發(fā)射跟蹤事件繼續(xù)構(gòu)建這些模型。當(dāng)新的風(fēng)格被添加,他們會(huì)自動(dòng)地合并到這些數(shù)據(jù)生命周期中,并要求添加新的風(fēng)格委托者的開(kāi)發(fā)者不能更改。

具體實(shí)現(xiàn)細(xì)節(jié)

一旦框架構(gòu)建完成,剩下的所有事情就是找個(gè)最佳方式去獲取內(nèi)部實(shí)現(xiàn)。首先我們看看繪圖團(tuán)隊(duì):這個(gè)團(tuán)隊(duì)負(fù)責(zé)管理LinkedIn的整個(gè)社交圖譜訪問(wèn)的API。圖譜實(shí)時(shí)更新并且能讓客戶端根據(jù)自己的需要進(jìn)行很復(fù)雜的精確查詢。然而,這是要付出代價(jià)的,它能滿足我們的可擴(kuò)展性和功能可擴(kuò)展,但速度不能滿足,這些計(jì)算密集型操作需要花費(fèi)較多時(shí)間,特別是對(duì)于大的子圖交集的圖譜,他可能會(huì)消耗高達(dá)幾百毫秒的時(shí)間。例如,檢測(cè)每個(gè)曾經(jīng)去美國(guó)亞利桑那州立大學(xué)的而且現(xiàn)在在IBM工作的人,它要求兩個(gè)圖譜的交集,在40萬(wàn)會(huì)員中僅僅只能查詢到500人的結(jié)果集。

我們意識(shí)到的是,雖然實(shí)時(shí)方面是不錯(cuò)的,但對(duì)于大多數(shù)風(fēng)格來(lái)說(shuō),我們并不真正需要它,因?yàn)槿藗儾粫?huì)每天都在變學(xué)校和公司。驗(yàn)證正確性比即時(shí)發(fā)現(xiàn)付出代價(jià)少得多。我們可以通過(guò)日常的Hadoop工作預(yù)先計(jì)算這些需要大量計(jì)算的視圖并且保存起來(lái)用于查詢。例如,在Voldemort(我們的分布式鍵值對(duì)數(shù)據(jù)存儲(chǔ)系統(tǒng))中,我們可以保存一個(gè)會(huì)員在某些公司的工作關(guān)聯(lián)。我們可以通過(guò)快速的會(huì)員查詢驗(yàn)證此信息是否過(guò)期。這種數(shù)量級(jí)的查詢比動(dòng)態(tài)圖譜快多了,一般總共僅需幾毫秒。一些視圖(像只有少量申請(qǐng)者的工作)本身需要實(shí)時(shí)數(shù)據(jù)備份它們,對(duì)于這些擅長(zhǎng)分析相關(guān)關(guān)系的視圖,它們具有低延遲(即使毫秒)。

結(jié)果和下一步

目前我們正在使用這個(gè)系統(tǒng)在不同的地方來(lái)裝飾job,像我們的job郵件、job搜索頁(yè)面、job主頁(yè)、贊助公司動(dòng)態(tài)和Feed建議。在不久的將來(lái),我們將把這個(gè)整合到其他廣告產(chǎn)品、inMails的招聘人員板塊等等。添加這個(gè)功能后,我們看到了令人難以置信的令人鼓舞的成果,F(xiàn)eed和郵件頁(yè)面增加了15%的訪問(wèn),工作應(yīng)聘和會(huì)員之間的消息發(fā)送活躍度增加了5%,甚至來(lái)自贊助公司動(dòng)態(tài)服務(wù)的收入都增長(zhǎng)了。

目前,job風(fēng)格平臺(tái)支持四種風(fēng)格:

* 某個(gè)公司從你的學(xué)校已經(jīng)雇傭了多少人。

* 某個(gè)公司已經(jīng)從你的公司雇傭了多少人。

* 在這家公司你有多少人脈。

* 該項(xiàng)工作目前是否只有少于10個(gè)申請(qǐng)人。

雖然我們確實(shí)有很多風(fēng)格(包括顧客適合度風(fēng)格和優(yōu)質(zhì)訂閱會(huì)員風(fēng)格),但未來(lái)我們首要的工作是給搜索和建議更深入地整合進(jìn)更多的的job風(fēng)格。目前我們正努力讓求職者可以通過(guò)風(fēng)格過(guò)濾功能來(lái)查找工作,并且充分使用“Netflix-style”來(lái)進(jìn)行分類。我們計(jì)劃讓我們的系統(tǒng)能自動(dòng)化的實(shí)時(shí)去檢測(cè)異常落果并報(bào)警及風(fēng)格展示和點(diǎn)擊的頻率。

致謝

非常感謝Kunal Cholera、Jiuling Wang和Kaushik Rangadurai,幫忙規(guī)劃架構(gòu)最初的設(shè)計(jì),以及我們的Feed、Companies、Jobs、Messaging和Search的同事為L(zhǎng)inkedIn帶來(lái)前沿的偉大的功能。如果你對(duì)創(chuàng)建這種偉大的產(chǎn)品感興趣,并且想要影響人們的日常生活,我們長(zhǎng)久在尋求有才華的工程師和數(shù)據(jù)科學(xué)家??梢酝ㄟ^(guò)我們的職業(yè)頁(yè)面來(lái)了解更多信息。

更多精彩文章:

[譯]NGINX 安裝與配置

[譯]如何編寫可維護(hù)的集成測(cè)試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容