0
本文作者: 程弢 | 2016-06-13 19:37 | 專題:雷峰網(wǎng)公開(kāi)課 |
今年8月,雷鋒網(wǎng)將在深圳舉辦一場(chǎng)盛況空前,且有全球影響力的人工智能與機(jī)器人創(chuàng)新大會(huì)。屆時(shí)雷鋒網(wǎng)將發(fā)布“人工智能&機(jī)器人Top25創(chuàng)新企業(yè)榜”榜單。目前,雷鋒網(wǎng)正在拜訪人工智能、機(jī)器人領(lǐng)域的相關(guān)公司,從中篩選最終入選榜單的公司名單。如果你也想加入我們的榜單之中,請(qǐng)聯(lián)系:2020@leiphone.com。
孫宇聰:Coding.net CTO, 曾任 Google Senior Site Reliblity Engineer(2007-2014) 就職于Moutain View 總部, 曾參與設(shè)計(jì)維護(hù)YouTube 視頻轉(zhuǎn)碼/存儲(chǔ)/直播管理系統(tǒng)(系統(tǒng)吞吐量超過(guò)1Peta bytes/月), 參與研發(fā)管理全球 Youtube CDN 網(wǎng)絡(luò) (峰值流量~10Tbps) , 后就職于Google 內(nèi)部云計(jì)算部門開(kāi)發(fā)維護(hù)全球百萬(wàn)臺(tái)服務(wù)器生命周期管理系統(tǒng)及任務(wù)管理系統(tǒng)。
程序員的日常工作離不開(kāi)代碼,有逼格的程序員都有過(guò)將代碼托管到第三方平臺(tái)的經(jīng)驗(yàn),例如國(guó)外的Github幾乎成為了全球程序員的社交平臺(tái)。不過(guò),國(guó)內(nèi)這幾年也不斷涌現(xiàn)出一批優(yōu)秀的代碼托管平臺(tái),2014年成立的Coding就是其中之一,本期硬創(chuàng)公開(kāi)課我們邀請(qǐng)到了Coding CTO孫宇聰為大家?guī)?lái)有關(guān)代碼托管以及云服務(wù)的分享。
Coding是什么?
Coding 成立于2014年,是一家面向廣大程序員服務(wù)的公司,其中包括好用的項(xiàng)目管理工具,代碼托管平臺(tái),社區(qū)以及靠技能變現(xiàn)的外包交易平臺(tái)(碼市)。
代碼版本管理工具(VCS系統(tǒng)或者稱之為 SCM 系統(tǒng))是軟件開(kāi)發(fā)項(xiàng)目中不可缺少的一項(xiàng)重要生產(chǎn)力工具,主要作用就是使得項(xiàng)目成員可以用他來(lái)管理項(xiàng)目中的代碼,跟蹤某個(gè)文件的歷史信息。VCS/SCM系統(tǒng)也是代碼評(píng)審工具,自動(dòng)化持續(xù)集成工具等等的主要集成點(diǎn),是敏捷式開(kāi)發(fā),快速迭代,持續(xù)集成等等一切的基礎(chǔ)。
目前最為流行的代碼管理系統(tǒng)包括SVN和GIT,還有一些較為小眾的如Mercurial(Hg),Bazar(bzr) 。這些代碼管理工具操作方式等各有不同,但是大都能實(shí)現(xiàn)一樣的目的,也就是跟蹤一個(gè)項(xiàng)目中代碼演進(jìn)的歷史。
大家都知道在項(xiàng)目開(kāi)發(fā)過(guò)程中,需求總是變來(lái)變?nèi)サ模?nbsp;甚至在需求制作中,代碼也總是會(huì)不停地改變。用好一套版本管理系統(tǒng)可以使得每次測(cè)試,發(fā)布的時(shí)候清楚的知道發(fā)布了什么東西,更好的跟蹤代碼的改變。GIT與SVN的實(shí)現(xiàn)各有優(yōu)缺點(diǎn),這里就不贅述了。目前,Coding同時(shí)支持 SVN 與 GIT 協(xié)議訪問(wèn)代碼倉(cāng)庫(kù),同時(shí)提供了豐富的代碼評(píng)審,持續(xù)集成等功能,以及完善的項(xiàng)目管理功能。
總而言之,代碼托管平臺(tái)的最大意義不在于托管代碼,而是在于方便集成。
先來(lái)看看這樣的場(chǎng)景:傳統(tǒng)的企業(yè)運(yùn)作方式是部門制,各管各的,產(chǎn)品經(jīng)理一套流程, 設(shè)計(jì)一套,項(xiàng)目經(jīng)理一套流程,程序員一套流程,互相不會(huì)打通。每次一開(kāi)會(huì),相關(guān)任務(wù)的背景資料都要靠口頭傳遞,甚至是用紙條來(lái)傳遞,這樣的效率非常低。
高效的軟件開(kāi)發(fā)流程離不開(kāi)一個(gè)完整的閉環(huán)系統(tǒng)。什么是敏捷,什么是DevOps? 什么是IT和商業(yè)緊密結(jié)合?這就是所謂的閉環(huán)。
軟件開(kāi)發(fā)項(xiàng)目中的所有角色:包括程序員 ,項(xiàng)目經(jīng)理,甚至設(shè)計(jì)師,運(yùn)營(yíng)人員,當(dāng)然還有領(lǐng)導(dǎo)都迫切需要一個(gè)集成化的項(xiàng)目管理環(huán)境,使得需求、設(shè)計(jì)、代碼、上線以及運(yùn)營(yíng)可以緊密的結(jié)合起來(lái)。一個(gè)想法的產(chǎn)生,到實(shí)現(xiàn),到最后運(yùn)營(yíng),有據(jù)可查,有理可依,這樣的生產(chǎn)力肯定會(huì)提高。
這個(gè)問(wèn)題好難回答, 所以我自己也經(jīng)常問(wèn)自己這個(gè)問(wèn)題, 我們?cè)趺锤規(guī)腿送泄苓@么貴重的資料呢?要回答這個(gè)問(wèn)題, 首先我們要先定義“好”和“壞“。我認(rèn)為有幾點(diǎn):
一、可用性( Availability), 一個(gè)云服務(wù)如果不能做到隨時(shí)24x7可用,那么就不會(huì)有人使用,那就談不上好了,畢竟用戶存了東西,必須能夠隨時(shí)取走。
可用性的定義是服務(wù)的在線時(shí)間比率,這個(gè)比率越高,用戶體驗(yàn)當(dāng)然就越好,具體可以看看下面這張圖。
一般來(lái)說(shuō),互聯(lián)網(wǎng)機(jī)房常見(jiàn)的可用性目標(biāo)是99%,也就是一年有3天的不可用時(shí)間,甚至還有更低的,這種情況下供應(yīng)商通常會(huì)給客戶返現(xiàn)補(bǔ)貼。顯然,這樣的標(biāo)準(zhǔn)對(duì)云服務(wù)而言太低了,云服務(wù)的基礎(chǔ)線是99.9%,也就是說(shuō)云服務(wù)至少要達(dá)到上述表格中的第三等級(jí)以上才算合格。第四個(gè)等級(jí)每年只有52.6分鐘的不可用時(shí)間,這非??简?yàn)技術(shù)能力,運(yùn)維能力。僅憑人力這幾乎是不可完成的任務(wù),所以運(yùn)維自動(dòng)化、無(wú)人化運(yùn)維等詞就應(yīng)運(yùn)而生了。
至于如何提高可用性,以下三點(diǎn)是必備工作:
1.盡量做到無(wú)狀態(tài)微服務(wù),去掉系統(tǒng)中的單點(diǎn)故障。
2.做好容量規(guī)劃, 實(shí)現(xiàn)N+2, 或者N+1 , (做壓力測(cè)試,性能分析) 冗余。
3.生產(chǎn)管理上要做好監(jiān)控,報(bào)警,灰度發(fā)布等等運(yùn)維手段,減少人工干預(yù)。
二、可控性(Access Control)。很多用戶更傾向于把重要的資料放在本地,這是因?yàn)榇蠹矣X(jué)得這個(gè)環(huán)境比較可控,設(shè)置完密碼后如果還不放心,可以買個(gè)鎖把機(jī)房的門鎖起來(lái)。
但是, 放到云上這樣的方式就行不通了,因此,即便云服務(wù)有訪問(wèn)上的便利性,但客戶對(duì)存在云端的數(shù)據(jù)是否安全仍持懷疑態(tài)度,好的云服務(wù)必須解決這樣的問(wèn)題。
可控性是一個(gè)多層次的話題,這個(gè)層次和你每天上班經(jīng)過(guò)無(wú)數(shù)道門一樣, 訪問(wèn)控制也應(yīng)該由很多層組成,而且每層防御的目標(biāo)都不一樣,大體上可以分為三層。
第一層是物理安全也是最重要的一環(huán),任何邏輯安全都要以這個(gè)為前提。在云時(shí)代,物理安全很大程度上是靠選擇靠譜的合作伙伴來(lái)決定的,但作為一個(gè)云服務(wù)也要對(duì)此有所了解,知道自己用的云服務(wù)的物理限制,系統(tǒng)設(shè)計(jì)等等,這樣有的放矢的設(shè)計(jì)自己的權(quán)限控制系統(tǒng)、網(wǎng)絡(luò)隔離、加密等等高級(jí)訪問(wèn)控制層。
第二層是有關(guān)協(xié)議層的安全,全站TLS加密屬于基礎(chǔ)。
第三層是對(duì) ”秘密“的管理,每個(gè)云服務(wù)背后都有很多很多的秘密(可以是ssh密鑰,可以是服務(wù)器密碼,也可以是數(shù)據(jù)庫(kù)帳號(hào))需要管理,這個(gè)管理做得越好,可控性越強(qiáng)。很多公司管理秘密的方式,就是一個(gè)本子,而且不更新這種做法的安全隱患很大。除此之外,關(guān)于可控性還有很多很多其他的話題,比如說(shuō) 角色型權(quán)限管理,身份傳遞,應(yīng)用數(shù)據(jù)加密等等,這些都是提高安全性必不可少的話題。
三、災(zāi)難恢復(fù)或者說(shuō)是災(zāi)備,這是云服務(wù)優(yōu)勢(shì)最大的地方。因?yàn)椴还艽a托管在哪里,都有出現(xiàn)災(zāi)難的可能,而災(zāi)難一發(fā)生就會(huì)導(dǎo)致數(shù)據(jù)丟失,這是很多企業(yè)選擇云服務(wù)的原因。
云服務(wù)必須有一套常駐熱備災(zāi)難恢復(fù)系統(tǒng),也就是說(shuō)必須有一套一模一樣的系統(tǒng)同步運(yùn)行,生產(chǎn)系統(tǒng)宕機(jī)后,就可以自動(dòng)切換到備用系統(tǒng)上,不管是雷擊還是挖纜云服務(wù)都能保證數(shù)據(jù)的安全。很多云服務(wù)商并沒(méi)有這樣一套穩(wěn)定的系統(tǒng),不是因?yàn)榧夹g(shù)上不可能,而是因?yàn)槠綍r(shí)不投入。
我們可以從兩個(gè)方面討論,即數(shù)據(jù)持久性(Durability)和數(shù)據(jù)可訪問(wèn)性。
要保證數(shù)據(jù)持久性,就需要對(duì)數(shù)據(jù)進(jìn)行備份,校驗(yàn), 必要時(shí)候進(jìn)行修復(fù)。需要注意的是,備份的數(shù)據(jù)必須是可恢復(fù)的,如果平時(shí)不經(jīng)常測(cè)試自己的備份數(shù)據(jù),你會(huì)發(fā)現(xiàn)要用的時(shí)候備份數(shù)據(jù)也有可能完全不能用。
在數(shù)據(jù)不丟失的前提下,還要保證數(shù)據(jù)的可訪問(wèn)性,否則和丟失沒(méi)有什么區(qū)別。這兩點(diǎn)都需要持續(xù)不斷的工程投入,包括與第三方服務(wù)的接入。
Q:Coding是一個(gè)集成化的項(xiàng)目管理環(huán)境,關(guān)于這塊,我們公司使用禪道+SVN來(lái)實(shí)現(xiàn)的,GIT有什么優(yōu)勢(shì)嗎?
A:首先,代碼評(píng)審的環(huán)節(jié)我認(rèn)為是必不可少的。 SVN實(shí)現(xiàn)起來(lái)相對(duì)更困難一些,不過(guò)要注意的是 SVN和GIT 其實(shí)和這個(gè)沒(méi)什么關(guān)系,SVN系統(tǒng)只是因?yàn)闀r(shí)間太久了,和其他系統(tǒng)的集成做的不能夠很好;GIT相對(duì)較新,比如說(shuō)我們可以做到代碼與任務(wù)互相引用等更深度的集成,這樣一來(lái)效果就會(huì)好一些。
Q:Coding有沒(méi)有代碼質(zhì)量檢查模塊,是怎么做的?
A:有的,Coding 目前的質(zhì)量分析模塊是集成了Sonar Cube,這一項(xiàng)目是去年完成的,目前還有一個(gè)新的框架在內(nèi)部使用中,基于shipshape 制作,可以接入任意質(zhì)量分析模塊,各種語(yǔ)言如java, js, php等等全部都可以接入,這個(gè)我們會(huì)在下半年推出。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。