(點擊放大圖像)
這一系列博客文章將介紹促進領(lǐng)英內(nèi)部數(shù)百位工程師的創(chuàng)新精神,幫助他們以敏捷、高質(zhì)量、高效率地方式持續(xù)發(fā)布新軟件所使用的工程基礎(chǔ)架構(gòu)(技術(shù)、過程、工具、文化)。這是系列文章的第一篇,將概括介紹整體架構(gòu)、工作流,以及規(guī)模。
相關(guān)廠商內(nèi)容
Amazon ECS運行應(yīng)用程序所使用的范式和工具大解密
亞馬遜AWS首席云計算技術(shù)顧問費良宏做客InfoQ在線課堂
如何更好地設(shè)置、管理和擴展你的Amazon ECS
【雙11】京東大促通天塔——核心中間件架構(gòu)演進及實踐
相關(guān)贊助商

更多AWS最新精彩內(nèi)容和活動,請關(guān)注AWS專區(qū)!
如上圖所示,領(lǐng)英針對iOS和Android開發(fā)了原生應(yīng)用,以及針對移動和桌面瀏覽器的linkedin.com網(wǎng)站。這四類客戶端均調(diào)用同一套共享的API前端,借此與領(lǐng)英的各種中間層和后端服務(wù)交換數(shù)據(jù)。四種客戶端提供了高度一致且類似的用戶體驗和功能。
我們使用了四個主代碼庫(Repo),每個對應(yīng)一個平臺:iOS、Android、Web(移動和桌面瀏覽器客戶端共享同一個代碼庫以及大部分邏輯),以及API。每個主代碼庫還包含十幾個專門針對特定個平臺開發(fā)的庫(Library)代碼庫。四個主代碼庫每個包含超過5,000個文件,代碼行數(shù)均超過50萬行,總共有大約200個人負責(zé)提交代碼。一個代碼庫的提交速率峰值約為每小時15次,每天60次,每周250次。我們使用了主干開發(fā)(Trunk development)的模式,即每個代碼庫只有一個分支,每個人的提交,以及我們的發(fā)布操作都從這一個分支進行,每天會進行多次。
代碼流程大致如下圖所示,每個步驟和整個流程會多次進行迭代:
(點擊放大圖像)
為重大功能制定架構(gòu)設(shè)計文檔,并且必須通過設(shè)計審閱。
所有功能進行自動化測試,大部分功能具備Sphinx文檔。功能、測試和文檔均提交至同一個代碼庫。
所有代碼變更須進行代碼審閱,并需要同時通過所有者ACL(訪問控制列表以及每個文件的所有者)和平臺ACL(訪問控制列表,并通過專家確保代碼完整性、一致性,以及在特定平臺上的最佳實踐遵循情況)進行“發(fā)布”。
在預(yù)提交提交階段,將代碼正式提交至代碼庫之前,每次提交必須通過代碼庫中進行的靜態(tài)分析、構(gòu)建,以及自動化測試(單位/布局/場景,每個代碼庫共進行了約4,000次測試,且數(shù)量還在增加中)。如果預(yù)提交階段有任何步驟失敗,提交將被拒絕。同時進行的多個提交可并發(fā)執(zhí)行預(yù)提交流程。
一旦提交至代碼庫,提交的內(nèi)容必須通過提交后階段相同(甚至更嚴格)的一系列測試,以確保所有提交在合并后依然可以為每次提交生成高質(zhì)量、可發(fā)布的構(gòu)建。如果提交后測試失敗,提交可能被自動恢復(fù),或由隨時待命的工程師立刻修復(fù)。如果提交后測試成功,構(gòu)建將被發(fā)布至Artifactory等待發(fā)布給用戶設(shè)備(iOS和Android)或部署至生產(chǎn)站點(Web和API)。
對于iOS和Android,每次成功的構(gòu)建會通過應(yīng)用內(nèi)置的更新功能立刻發(fā)布給Alpha渠道(移動團隊)。每周會有一個iOS構(gòu)建和三個Android構(gòu)建通過MDM(移動設(shè)備管理)系統(tǒng)、應(yīng)用內(nèi)置的更新功能、TestFlight(iOS)或Play Store(Android)的Beta渠道發(fā)布給Beta渠道(公司員工和Beta公測用戶)。如果沒發(fā)現(xiàn)什么嚴重問題,每周三我們會將某一個Beta構(gòu)建通過Apple的App Stora和Google的Play Store發(fā)布給生產(chǎn)渠道(所有領(lǐng)英用戶)。
對于Web和API,每次成功的構(gòu)建會自動部署至負責(zé)運行自動化測試的EI和Staging(測試環(huán)境)。如果運行通過,該構(gòu)建會自動部署至生產(chǎn)環(huán)境的金絲雀(Canary)設(shè)備,通過這些設(shè)備為請求提供服務(wù),并與其他生產(chǎn)設(shè)備進行對比,通過各種度量值(HTTP 200/400/500返回代碼、異常、Fanout、延遲等)進行統(tǒng)計分析,這一過程也叫做EKG。如果EKG通過,待命工程師會將其部署至生產(chǎn)環(huán)境,隨后隊列中的下一個構(gòu)建將成為下一個候選部署。我們會在每個工作日的大約早9點、12點,以及下午3點進行部署。