作為一名全棧工程師,,不僅是一個(gè)研發(fā)多面手,而且必須要關(guān)注產(chǎn)品的最終交付,,以及線上服務(wù)的穩(wěn)定運(yùn)行。工具化使開發(fā),、交付,、運(yùn)維緊密地聯(lián)系在一起,于是DevOps 逐漸成為了全棧們手中的利器,,但由于DevOps的復(fù)雜性,,如果沒(méi)有科學(xué)的人員、流程與工具相配合,,DevOps根本無(wú)從談起,,因此,DevOps 更是一柄雙刃劍,。 什么是DevOps呢,?先看一下wiki百科給出的解釋: DevOps (a clipped compound of development and operations) is a culture, movement or practice that emphasizes the collaboration and communication of both software developers and other information-technology (IT) professionals while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably.
簡(jiǎn)單地說(shuō),DevOps是一種開發(fā),、測(cè)試,、運(yùn)營(yíng)、維護(hù)部門之間溝通,、協(xié)作與整合的軟件過(guò)程,、方法與系統(tǒng)。
DevOps是一種高度強(qiáng)調(diào)人與人間互動(dòng)的工作方式,,不能先入為主地認(rèn)為參與者了解某方面技能,,在完成高頻率部署的同時(shí),提高生產(chǎn)環(huán)境的可靠穩(wěn)定和安全行,。 DevOps能夠?yàn)閳F(tuán)隊(duì)提供一種極具凝聚力的文化氛圍,,DevOps不光是一個(gè)方法理念,而且是一個(gè)有力的技術(shù)手段,人員,、文化,、流程與工具這幾大要素在DevOps中同樣重要。 為什么DevOps姍姍來(lái)遲DevOps 的概念在2009年就誕生了,,但沒(méi)有相關(guān)的技術(shù)支持,,只是出現(xiàn)在教科書和論文里。然而,,近年來(lái)所謂DevOps的最佳實(shí)踐逐漸越來(lái)越多,,原因何在? 云服務(wù)的普遍使用,,各種云服務(wù)成為IT基礎(chǔ)設(shè)施中不可分隔的一部分,。運(yùn)維有一個(gè)很重要的概念就是Infrastructure as code。 容器技術(shù)開始成熟,,特別是docker技術(shù)的大行其道,。容器 Container是用來(lái)存儲(chǔ)和組織其他對(duì)象的對(duì)象。Docker是一個(gè)開源的應(yīng)用容器引擎,。 微服務(wù)架構(gòu)技術(shù)的廣泛使用,。 微服務(wù) MicroService是指一個(gè)單純的小型有意義的功能。 微服務(wù),,是支撐DevOps方法的手段,,傳統(tǒng)開發(fā)是在一個(gè)服務(wù)器里面,把各種元素裝在一起組合成一個(gè)程序,,但微服務(wù)是每一個(gè)服務(wù)是一個(gè)單獨(dú)的單元,,可以部署在不同的服務(wù)器上,通過(guò)SOA的方法,,把它連接起來(lái),,再提供整個(gè)功能。 微服務(wù)是由一個(gè)個(gè)團(tuán)隊(duì)組成,,每團(tuán)隊(duì)有自己的服務(wù),,做好后,可以獨(dú)立的進(jìn)行測(cè)試,、開發(fā),、部署,然后整個(gè)應(yīng)用組合到一起,。張俠表示,,開發(fā)運(yùn)維一體化、微服務(wù)和Container是同等的,,把它們組合起來(lái),,加上云的手段才成為可能,。
4.敏捷開發(fā)流程的深入人心。 諸如Scrum, Agile, Kanban等敏捷方式被團(tuán)隊(duì)廣泛使用,,TDD,、BDD、DDD這些測(cè)試驅(qū)動(dòng)設(shè)計(jì),、行為驅(qū)動(dòng)設(shè)計(jì),、域驅(qū)動(dòng)設(shè)計(jì)等設(shè)計(jì)方式的采納,CI和CD這些持續(xù)集成和持續(xù)部署等方式的實(shí)施,,這些都是對(duì)DevOps的強(qiáng)烈需求,。 DevOps中的技術(shù)棧與工具鏈在全棧眼中,Everything is Code,,所以DevOps 是通過(guò)技術(shù)工具鏈完成持續(xù)集成,、持續(xù)交付、用戶反饋和系統(tǒng)優(yōu)化的整合,,實(shí)現(xiàn)跨團(tuán)隊(duì)的無(wú)縫協(xié)作,。 DevOps 中涉及的技術(shù)棧與工具鏈如下: DevOps 流程門戶: 這是統(tǒng)一操作的web網(wǎng)站,主要是進(jìn)度看板,,Sprint周期等,。本著拿來(lái)主義,在一定條件下,,可以采用類似Trello,,worktile等工具代替,。 身份及訪問(wèn)管理: 用戶權(quán)限管理的重要組成,,可以采用RABC的方式實(shí)現(xiàn),也可以與LDAP服務(wù)對(duì)接 產(chǎn)品管理: 產(chǎn)品的需求,,定義,,依賴,推廣等產(chǎn)品線的全面管理,,confluence 可能是個(gè)不錯(cuò)的選擇,,禪道也可以滿足一部分的功能 配置管理: 提高產(chǎn)品的配置維護(hù)能力,zookeeper 大概是不二之選,。 持續(xù)集成: 提供持續(xù)集成任務(wù)調(diào)度和執(zhí)行的能力,,Jenkins的用武之地,提供產(chǎn)品和組件自動(dòng)編譯,、打包和部署的能力,,支持編譯和部署的流程編制,進(jìn)度跟蹤和日志查看 環(huán)境管理: 提供資源配給和負(fù)載均衡的能力,,需要配合云服務(wù)的資源管理能力,。初級(jí)的負(fù)載均衡可以選擇nginx或者Haproxy,,生產(chǎn)環(huán)境的入口最好采用云服務(wù)的SLB負(fù)載均衡,以便簡(jiǎn)單地解決HA的問(wèn)題,。資源的調(diào)度采用云的彈性能力,,輔助腳本實(shí)現(xiàn)。同時(shí),,微服務(wù)的容器化(docker)管理需要特別關(guān)注,。 質(zhì)量反饋: 提供產(chǎn)品的質(zhì)量管理和監(jiān)控能力,包括測(cè)試用例,,缺陷跟蹤和質(zhì)量監(jiān)控,。Jira 是個(gè)不錯(cuò)的選擇,其他的開源工具例如禪道,,bugzila,,mantis等等,因團(tuán)隊(duì)而異,。 版本控制: 代碼庫(kù)的創(chuàng)建和維護(hù),,分支管理等。Git 幾乎是行業(yè)的標(biāo)準(zhǔn),,可以自建Git倉(cāng)庫(kù)的服務(wù)器,,也可以使用github 或者bitbucket這樣的第三方服務(wù)。 自動(dòng)化測(cè)試: 包括客戶端與服務(wù)器端的自動(dòng)化測(cè)試框架,,例如Appium,,Selenium 以及各種Mock技術(shù)和xUnit 文檔管理:各種開發(fā)、運(yùn)維,、部署文檔的統(tǒng)一管理,,同樣最好放到git上,同時(shí)指出文檔的自動(dòng)化生成 運(yùn)營(yíng)管理:這就是傳說(shuō)中的OAM 中心,,這是廣義的運(yùn)營(yíng),,其中還包括運(yùn)維的部分。OAM 不但提供了業(yè)務(wù)系統(tǒng)的運(yùn)營(yíng)操作,,還提供了面向運(yùn)維的統(tǒng)一Monitor,,alarm,fault handling等能力,,以及產(chǎn)品的資源使用和運(yùn)行狀況等,,涉及的技術(shù)很多,盡量采用云監(jiān)控+腳本的方式,,規(guī)模較小時(shí)可以嘗zZabbix 實(shí)現(xiàn)部分功能,。 溝通管理: 敏捷的一個(gè)原則就是溝通優(yōu)于文檔,IM是團(tuán)隊(duì)必備,,微信和QQ可以滿足大部分的需求,,但是Slack 因?yàn)槠鋸?qiáng)大的web hook 功能顯得更加出色,。
DevOps 的雙刃劍DevOps 的成功與技術(shù)、流程和組織的全面支撐是密不可分的,。技術(shù)棧和工具鏈只是DevOps的一個(gè)前提和基礎(chǔ),,技術(shù)方面的實(shí)踐相對(duì)容易,流程較難,,組織變革最為艱難,。DevOps還是以工程實(shí)踐為主,管理實(shí)踐這塊,,像Scrum成體系的還比較少,。DevOps玩得好,可以提高團(tuán)隊(duì)的生產(chǎn)力,。若是玩不好,,可能還不如傳統(tǒng)的生產(chǎn)模式有效率。 狹義上看,,DevOps主要困難點(diǎn)在于開發(fā)和運(yùn)維是兩種完全不同性質(zhì)的技術(shù)工作,。很多開發(fā)的同事,看著運(yùn)維人員整天就是玩幾個(gè)工具,,寫幾個(gè)腳本,,覺(jué)得蠻簡(jiǎn)單,實(shí)際上,,很多東西要在生產(chǎn)環(huán)境下快速穩(wěn)定應(yīng)用,,并沒(méi)有看上去那么容易。生產(chǎn)系統(tǒng)少出問(wèn)題(軟件本身bug除外)是運(yùn)維的績(jī)效,,多實(shí)現(xiàn)業(yè)務(wù)需求是開發(fā)的績(jī)效,,這一少一多,體現(xiàn)了兩種技術(shù)角色的根本性區(qū)別,。 業(yè)務(wù)壓力往往導(dǎo)致技術(shù)部門的任務(wù)主要是“快”,,在這種情況下,,DevOps必然失衡,,因?yàn)橹蛔非罂欤筒恍枰猳ps了,,只需要dev加班加點(diǎn)即可,,不重視ops,結(jié)果必然是悲催的,,往往業(yè)務(wù)上線后雞飛狗跳,,各種問(wèn)題不斷,出幾次事故就可能對(duì)產(chǎn)品形象的傷害很大,。 對(duì)全棧來(lái)說(shuō),,業(yè)務(wù)初期到底要不要考慮高可用,?從Dev角度看,簡(jiǎn)潔明快的實(shí)現(xiàn)就行了,,從Ops的角度看,,高可用、監(jiān)控,、報(bào)表這些東西在業(yè)務(wù)正式上線前就是必須要考慮的,。 因此,DevOps實(shí)施成功的關(guān)鍵,,涉及到團(tuán)隊(duì)管理,,項(xiàng)目管理,技術(shù)管理等諸多方面,。DevOps并非治病良藥,,如果團(tuán)隊(duì)正能量大,實(shí)施起來(lái)就相對(duì)容易,,否則引入DevOps可能也無(wú)法改變什么,。對(duì)于一個(gè)全棧而言,DevOps是一柄必備的雙刃劍,。
|