欧美人与禽2O2O性论交,秋霞免费视频,国产美女视频免费观看网址,国产成人亚洲综合网色欲网

技術(shù)干貨 – 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

【以下為分享實錄,有刪節(jié)】

阿里巴巴為什么要自研代碼管理平臺

也許你會問:為什么阿里巴巴要重新做一套代碼管理平臺,繼續(xù)用Gitlab版本不是挺好的嗎?接下來從我個人的角度在這里嘗試進行解答。

由于歷史原因,在阿里巴巴集團內(nèi)部代碼平臺是整個DevOps領(lǐng)域中起步相對較晚的一塊業(yè)務(wù)域,相比于發(fā)布域、測試域有著多年的積累和沉淀來講,2017年時的代碼平臺可以說是為了滿足整體業(yè)務(wù)需求由幾個系統(tǒng)強行拼湊起來的。

為了支撐起阿里巴巴整體的業(yè)務(wù)發(fā)展,研發(fā)團隊要同時維護6個系統(tǒng),分別是負(fù)責(zé)代碼托管的GitLab、Svn、Gerrit,以及負(fù)責(zé)上層代碼服務(wù)的Phabricator、CodeCenter、ScmCenter。且其中除了CodeCenter、ScmCenter之外,其它四個均是在開源系統(tǒng)之上二次封裝改造而來的。其中Gitlab技術(shù)棧是基于Ruby,Phabricator基于PHP,SVN基于C,Gerrit基于Java,這給我們?nèi)粘5拈_發(fā)和維護工作增加了很多負(fù)擔(dān)。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

當(dāng)時代碼平臺遇到的困難和挑戰(zhàn)主要有四個方面:

一、技術(shù)架構(gòu)方面:多套系統(tǒng)架構(gòu),多種開發(fā)語言,不僅維護成本高,且與阿里集團的主流技術(shù)脫節(jié),研發(fā)團隊同學(xué)每天疲于填坑,然而整體上卻得不到大的改善。

二、平臺發(fā)展方面:單純的Gitlab、Svn、Gerrit均無法與周邊關(guān)聯(lián)系統(tǒng)做到有效協(xié)同,且用戶的多樣性需求也很難在某個單一系統(tǒng)中得到滿足,最關(guān)鍵的一點是我們雖然手握海量代碼資產(chǎn),但其寶貴價值卻未有效挖掘出來。

三、外部市場方面:代碼托管領(lǐng)域的市場是很有發(fā)展?jié)摿Φ?,但國?nèi)還沒有一款真正To B形態(tài)的代碼管理平臺。這是因為對于科技企業(yè)來講,代碼是最核心的資產(chǎn),企業(yè)把代碼托管到誰的平臺就等于把身家性命托付給了誰。因此一款To B形態(tài)的代碼管理平臺必須具備豐富的企業(yè)級特性以及完備的安全能力,然而在這一方面國內(nèi)代碼托管產(chǎn)品還有很長的路要走。

同時這也是“自主可控”的需要。作為托管代碼的基礎(chǔ)平臺進行國產(chǎn)化既是大勢所趨也是時代所需。只有將核心技術(shù)和產(chǎn)品把控在我們中國人自己手里才能從容面對未來各種不確定性。

四、代碼文化方面:即如何正向推動阿里巴巴的代碼文化傳承。

阿里巴巴代碼管理平臺的整體策略

針對于以上代碼平臺所面臨的四個方面的問題和挑戰(zhàn),該如何去解決,我們的整體思考和策略如下:

第一、統(tǒng)一架構(gòu),夯實基礎(chǔ):必須要統(tǒng)一架構(gòu),不能再在開源系統(tǒng)上拼拼湊湊,需要有一套完全能自主掌控的自研系統(tǒng),從頭夯實好基礎(chǔ)。

第二、全面融合,高效協(xié)同:需要解決6套老系統(tǒng)如何與該自研系統(tǒng)過渡,同時該系統(tǒng)應(yīng)該與DevOps領(lǐng)域中其它上下游系統(tǒng)能夠方便的打通、協(xié)同。

第三,代碼文化,品牌建設(shè):在代碼平臺建設(shè)的同時,要考慮如何對阿里巴巴的代碼文化和理念進行正向引導(dǎo),從而做到以工具和平臺作為載體,使代碼文化進行有效落地。同時還要進行我們自己產(chǎn)品的品牌建設(shè)。

第四,擁抱智能,彎道超車:面對競品我們?nèi)绾尾拍苷嬲摲f而出、打出差異性,答案就是擁抱智能,通過智能化的手段進行彎道超車。

基于以上策略,我們開始了自研之路,全新的代碼管理平臺先是在阿里巴巴集團內(nèi)部進行落地,進而解決了前文中提到的四個方面的問題。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

經(jīng)過充足的準(zhǔn)備,我們將這款自研代碼管理平臺集成到云效中,成為了“云效代碼管理平臺”,即Codeup,目前開發(fā)者可從云效官網(wǎng)訪問并免費使用?!霸菩Тa管理”(Codeup)是一款企業(yè)級代碼管理平臺,提供代碼托管、代碼評審、代碼掃描、質(zhì)量檢測等功能,保護企業(yè)代碼資產(chǎn),實現(xiàn)安全、穩(wěn)定、高效的研發(fā)生產(chǎn)。拋開產(chǎn)品設(shè)計或團隊打造這些方面,我們在技術(shù)上究竟是如何做的,這個我會在后面進行詳細(xì)介紹。

云效代碼管理平臺的核心能力

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

云效代碼管理(Codeup)主要提供代碼瀏覽、代碼評審、配置管理(SCM)、代碼掃描、代碼安全、CI/CD、文檔、代碼庫遷移等能力和服務(wù)。

很多企業(yè)的技術(shù)負(fù)責(zé)人也許會糾結(jié)一個問題:將代碼托管到云上是否安全?

一些企業(yè)在最終進行代碼托管時,均會選擇自己搭建代碼托管系統(tǒng),其實阿里早期也是如此,因此我們深知其中利弊。自己搭建代碼托管系統(tǒng),就需要做以下相關(guān)工作:首先,需要選擇適合企業(yè)代碼托管場景的開源軟件;其次,準(zhǔn)備托管的硬件設(shè)施。在此過程中,必須滿足一些特定的要求,如需要對開源軟件比較熟悉的技術(shù)人員進行搭建與維護;需要花費成本去購買實體或云端服務(wù)器;同時需要投入人力來負(fù)責(zé)安全及穩(wěn)定性,否則就可能因為系統(tǒng)的穩(wěn)定性而影響研發(fā)效率。

如果采用成熟的云端代碼托管平臺,就可以很好的避免上述問題。以云效代碼管理平臺(Codeup)為例,在代碼存儲方面,我們采用多副本高可用架構(gòu),數(shù)據(jù)自動備份;在代碼安全方面,我們提供完善的安全權(quán)限機制和保護措施,降低內(nèi)部成員泄露代碼數(shù)據(jù)和外部黑客攻擊的風(fēng)險。

綜合來看,對于中小企業(yè)及大型企業(yè)的開發(fā)人員,選擇成熟的云端代碼托管平臺,是更安全更省心更經(jīng)濟的選擇。

云效代碼管理平臺的系統(tǒng)架構(gòu)

早些年,阿里巴巴集團內(nèi)部采用的是AliGitLab系統(tǒng)架構(gòu),雖然在Gitlab上進行了分布式的改造,使這套系統(tǒng)的承載能力得到很大的提升。但是AliGitLab在架構(gòu)上仍然屬于單層分片架構(gòu),因為Web服務(wù)和Git托管這兩個核心組件其實是部署在同一臺機器上的,耦合十分嚴(yán)重,擴展能力非常差,且整個服務(wù)模塊都是基于Ruby技術(shù)棧。這就使整個架構(gòu)存在兩個弊端:一是整個體系基于Ruby,導(dǎo)致維護、擴展以及人員培養(yǎng)成本都很大;二是Web服務(wù)和Git托管耦合在一起,很多情況下會因為某個節(jié)點上代碼庫讀寫占用大量資源而對用戶在該節(jié)點上的頁面訪問或API服務(wù)請求造成影響。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

針對上述問題,我們在云效代碼管理平臺(Codeup)上實現(xiàn)了全新的架構(gòu)。通過明確的抽象、分層,將Codeup整體劃分為三層,即由下至上為存儲層、代理層和服務(wù)層。同時抽取出5個系統(tǒng)核心組件,服務(wù)組件間彼此職責(zé)單一、分離,上層Service和Portal基于Java進行實現(xiàn),無狀態(tài);存儲層及代理層組件全部用Go語言編寫。Codeup-stone主要負(fù)責(zé)文件存儲及底層Git操作的封裝,其上抽取一個中間代理層,各層之間基于GRPC協(xié)議進行高效的數(shù)據(jù)傳輸。服務(wù)層的各項請求都基于Codeup-Proxy去與存儲層打交道,從整體上大幅增強了系統(tǒng)的容災(zāi)能力和擴展性,每一層都可以做到方便的擴容、縮容。這套自研系統(tǒng)架構(gòu)經(jīng)過多年打磨和演進,在阿里巴巴集團內(nèi)部承載起了數(shù)萬工程師,上百系統(tǒng)的大規(guī)模、高并發(fā)的日常調(diào)用壓力。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

在開發(fā)者最關(guān)心的穩(wěn)定性和文件存儲方面,我們采用了多節(jié)點“分片”和單節(jié)點“一主多備”以及跨機房“冷備”的手段,來保障數(shù)據(jù)的高安全和高可靠性。同時云效代碼管理平臺(Codeup)全部組件均架構(gòu)在阿里云基礎(chǔ)設(shè)施之上,以此來確保存儲、應(yīng)用服務(wù)器、網(wǎng)絡(luò)等硬件方面的安全穩(wěn)定。

在數(shù)據(jù)存儲和高可用方面,我們具體采取了以下三點措施:一、在底層存儲節(jié)點上,對代碼庫進行哈希散列處理,從而避免存儲節(jié)點因為倉庫分布不均勻而成為“熱點”;二、針對單個節(jié)點可能因為存儲“大庫”而成為“熱點”的問題,Codeup通過多副本的方式對單個節(jié)點的請求進行負(fù)載均衡,根據(jù)實際流量,可以進行快速的擴容或縮容;三、在倉庫數(shù)據(jù)備份方面,我們采取了多份熱備份和一份冷備份的方案。其中,熱備份至少會存在兩份,冷備份存儲全量的數(shù)據(jù)快照。針對用戶由于誤操作產(chǎn)生的數(shù)據(jù)刪除等不可逆的問題時,我們可以通過冷備份的數(shù)據(jù)快照進行恢復(fù)。目前快照數(shù)據(jù)保存的周期為一周。

除了基礎(chǔ)架構(gòu),我們在代碼智能化、代碼規(guī)范化等方面也做了大量的投入?;诎⒗锇桶图瘓F內(nèi)部海量的代碼數(shù)據(jù),在代碼安全、代碼質(zhì)量和研發(fā)提效等方面的我們都進行了大量探索和創(chuàng)新。這次也是希望借助我們自研的云效代碼管理平臺(Codeup)將這些優(yōu)秀的能力開放出去,普惠更多中小企業(yè)。接下來,我會針對Codeup上代表性的功能和工具進行詳細(xì)介紹。

人工智能技術(shù)助力敏感信息監(jiān)測

首先,我們來了解一下云效代碼管理平臺(Codeup)在企業(yè)智能安全方面的功能。我們?yōu)槠髽I(yè)管理者提供了安全風(fēng)控、審計日志、IP白名單等把控代碼庫安全的核心能力。今天主要介紹一下敏感行為監(jiān)測,我們是如何做的。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

首先,我們以代碼數(shù)倉為基礎(chǔ)構(gòu)建了代碼圖譜,通過對代碼庫、代碼、工程師進行抽象將其轉(zhuǎn)化為實體,并通過實體的標(biāo)簽化構(gòu)建代碼畫像、用戶畫像等。為智能服務(wù)提供有力的數(shù)據(jù)支持,為平臺業(yè)務(wù)提供推理關(guān)系查詢。在敏感行為檢測這個例子中,我們提取出了代碼庫重要度、文件重要度、代碼段重要度、開發(fā)人員近期瀏覽行為、開發(fā)人員畫像作為安全防護的支撐內(nèi)容。一旦有重要庫、重要文件發(fā)生敏感操作,如突然的大量代碼庫下載、刪庫、權(quán)限變更等行為,我們會立刻給訂閱用戶發(fā)送通知告警,幫助企業(yè)管理者感知風(fēng)險,及時止損。

代碼質(zhì)量—飽受好評的P3C代碼規(guī)約檢測插件

在代碼質(zhì)量方面,云效代碼管理平臺(Codeup)內(nèi)置了我們自研的P3C代碼規(guī)劃檢測插件。這款插件在阿里巴巴內(nèi)部飽受好評,使用廣泛;目前已經(jīng)開源,在業(yè)界也很受歡迎,無論是插件的下載量,還是在Github源碼工程上的加星數(shù)都很高。 那么,P3C技術(shù)上是如何實現(xiàn)的呢?

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

經(jīng)過多次調(diào)研和探討,我們選擇了開源代碼掃描工具PMD去做資源與規(guī)則擴展,主要是看中了其規(guī)則擴展方便,集成到其它通用平臺和插件上更靈活的特性。但PMD也有其局限性,即不支持跨文件掃描(例如:對過時方法的檢測),所以那些需要針對跨文件掃描的規(guī)則我們提到了Sonar、IDE等上層工具去實現(xiàn)。

  • 方案選定后,我們基于開源的pmd-core三方Jar的能力上,擴展了約60個規(guī)約掃描規(guī)則,并封裝出P3C-PMD組件。
  • 在P3C-PMD組件基礎(chǔ)上,基于Sonar插件擴展標(biāo)準(zhǔn),我們提供了sonar-p3c-pmd-plugin,也就是封裝出了一個標(biāo)準(zhǔn)的Sonar插件。此插件主要用于代碼庫全量自動化掃描階段。
  • CodeReview插件采用直接類似于命令行調(diào)用的方式集成了p3c-pmd,主要針對于增量代碼檢測階段。
  • 在P3C-PMD組件基礎(chǔ)上,基于IDEA的Inspection機制,以及Running Inspection By Name的功能自主實現(xiàn)了IDEA插件。
  • Eclipse插件主要是基于原生已有的Eclipse PMD插件進行的規(guī)則替換開發(fā)。我們通過IDE插件的實現(xiàn),進而解決了本地代碼規(guī)約檢測的問題。

綜上所述,我們通過不同的插件覆蓋了不同研發(fā)階段(如本地編碼階段,自動化全量測試階段、CodeReview增量檢測階段)的代碼規(guī)約檢測。通過本地結(jié)合線上、全量結(jié)合增量的策略,我們實現(xiàn)了一套規(guī)則落地多端,進而將阿里巴巴Java編碼規(guī)約通過工具化平臺化的手段在阿里內(nèi)部進行了充分落地。2017年10月份,我們在GitHub上將P3C規(guī)則和工具的源碼正式對外開源。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

通過以上努力,我們不僅將P3C工具在阿里巴巴集團內(nèi)部進行了有效落地,同時在集團外也樹立了很強的品牌影響力。規(guī)約檢測工具保證了規(guī)約文化的落地及傳播,同時規(guī)約文化又從效能、人才、穩(wěn)定性等方面正向推動了整個研發(fā)體系的完善。

代碼質(zhì)量—缺陷檢測技術(shù)PRECFIX技術(shù)揭秘

由于阿里巴巴集團業(yè)務(wù)發(fā)展的復(fù)雜性,上文提到的P3C、PMD等傳統(tǒng)自動化檢測工具不能完全解決阿里巴巴面臨的代碼質(zhì)量問題。因為傳統(tǒng)工具多是基于規(guī)則匹配,不需要了解特定的場景,基于業(yè)務(wù)場景的BUG很難通過這些自動化工具識別出來。例如有眾多的缺陷類型難以定義,這樣就沒辦法提取出有效的匹配規(guī)則。因此我們希望有一種對缺陷類型泛化能力比較強的缺陷檢測方法或者工具,于是提出了PRECFIX方法(Patch Recommendation by Empirically Clustering)。

PRECFIX的技術(shù)思路其實并不復(fù)雜,主要分為三步,首先從代碼提交數(shù)據(jù)中提取“缺陷修復(fù)對”,然后將相似的“缺陷修復(fù)對”聚類,最后對聚類結(jié)果進行模板提取,這個缺陷檢測和補丁推薦技術(shù)可以用于代碼評審,全庫離線掃描等等。用戶的反饋以及我們?nèi)斯さ膶彶榭梢赃M一步提高模型推薦質(zhì)量。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

與國外友商的產(chǎn)品對比,PRECFIXP具有毫秒級檢測,覆蓋較多的場景,能修復(fù)部分偏業(yè)務(wù)缺陷等特性。

PRECFIX方法已經(jīng)在阿里巴巴集團內(nèi)部落地,在內(nèi)部公開庫中掃描出了800多種缺陷類型,3萬多個缺陷,提取出了3000多個模板。此功能將在這個月底前(2020年4月)通過云效代碼管理平臺(Codeup)開放給用戶使用。

代碼安全-敏感信息檢測SecretRadar

我們知道每天都有成千上萬條諸如API Key、 Database credential、Private token等敏感信息通過某些站點被無意識的泄露出去。為了預(yù)防這類問題,我們決定在云效代碼管理平臺(Codeup)提供敏感信息檢測的能力。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

因此調(diào)研了業(yè)內(nèi)多款敏感信息檢測產(chǎn)品,包括比較知名的Truffle Hog、Watchtower等。但是這些工具要么單純考慮規(guī)則匹配,要么采用信息熵技術(shù),召回率或準(zhǔn)確率無法滿足我們的預(yù)期,模型最終效果都不是非常理想。因此,我們在規(guī)則匹配和信息熵技術(shù)的基礎(chǔ)上,結(jié)合了多層檢測模型和上下文語義檢測,打造了一款敏感信息檢測工具 ——SecretRadar,從而使識別效果得到了顯著提升。

SecretRadar的實現(xiàn)思路主要分為三個層面,第一層我們采用傳統(tǒng)敏感信息識別技術(shù)通過豐富的規(guī)則集來保證模型基礎(chǔ)能力的穩(wěn)定和可靠,同時確保了模型良好的可擴展性,以此來支持后續(xù)用戶自定義的能力。但是這種方法非常依賴固化的長度、前綴、變量名等,匹配效果上容易造成漏報。因此針對難以固定規(guī)則捕捉的場景,在第二層我們采用了信息熵算法。信息熵可以用來衡量數(shù)據(jù)集的信息量大小,也就是其不確定程度。所以數(shù)據(jù)集的信息熵越大,無序程度就越高。通過計算信息熵,可以有效識別隨機生成的密文信息,從而提升模型的召回能力,補足基于規(guī)則手段的漏報問題。同樣信息熵算法也有其局限性,伴隨召回的提升是誤報率的增加。因此在第三層我們采用了模板聚類的方法,進行了過濾優(yōu)化。針對信息熵結(jié)果集聚合提取常見關(guān)鍵字,并結(jié)合上下文分析,來完成二次過濾。同時通過問題的修復(fù)情況,建立二分類數(shù)據(jù)集,完成算法優(yōu)化。進而從詞法識別迭代為語義識別。

智能評審助力開發(fā)者提升研發(fā)效能

在研發(fā)提效方面,我們認(rèn)為代碼評審是一個很好的抓手。在調(diào)研、學(xué)習(xí)了國際上多款優(yōu)秀產(chǎn)品的基礎(chǔ)上,結(jié)合阿里巴巴復(fù)雜、多樣的研發(fā)場景,我們歷時兩年打磨出來一套非常好用的代碼評審模塊。結(jié)合人工智能技術(shù),我們在業(yè)內(nèi)首創(chuàng)了評審耗時預(yù)估、評審人自動推薦等功能。

技術(shù)干貨 - 阿里巴巴自研代碼管理平臺技術(shù)解密(阿里巴巴的代碼)

接下來我們詳細(xì)了解一下評審耗時預(yù)估?!霸u審耗時預(yù)估”有什么意義呢?我們都知道,代碼評審的工作量“可大可小”,主要取決于評審代碼改動量的大小和業(yè)務(wù)邏輯的復(fù)雜度。作為軟件開發(fā)工程師,大家平時的工作都很忙,只能在開會或編碼的間隙中抽出特定時間來做代碼評審。但往往代碼評審的工作量超出了評審者的預(yù)期。同時也存在一些極端情況,某些小的評審可能只需要幾十秒就可以評審?fù)戤?,但是評審者在不知情的情況下卻為它安排了大段的評審時間。

“評審耗時預(yù)估”主要服務(wù)于兩種場景,第一個場景是用戶在未進行評審之前,可以在第一時間知曉評審的工作量,輔助他合理安排評審時間;第二個場景是對于那些同時要進行多個代碼評審的用戶,可以幫助他們合理安排評審的優(yōu)先級。

“評審耗時預(yù)估”到底是如何實現(xiàn)的呢?首先我們基于阿里巴巴集團內(nèi)部海量的公開代碼數(shù)據(jù),收集了幾百萬次的評審文件瀏覽數(shù)據(jù),提取了包括文本改動、項目歷史、行為歷史在內(nèi)的數(shù)十種特種,訓(xùn)練了機器學(xué)習(xí)模型。當(dāng)開發(fā)者提交代碼評審之時,我們根據(jù)他提交代碼的Diff內(nèi)容,自動估算出評審耗時,并伴隨代碼評審?fù)ㄖ黄饋砀嬷u審者,幫助他合理安排評審時間。以上能力會在用戶授權(quán)的情況下,陸續(xù)在云效代碼管理平臺上開放給大家使用。

我們希望在不久的將來,開發(fā)者不僅將代碼托管到云上,整個開發(fā)過程也可以搬到云上。云效代碼管理平臺(Codeup)目前正在以每周一個小版本每月一個大版本的速度迭代演進,在保證高可用、高性能、高體驗的同時,旨在給企業(yè)開發(fā)者和管理帶來更有價值的創(chuàng)新。目前所有開發(fā)者都可以通過云效官網(wǎng)免費使用Codeup,也歡迎大家加入云效開發(fā)者交流群(釘釘群號:34532418)來與我們交流討論。

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部