0
今年8月,雷鋒網將在深圳舉辦一場盛況空前,且有全球影響力的人工智能與機器人創新大會。屆時雷鋒網將發布“人工智能&機器人Top25創新企業榜”榜單。目前,雷鋒網正在拜訪人工智能、機器人領域的相關公司,從中篩選最終入選榜單的公司名單。如果你也想加入我們的榜單之中,請聯系:2020@leiphone.com。

孫宇聰:Coding.net CTO, 曾任 Google Senior Site Reliblity Engineer(2007-2014) 就職于Moutain View 總部, 曾參與設計維護YouTube 視頻轉碼/存儲/直播管理系統(系統吞吐量超過1Peta bytes/月), 參與研發管理全球 Youtube CDN 網絡 (峰值流量~10Tbps) , 后就職于Google 內部云計算部門開發維護全球百萬臺服務器生命周期管理系統及任務管理系統。
程序員的日常工作離不開代碼,有逼格的程序員都有過將代碼托管到第三方平臺的經驗,例如國外的Github幾乎成為了全球程序員的社交平臺。不過,國內這幾年也不斷涌現出一批優秀的代碼托管平臺,2014年成立的Coding就是其中之一,本期硬創公開課我們邀請到了Coding CTO孫宇聰為大家帶來有關代碼托管以及云服務的分享。
Coding是什么?
Coding 成立于2014年,是一家面向廣大程序員服務的公司,其中包括好用的項目管理工具,代碼托管平臺,社區以及靠技能變現的外包交易平臺(碼市)。
代碼版本管理工具(VCS系統或者稱之為 SCM 系統)是軟件開發項目中不可缺少的一項重要生產力工具,主要作用就是使得項目成員可以用他來管理項目中的代碼,跟蹤某個文件的歷史信息。VCS/SCM系統也是代碼評審工具,自動化持續集成工具等等的主要集成點,是敏捷式開發,快速迭代,持續集成等等一切的基礎。
目前最為流行的代碼管理系統包括SVN和GIT,還有一些較為小眾的如Mercurial(Hg),Bazar(bzr) 。這些代碼管理工具操作方式等各有不同,但是大都能實現一樣的目的,也就是跟蹤一個項目中代碼演進的歷史。
大家都知道在項目開發過程中,需求總是變來變去的, 甚至在需求制作中,代碼也總是會不停地改變。用好一套版本管理系統可以使得每次測試,發布的時候清楚的知道發布了什么東西,更好的跟蹤代碼的改變。GIT與SVN的實現各有優缺點,這里就不贅述了。目前,Coding同時支持 SVN 與 GIT 協議訪問代碼倉庫,同時提供了豐富的代碼評審,持續集成等功能,以及完善的項目管理功能。
總而言之,代碼托管平臺的最大意義不在于托管代碼,而是在于方便集成。
先來看看這樣的場景:傳統的企業運作方式是部門制,各管各的,產品經理一套流程, 設計一套,項目經理一套流程,程序員一套流程,互相不會打通。每次一開會,相關任務的背景資料都要靠口頭傳遞,甚至是用紙條來傳遞,這樣的效率非常低。
高效的軟件開發流程離不開一個完整的閉環系統。什么是敏捷,什么是DevOps? 什么是IT和商業緊密結合?這就是所謂的閉環。
軟件開發項目中的所有角色:包括程序員 ,項目經理,甚至設計師,運營人員,當然還有領導都迫切需要一個集成化的項目管理環境,使得需求、設計、代碼、上線以及運營可以緊密的結合起來。一個想法的產生,到實現,到最后運營,有據可查,有理可依,這樣的生產力肯定會提高。
這個問題好難回答, 所以我自己也經常問自己這個問題, 我們怎么敢幫人托管這么貴重的資料呢?要回答這個問題, 首先我們要先定義“好”和“壞“。我認為有幾點:
一、可用性( Availability), 一個云服務如果不能做到隨時24x7可用,那么就不會有人使用,那就談不上好了,畢竟用戶存了東西,必須能夠隨時取走。
可用性的定義是服務的在線時間比率,這個比率越高,用戶體驗當然就越好,具體可以看看下面這張圖。

一般來說,互聯網機房常見的可用性目標是99%,也就是一年有3天的不可用時間,甚至還有更低的,這種情況下供應商通常會給客戶返現補貼。顯然,這樣的標準對云服務而言太低了,云服務的基礎線是99.9%,也就是說云服務至少要達到上述表格中的第三等級以上才算合格。第四個等級每年只有52.6分鐘的不可用時間,這非常考驗技術能力,運維能力。僅憑人力這幾乎是不可完成的任務,所以運維自動化、無人化運維等詞就應運而生了。
至于如何提高可用性,以下三點是必備工作:
1.盡量做到無狀態微服務,去掉系統中的單點故障。
2.做好容量規劃, 實現N+2, 或者N+1 , (做壓力測試,性能分析) 冗余。
3.生產管理上要做好監控,報警,灰度發布等等運維手段,減少人工干預。
二、可控性(Access Control)。很多用戶更傾向于把重要的資料放在本地,這是因為大家覺得這個環境比較可控,設置完密碼后如果還不放心,可以買個鎖把機房的門鎖起來。
但是, 放到云上這樣的方式就行不通了,因此,即便云服務有訪問上的便利性,但客戶對存在云端的數據是否安全仍持懷疑態度,好的云服務必須解決這樣的問題。
可控性是一個多層次的話題,這個層次和你每天上班經過無數道門一樣, 訪問控制也應該由很多層組成,而且每層防御的目標都不一樣,大體上可以分為三層。
第一層是物理安全也是最重要的一環,任何邏輯安全都要以這個為前提。在云時代,物理安全很大程度上是靠選擇靠譜的合作伙伴來決定的,但作為一個云服務也要對此有所了解,知道自己用的云服務的物理限制,系統設計等等,這樣有的放矢的設計自己的權限控制系統、網絡隔離、加密等等高級訪問控制層。
第二層是有關協議層的安全,全站TLS加密屬于基礎。
第三層是對 ”秘密“的管理,每個云服務背后都有很多很多的秘密(可以是ssh密鑰,可以是服務器密碼,也可以是數據庫帳號)需要管理,這個管理做得越好,可控性越強。很多公司管理秘密的方式,就是一個本子,而且不更新這種做法的安全隱患很大。除此之外,關于可控性還有很多很多其他的話題,比如說 角色型權限管理,身份傳遞,應用數據加密等等,這些都是提高安全性必不可少的話題。
三、災難恢復或者說是災備,這是云服務優勢最大的地方。因為不管代碼托管在哪里,都有出現災難的可能,而災難一發生就會導致數據丟失,這是很多企業選擇云服務的原因。
云服務必須有一套常駐熱備災難恢復系統,也就是說必須有一套一模一樣的系統同步運行,生產系統宕機后,就可以自動切換到備用系統上,不管是雷擊還是挖纜云服務都能保證數據的安全。很多云服務商并沒有這樣一套穩定的系統,不是因為技術上不可能,而是因為平時不投入。
我們可以從兩個方面討論,即數據持久性(Durability)和數據可訪問性。
要保證數據持久性,就需要對數據進行備份,校驗, 必要時候進行修復。需要注意的是,備份的數據必須是可恢復的,如果平時不經常測試自己的備份數據,你會發現要用的時候備份數據也有可能完全不能用。
在數據不丟失的前提下,還要保證數據的可訪問性,否則和丟失沒有什么區別。這兩點都需要持續不斷的工程投入,包括與第三方服務的接入。
Q:Coding是一個集成化的項目管理環境,關于這塊,我們公司使用禪道+SVN來實現的,GIT有什么優勢嗎?
A:首先,代碼評審的環節我認為是必不可少的。 SVN實現起來相對更困難一些,不過要注意的是 SVN和GIT 其實和這個沒什么關系,SVN系統只是因為時間太久了,和其他系統的集成做的不能夠很好;GIT相對較新,比如說我們可以做到代碼與任務互相引用等更深度的集成,這樣一來效果就會好一些。
Q:Coding有沒有代碼質量檢查模塊,是怎么做的?
A:有的,Coding 目前的質量分析模塊是集成了Sonar Cube,這一項目是去年完成的,目前還有一個新的框架在內部使用中,基于shipshape 制作,可以接入任意質量分析模塊,各種語言如java, js, php等等全部都可以接入,這個我們會在下半年推出。

雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。