如果你是 LinkedIn 的用戶,你一定知道它的認(rèn)證系統(tǒng)。目前為止全球已經(jīng)有數(shù)千萬專業(yè)人員點擊了“認(rèn)證”按鈕,通過他們的關(guān)系連接分享了超過100億個技能認(rèn)證。LinkedIn 上線認(rèn)證系統(tǒng)的目的很簡單——創(chuàng)造一種讓其他人辨認(rèn)人們的技能的方式。
當(dāng)很大一部分 LinkedIn 用戶都使用認(rèn)證功能的時候,我們意識到,想到達(dá)到產(chǎn)品的初衷,還有許多工作需要完成。我們注意到,一些認(rèn)證相比其他要更具價值,所以我們準(zhǔn)備打造一個更好的產(chǎn)品來幫助我們的會員理解利用認(rèn)證能帶給他們的潛在價值。
實現(xiàn)一個為我們的用戶提供更多價值的認(rèn)證系統(tǒng),需要多方面的調(diào)研、新的機(jī)器學(xué)習(xí)模型以及重新架構(gòu)的能夠服務(wù)和推薦新認(rèn)證的后端系統(tǒng)。我們需要的不僅僅是更快的認(rèn)證服務(wù),還能讓我們基于用戶的關(guān)系和技能為他們提供更多的見解。我們相信,有了新的認(rèn)證模塊架構(gòu)奠定的基礎(chǔ),我們最終將能夠?qū)崿F(xiàn)上述目標(biāo)。
當(dāng)前的架構(gòu)
依據(jù)歷史經(jīng)驗來說,LinkedIn 的認(rèn)證體驗主要依賴于兩大支柱:其一是推薦認(rèn)證,其二是認(rèn)證服務(wù)。推薦認(rèn)證流程在后端架構(gòu)的體現(xiàn)是,產(chǎn)生一組推薦給我們的用戶,引導(dǎo)關(guān)系網(wǎng)中的用戶去幫助認(rèn)證。這些推薦為用戶提供了一個便捷途徑來獎勵他們同事的技能。
認(rèn)證系統(tǒng)的第二個支柱是,當(dāng)用戶看其他人的檔案的時候,簡單地允許他們認(rèn)證他們關(guān)系網(wǎng)中的人,然后為這些認(rèn)證服務(wù)。
認(rèn)證服務(wù)
在 LinkedIn,我們使用微服務(wù)架構(gòu):大的功能(比如認(rèn)證)會被封裝到一個單獨的服務(wù)中,然后只暴露出所有可以進(jìn)行的操作。這樣,就可以在保持后端兼容性的基礎(chǔ)上讓服務(wù)在內(nèi)部進(jìn)行演進(jìn)。
自該方案實施之后,認(rèn)證產(chǎn)品只是依賴于一個簡單的架構(gòu),即使用一個單獨的 SQL 實例來服務(wù)所有的認(rèn)證。為了在每秒數(shù)千請求(QPS)的情況下擴(kuò)展到100億認(rèn)證,我們不得不極度優(yōu)化數(shù)據(jù)庫使用到的索引。
例如,由于最常見的使用場景是基于一個給定用戶進(jìn)行認(rèn)證服務(wù),我們創(chuàng)建了一個結(jié)構(gòu)化的索引,層級如下:
Recipient Id (1) → Endorsed Item (2) → Endorser Id (3)
利用這些索引,下面這些操作會變得非常簡單:
遍歷用戶“Joey”的所有認(rèn)證:我們使用索引(1),然后遍歷它的所有數(shù)據(jù)項。
遍歷用戶“Joey”的所有“Java”技能的認(rèn)證:我們使用索引(1)和(2)的組合,然后列出所有數(shù)據(jù)項。
遍歷用戶“Yolanda”給予“Joey”的所有“Java”技能的認(rèn)證(假設(shè)“Yolanda”是個推薦人):這次我們使用索引(1)、(2)和(3)的組合,然后遍歷找到的數(shù)據(jù)項。
當(dāng)然,這種方法會有一些瓶頸。例如,如果我們想要找出“Jie”給出的所有認(rèn)證,我們將不得不遍歷一遍數(shù)據(jù)庫中的100億條數(shù)據(jù)。
推薦認(rèn)證
有兩條推薦認(rèn)證流程:
可認(rèn)證技能:這個流程會預(yù)測一個用戶可能擁有或想要發(fā)展的技能條目。
推薦認(rèn)證:這個流程會提供每個用戶可以認(rèn)證的(接受者,技能)元組列表。
這兩個流水線能夠在離線狀態(tài)下的 Hadoop 工作流中,利用機(jī)器學(xué)習(xí)和合并特征(例如相互關(guān)聯(lián)、檔案信息和歷史認(rèn)證)產(chǎn)生推薦。這些“認(rèn)證技能”和“推薦認(rèn)證”數(shù)據(jù)會被推送到兩個不同的 Voldemort 存儲中。認(rèn)證服務(wù)將會對鍵值對存儲進(jìn)行在線查詢,拉取可能的認(rèn)證,然后將他們交付給用戶。
(點擊放大圖像)

多年來,機(jī)器學(xué)習(xí)算法驅(qū)動的推薦系統(tǒng)一直在進(jìn)行微調(diào),以優(yōu)化擴(kuò)散和技能多樣性。認(rèn)證系統(tǒng)已經(jīng)生成了許多用戶參與,并已經(jīng)驅(qū)動了 LinkedIn 的許多其他行動。迄今為止,認(rèn)證的數(shù)量和參與此項功能的用戶數(shù)見證了這個模型的成功。
鑒于認(rèn)證模塊在許多國家已經(jīng)非常成熟,我們認(rèn)為現(xiàn)在是時候來重新設(shè)計我們的架構(gòu),打開為我們的用戶提供更多相關(guān)內(nèi)容的大門。我們走上了尋求重建認(rèn)證模塊的愿景。
優(yōu)化正確的目標(biāo)指標(biāo)
使用我們的用戶給出的認(rèn)證數(shù)量來衡量認(rèn)證系統(tǒng)的成功已然過時,我們希望定義一個新指標(biāo)來更好地代表認(rèn)證產(chǎn)品的目標(biāo)。在本文中,我們將這個新指標(biāo)稱之為“高評分的認(rèn)證”。