揭祕碼雲:全球第二大代碼託管平臺的核心架構

嘉賓介紹

周凱,現任碼雲(https://gitee.com)負責人,負責碼雲相關的產品、開發、運維以及大客戶服務等業務;擅長Ruby、Linux及DevOps;爲招商銀行、招商證券、比亞迪等企業提供代碼託管及項目管理的培訓和諮詢服務。

InfoQ:對您來說,目前碼雲在系統架構上面臨的最大挑戰是什麼?未來重點的突破口是什麼?

周凱:我們碼雲從2013年上線到現在經過了將近6年的發展,用戶數現在已經超過了300萬,項目數已經超過了500萬,這麼大量的用戶量帶給我們的壓力,一是存儲上的壓力,二是計算資源上的壓力。因爲像在工作日的高峯期,大家都會非常非常多地去推送和拉取代碼,這樣帶給我們的就是計算資源和存儲資源的壓力。
目前我們所造成的問題也是因爲這些數據的增長,給我們線上的系統造成的一些壓力。我們現在線上其實已經是一個分佈式的架構,目前我們也是在優化和提升底層架構的性能,從性能上提升來去(00:57 掉幀)。對系統的改造,主要也是對系統的一個改造。在技術上面,我們通過去研究git底層的一些協議去減少甚至於說避免一些沒有必要的操作,去提升我們應用的一些性能和架構(01:17 掉幀)。

InfoQ:據我們目前所知,其實很多企業他們自己可以去搭建一個版本的管理系統 ,那他們爲什麼沒有自己來搭建這個版本管理系統,反而選擇了跟碼雲合作?

周凱:這個問題挺好的,有很多種原因。首先,據我瞭解,有很多企業,他們自己搭建,肯定你自己也得投入服務器的資源,你買雲服務器也好,你自己買個服務器放到自己公司也好,都是要投入這些硬件資源的,此外你還要投入人力資源。這些資源加起來跟你購買一些線上的SaaS服務差不了多少,甚至於說你買線上的SaaS服務會更省心。企業在這一塊投入了這些資源,比如說投資了硬件資源,你還要投入人力資源,這個人你得有人去維護,維護這個人,如果有運維的話還好,如果沒有運維的話就需要我們開發者去做這樣的運維工作,難免開發這會有一些小情緒,或者說開發者如果人離職之後,這個系統該由誰來維護,很容易造成一種沒人維護的局面。

另外就是,如果這個系統託管在我們自己公司內部,那大廈斷電、物業維護,斷了電之後,這個系統如果是在節假日就沒法起來了,而且斷電頻繁很容易造成磁盤的損壞,也容易造成代碼的丟失。

還有一點,自建系統功能單一,你只能用我們開源的那些項目,很多情況下無法滿足企業的需要,而碼雲則是根據大量的企業用戶的反饋,不斷的提升和打磨,推出了一系列助力提神企業研發效率的功能,比如週報、代碼量統計等,因爲這些東西都涉及到我們開發者的績效考覈。這些在自建的代碼託管系統裏是沒有的,而且我們也會進一步根據企業的反饋做出對應的調整,使得碼雲能夠更加符合企業的使用習慣。

再者,我們一直堅信代碼是企業的唯一核心資產,但是我發現稍微大點的公司的IT部門這塊管理比較混亂,不同子部門之間選擇自行搭建,這就造成了公司的代碼管理不統一,甚至於我遇到的一種情況是,某一個部門做了一個產品,這個產品上線了兩年,一直運行的挺好,但是是程序總有Bug,當出現Bug想回頭找源碼進行修復的時候,已經找不到了,原來的版本管理服務器可能已經被重裝做了其他用處,這個就比較麻煩了。

再比如說安全相關的東西,開發者代碼是放在我們碼雲上的,開發者不可能說刪代碼或者刪庫跑路,當然這個是我們作爲開發者自嘲的一種方式,但是這種事也時有發生,用我們碼雲的話,就能夠避免這種情況。首先我們有很完善的安全保障措施,安全權限的管控,你要刪項目必須得通過老闆的同意,手機短信的驗證碼,另外我們還有很完善的快照機制,我們保留了你近半年來每一週的倉庫的快照,極大地降低這種問題的發生。

InfoQ:這樣看來,碼雲可以爲開發者和企業解決很多不必要的一些問題。

周凱:對,至少是一些不必要的麻煩,我們首先預知到或者說我們在線上遇到過,我們給它解決調,後面的人其實就不會再遇到了。

InfoQ:今年據我們所知是碼雲上線的第五年,您能否給我們介紹一下碼雲目前的基本情況?

周凱:碼雲從2013年上線,到明年就已經是6年了,2013年到2019年已經6年了,整個碼雲從剛開始上線到現在,用戶數每年都是在翻倍增長的,可以毫不誇張的說已成爲全球第二大的代碼託管平臺,因爲我們目前已經積累了300多萬用戶,500多萬的項目,除了Github之外我們碼雲的數據量是最多的,此外碼雲上的開源生態也越來越好,越來越多的開源作者把他們的開源項目放到碼雲上,在數據上大概是這個樣子。還有從2016年我們開始探索商業化的道路,畢竟硬件資源以及人力資源的投入都需要大量的資金,所以我們推出了碼雲公有云的SaaS服務以及私有化部署服務,目前公有云的SaaS服務已經有超過5萬家的企業在使用,私有化部署產品也有像招商銀行、招商證券、比亞迪、臨商銀行等在使用。另外在功能上,我們因爲本身也是基於開源的gitlab進行二次改造的,所以在功能上我們也做了很多的優化和提升。因爲本身我們是服務於國內開發者的,我們立足於在國內要做的就是本土化的代碼託管和研發協作的產品。所以在功能上我們也是做了很多的改進,爲了方便我們國內的開發者去使用,我們也做了很多的改進和提升,比如說在語言上,國外的很多都是那種英文的,但是我們有中文的操作界面。在功能上,有很多功能,國內開發者不太習慣使用國外的那種操作方式和流程,但我們就把產品打包成我們本土開發者容易接受的方式。

InfoQ:適合中國開發者使用的。

周凱:對。另外還推了很多服務於開發者、助力於開發者的一些服務,比如像代碼克隆檢測、質量分析,我們在國內也跟很多大廠商進行了一些合作,比如說阿里雲、百度、騰訊,我們都有(05:57 英)CI、CD的程序上的對接,因爲我們作爲一個代碼倉庫、一個代碼中心,很容易融入這些產品,去做對接,來提升開發者、賦能開發者。

InfoQ:從2013年碼雲上線以來,在功能和產品上有什麼重大改進和迭代?

周凱:在功能上,因爲我們做了很多利好於本土開發者的一些功能和用戶體驗,此外像質量分析,這個東西本身就算是我們提供的一個三方的服務,這種服務就可以讓開發者很方便地能夠一鍵分析自己的代碼,你的代碼裏面有什麼樣的漏洞,比如常見的(06:50 英)漏洞,這些東西都可以通過這種方式檢測出來,進而提升我們開發者的代碼質量。
還有就是上線以來我們對整個產品的底層做了徹底的重構,因爲我們初期上線是基於Gitlab進行改造的,我們做了大量的底層優化來處理線上百萬級用戶的使用量,此外我們還推出了很多助力開發者的服務,比如今年推出的Gitee IDE,讓用戶可以更加方便的在Web端進行代碼的編寫

另外就是Copycat,它就是一個代碼克隆檢測的服務,因爲我們現在國內有很多開源項目在一定程度上存在抄襲的現象,你抄我的,我怎麼才能知道你抄我的,因爲代碼太多了,我不可能說一個一個去看,我們提供Copycat這種代碼克隆檢測服務,你可以把兩個倉庫的URL輸進去,我們幫你檢測代碼的相似度,這樣的話可以從一定程度上發現抄襲的現象,你甚至於可以預防或者解決這種抄襲的問題。我們在這一塊主要就是這種助力開發者服務的研發,大概是這樣。

InfoQ:您認爲這些功能上和產品上的改進和迭代,它背後的驅動因素是什麼?爲什麼要這樣做?

周凱:這個我們在線上一直都有在做大量的用戶調研這麼一件事,我們會去收集很多用戶的信息,通過這些用戶信息可以改建和提升我們自己產品的功能和用戶體驗。

此外,我們還有大量的反饋渠道,比如說我們有QQ羣、微信羣、郵件,我們社區有一個產品叫動彈(同音),大家可以在裏面反饋問題,我們自己的網站也有一個反饋的渠道。這些大量的、多方面、多通道的反饋渠道讓我們能夠接收到很多用戶的反饋信息。這些用戶的反饋信息恰恰是我們能夠提升自己產品的一個基本,通過這些反饋提升產品,產品提升後給用戶去使用,還有我們的最終目標也是希望,我們的產品在未來可以覆蓋更多開發者,滿足開發者的更多需求,讓我們的產品可以更加深入人心。進而把碼雲打造成一個國內的本土化的代碼託管產品。

InfoQ:碼云爲什麼被稱爲中國的GitHub?爲什麼它可以在衆多競品裏面脫穎而出?您認爲碼雲對國內的開發者可以提供什麼樣的價值?

周凱:剛剛也有聊到,爲什麼說碼雲被稱爲中國的GitHub,因爲我們在立足於國內市場的時候,我們剛開始所說的提供的一些功能,其實全都是根據用戶反饋或者我們自己去調研所得出的一些結果,通過這些結果的收集和整理,我們自己內部在做一些產品研討會之類的事情,把這些功能能夠開發,放到線上,能夠讓開發者去使用,能夠真正符合國內開發者的使用習慣。

另外就是,我們在國內用戶量也越來越大,這種越來越大的用戶量並不是說我們自己的推廣做得多好,其實碼雲從2013年上線到現在,我們在推廣上一直沒有花特別大的力氣和投入特別大的資金和人力,當然這些東西都是通過開發者口口相傳的。比如說有一些功能開發者覺得好用,他就過來用了,比如上我們的私有庫免費,他覺得這個私有庫免費,我不用掏錢就可以用,我就過來用了。當我們達到一定用戶量的時候,開源作者也會覺得,這個平臺不錯,他會把自己的開源項目放上來。開源項目放上來之後能夠吸引到用戶,本身開源項目社區的一些用戶也到碼雲上面來,所以這是一個雙向利好的關係,開源項目放到碼雲上來,碼雲能爲他提供用戶,開源項目的用戶,本身不知道碼雲的用戶也都能到碼雲上面來。所以碼雲就要靠這種口口相傳的口碑,纔在國內能夠取得這麼大的市場和這麼大的用戶量和項目量。

InfoQ:達到雙贏的效果。

周凱:對,是這樣。

關於給開發者帶來什麼價值,我覺得更多的,首先是這個工具的使用能夠讓開發者免費地達到他們自己所想要達到的一些效果。另外一個是開發者能夠把自己的代碼放到碼雲上,能夠把代碼開源出去,能夠向整個碼雲站線他們的技術實力,進而如果自己的開源項目能夠被更多人去用,他就能夠達到一定的價值,因爲開源項目的價值就在於你被很多用戶去用,用戶有問題,比如像付費諮詢、二開這種東西,肯定是找開源作者、原作者是做得最好的,所以在這塊上,可以通過碼雲發揮開發者自身的技術價值,是這樣。

InfoQ:我們瞭解到,碼雲在爲招商銀行、招商證券、比亞迪這類傳統企業提供代碼託管服務,在您看來,這些企業他們的痛點是什麼?他們爲什麼會選擇跟碼雲合作?

周凱:我2016年開始第一次出去做這種大客戶的授權工作的時候,其實就是招商證券,後來我們又做了很多像招商銀行、比亞迪、臨商銀行,這些都是比較大型的企業,像招行在整個股份制的銀行裏面算是標杆了,他們企業的痛點就在於內部管理代碼的問題,內部管理代碼不統一、很分散。因爲我們一直認爲,整個企業唯一的核心資產就是代碼,我們招了很多的開發者進來,他們所產生的大部分的只是源代碼而已。所以大企業在這塊的痛點,一是代碼管控不嚴格,每個部門都自建一個服務器,都在自己的版本管理系統上去進行自己產品的研發。這樣造成的一種問題就是,比如說有一個部門做了一個產品,這個產品跑得好好的,但是兩年後突然出現了一個BUG,當我回頭想去找這個代碼的時候,我發現找不着了,爲什麼?這個服務器可能已經被人革掉用作其他用處了,這個小組的負責人,負責這個機器運維的人都已經不在了,這就非常麻煩。關鍵是你的這個東西還是編譯出來的二進制包,還還不是源碼,所以這就很麻煩。

另外一點是,整個企業沒法很方便地衡量自己企業到底有多少代碼、到底有多少項目,每一個程序員、每一個開發者每天提到了多少行代碼,這些我都是不知道的,但是使用我們碼雲就可以解決這樣的問題。

還有一個問題是“代碼孤島”,怎麼叫代碼孤島,就是沒有形成一個良好的內部開源的情況,因爲我們現在全世界,甚至於我們國內今年開源這種現象非常非常熱烈。但是對於公司內部,很多時候不同部門間他們還是在重複造輪子。比如說這個部門做了一個組件,那個部門用這個組件的時候還在自己做,但它們倆之間本身這個組件是可以複用的,就是因爲代碼管理不統一導致了代碼孤島的問題,讓他們部門之間沒有很好地進行知識的共享,沒有進行內部開源的機制,所以才導致開發效率低,其實這間接也導致了開發效率的低下,因爲本身這個東西可以避免掉去開發量的,但是我還是又去重複造輪子。

大企業種種類似的問題,我們碼雲能夠完美解決,所以他們才選擇跟我們碼雲進行合作。市面上又有很多產品,很多競品,他們甚至可以自建,他們可以專門拉一組自建,但是爲什麼選擇了我們?因爲我們上線這五六年的時間,一直以來我們都以用戶的需求作爲核心,所以在外界我們積累了良好的口碑,同時也樹立了良好的品牌形象,並且我們線上百萬級的併發能夠扛住,說明我們系統的穩定性和健壯性都是非常好的,另外很多大佬級別的開源項目也在用我們的產品,更多這種開源作者本身就是在那個公司的,所以他們也會口口相傳,去說我們的碼雲還是挺好的,這種口碑相應也是能夠促使大企業跟碼雲達成合作的一個重要的點。當然我覺得最重要的肯定還是他們對於我們碼雲服務於用戶的態度,以及我們真真正正能夠解決用戶的問題,是這樣子。

InfoQ:最後一個問題是關於碼雲的未來,未來3-5年之內,碼雲有什麼規劃?其中IT部門會對實現這個目標提供一些什麼樣的支持?

周凱:這個問題,近期我們肯定還是以提升用戶量爲主,另外對線上的SaaS服務以及私有化的服務,也會去做大力的推廣和鋪展。因爲我們從2016年纔開始,其實今年纔開始有一個特別好的發展勢頭,所以近期我們肯定是在這兩個方面做。

未來3-5年的目標,這個說起來有點遠了,我自己來看的話,我們是想說在未來這幾年的時間裏面能夠讓更多的開發者瞭解到碼雲,能夠讓開發者說我們倆來合作寫一個項目,項目放在哪兒?他們第一時間能夠想到把項目放在碼雲上,“寫代碼找碼雲”,我們在開發者羣體裏面能夠形成這樣一種效果的話,我覺得這是未來3-5年我們的目標。

另外關於企業服務這塊,我們想做到,企業在想我們研發協作或者代碼託管的場景,這麼一種服務,我們要買一下,我們不能自己搞,在他們想買的時候,他們能夠第一時間想到碼雲,這就是我們未來3-5年想要達到的一個目標,其實就是影響力和口碑的進一步提升。

另外一點,關於IT部門如何支撐,這個得分三部分來講,因爲我們這邊分工還是比較明確的。

第一個部門是應用開發部們,應用開發部門的主要一個目標還是以提升用戶體驗、提升產品功能、細化產品的使用流程爲目標,在功能體驗上讓用戶覺得用得非常舒服、非常流暢。

第二個部門是底層架構部,主要是分佈式架構研發的提升工作,這一塊也是希望能夠在架構上面進一步做提升,來適應線上這麼大的用戶量增長以及訪問量的提升。這塊也是希望能夠做到讓用戶用起來非常流暢、非常快,不會出現我用着用着突然哪一塊性能不好、卡頓之類的情況。

另外比較重要的是運維部門,運維部門我們所解決的問題就是想在未來的時間裏面更好更快地讓碼雲能夠安全穩定可靠地運行。因爲碼雲在上線這幾年來也遭受到了很多攻擊,各種不同CC的攻擊以及不同的DDoS的攻擊,這些東西都是需要我們運維部門去解決和預防的,甚至於說搭建自己的一些日誌系統去預警,我們運維部門所做的就是進一步提高運維自動化的能力,保障碼雲能夠高效、安全、可靠地運行,讓用戶能夠無感知、流暢地去使用。

InfoQ:非常詳盡的一個計劃,可以看到碼雲是非常認真地在考慮它的未來。

周凱:是。碼雲這個產品從剛開始一直是以開發者服務爲目標。我們剛開始做這種服務的時候,所有的需求和反饋都是從一線的使用者來的,因爲使用者也是開發者,我們自己的人也是開發者,所以我們是一起把這個產品打磨得越來越好的,我們是秉着“以用戶爲先”的理念和策略,才能夠讓碼雲現在成爲國內最大的、全球第二大的代碼託管平臺。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章