極牛技術實踐分享活動
極牛技術實踐分享系列活動是極牛聯合頂級VC、技術專家,爲企業、技術人提供的一種系統的線上技術分享活動。
每期不一樣的技術主題,和行業專家深度探討,專一解決技術實踐難點,推進技術創新,每週三20點正式開課。歡迎各個機構、企業、行業專家、技術人報名參加。
嘉賓介紹
代聞,亞馬遜AWS解決方案架構師,負責基於AWS的雲計算方案架構的諮詢和設計,同時致力於AWS雲服務在國內的應用和推廣,在大規模後臺架構、物聯網應用、媒體行業轉型、企業混合IT和自動化運維等方面有着普遍的設計和實踐經驗。在加入AWS以前,在思科中國擔任系統工程師,負責方案諮詢和架構設計,在企業私有云和基礎網絡方面有豐富經驗。曾任IBM中國軟件開發中心軟件工程師,從事企業軟件和移動平臺的開發工做。
在不少企業中,應用程序發佈是一項涉及多個團隊、壓力很大、風險很高的活動。然而在具有DevOps能力的組織中,應用程序發佈的風險卻很低。目前開發人員對於DevOps的認識深淺不一,本期請到了亞馬遜架構師代聞來爲咱們實例解析DevOps。
01/DevOps簡介和適用場景
DevOps是一個軟件開發的方法,目的是爲了提升內部運維能力,也就是說,DevOps是運維的一個方式,只不過經過軟件實現了更高的自動化。DevOps一詞,Dev是形容詞,Ops是主體,DevOps的興起,並非技術人員自娛自樂,而是業務需求推進的結果。
傳統的瀑布式開發,週期長,風險大;如今的初創公司推崇的是敏捷開發、快速迭代
可是敏捷開發僅解決了軟件開發的問題,若是集成、部署、平臺搭建沒有作相應的調整,Ops將會是整個流程的短板。
固然,這裏面涉及到另外一個話題,就是微服務。當軟件開發的各個團隊負責各自服務,彼此經過約定接口調用實現鬆耦合,軟件集成和部署就能夠細化到各個服務,而後經過工具和平臺實現持續的集成、部署、平臺構建,平臺的敏捷程度就會大大提高。其中,經過代碼、腳原本加速集成、部署和平臺構建的過程,能夠成爲DevOps。
DevOps須要關注的方面不少,主要有兩個重點:
第一,文化和組織
關於DevOps文化和組織,聽起來比較虛,但倒是DevOps應用的核心。
傳統公司裏,開發和運維之間有既成組織架構的界限,向DevOps轉型須要付出不少努力
初創公司負擔少,更容易接受DevOps。
DevOps要求開發和運維之間互相協做,以業務爲共同目標,實現快速迭代,平臺的feature從設計、開發到交付的整個流程,都有擔任ops角色的同事(也可能兼開發)參與,確保程序在設計初始就已經考慮到基礎架構的優化,以及後續的內部OP事宜。
同時,擔任DevOps角色的同事的技能要比以往更多一些,除了基本的服務器、網絡、存儲知識,還須要有代碼或腳本能力。
綜合下來,能夠看到三種模式:
1)開發兼運維:這是在初創公司最多見的模式,5人如下的團隊不少是這樣的;
2)每一個產品團隊有OP同事,但沒有運維Team。這是開始發展的公司,須要有專人作OP,可是op仍是在研發的team;
3)獨立的OP Team,適用於已經有必定規模的公司。好比,在AWS的用戶裏,我常看到80人以上的技術團隊,一半都會有考慮將基礎架構管理獨立出來。
但不管哪一種模式,都要求Ops同事除了基本系統管理之外,可以有腳本或代碼的能力,可以有基於雲作平臺架構的能力。
雲計算將最底層的數據中心運維作完了,基於雲作DevOps和架構設計也就成了天然而然的事情。好比,在獵豹移動,海外運維團隊10人如下,管理着上萬的VM,以及各種平臺服務,DevOps是必須的。
另外,若是組織發展壯大後,在DevOps過程裏有一些須要仲裁的事情(如上線時間和方式),或者有些標準須要制定(如版本、平臺環境等),建議有一個技術委員會(若是組織小,也許就一兩我的)來做仲裁。在Netflix,這個委員會叫CORE Team,你們能夠Google如下Re:invent 2015大會上Netflix的分享。
第二,工具和平臺php
既然DevOps是以軟件開發的方式來解決運維自動化,先看看軟件開發的工具和平臺。首先最底層的Platform就是服務器和操做系統,操做系統有API是一切的基礎,而後操做系統的API包裝成系統編程的SDK,再而後纔有高級語言和解釋型語言運行的框架,最上面一層是代碼,同時,代碼也能夠越過封裝,經過Native調用的方式來調用更底層的接口。
02/AWS DevOps介紹java
公有云對DevOps的支持,實際上是一個原理。以AWS爲例,Platform就是底層的基礎設施,AWS經過技術平臺實現了基礎設施虛擬化,並提供API,這是最核心的部分,沒有API,一切無從談起。這個API就是Restful API,這也是Amazon Web Services的由來,由於Restful API就是web services,AWS作了不少的工做,把restful API包裝成java、python、php、ruby等sdk,到這裏已經能夠經過編程的方式控制基礎設施了,可是爲了更加易用,AWS提供了各種的service來做爲自動化框架,如基於Chef的opsworks,快速部署的Elasticbeanstalk,將基礎設施代碼化的cloudformation等。
經過這一層的搭建,用戶只須要在配置文件或模板或腳本里指定資源,就能夠完成部署和控制,由於Framework具有執行和驗證的邏輯。python
這是使用python sdk (名字叫boto)啓用二次
啓用EC2的代碼
邏輯和行文須要本身控制,已經很好用了,好比你要啓用20臺,每臺的參數可能會有不一樣,就能夠經過寫python腳本的方式,快速搭建,可是行文是本身控制的。git
這是一個cloudformation模板,裏面也是啓用一個instance,可是,這裏面只有資源描述,具體的操做邏輯是cloudformation這個服務來進行的。
經過框架服務,在自動化的基礎上,能夠進一步實現標準化。web
這個圖是AWS的DevOps服務在開發運維整個生命週期的支持狀況。
三個黃色的框,分別是CodeCommit、CodePipeline和CodeDeploy。
CodeCommit是一個託管的Git倉庫,用於託管代碼,好處是AWS託管服務,高可用,徹底支持git。
CodePipeline是一個集成編譯和測試的工做流服務,能夠聯合源代碼倉庫、編譯服務器(如genkins)、部署服務(如codedeploy)工做,將部署流程可視化,並能管理複雜的條件分支。
CodeDeploy是一個代碼部署服務,經過在EC2虛擬機上部署Agent,能夠實現分批和滾動部署,並能夠經過配置文件實現部署先後的檢測和驗證腳本執行。
以上三個工具均可以和第三方工具集成,在部署(deploy)、平臺構建(Provision)和監控(Monitor)方面,AWS服務不少。
Cloudformation實際上是經過json描述的模板來實現基礎架構的搭建,你能夠把cloudformation模板也存入Git倉庫,每一次基礎設施修改都是經過修改cloudformation模板,而後應用來改動(cloudformation能夠本身判斷差異和資源依賴,實現最小化變動範圍)。而後再存入git的時候,在註釋中寫明更改起因。cloudformation能夠作到基礎架構代碼化,很是重要。
監控方面,Cloudwatch能夠監控AWS各種服務的數據,好比EC2的CPU、網絡、存儲IO,ELB的鏈接數、排隊數、溢出數,數據庫服務的IO、延遲等等。
AWS Opswork和ElasticBeanstalk都是完整覆蓋三個階段的服務,不一樣之處是,Opswork偏運維,控制粒度細,基於Chef來實現平臺和應用部署,基於AWS API來實現底層搭建。
熟悉Chef的同窗會很容易喜歡上Opsworks。
ElasticBeanstalk更加適合研發背景多一些,或者不喜歡作不少運維工做的同窗,ElasticBeanstalk能夠自動化搭建底層基礎設施和平臺環境(如tomcat、python、ruby等),同時,ElasticBeanstalk的命令行能夠和git 命令協同工做,git commit以後,一條eb deploy命令能夠完成部署。可是ElasticBeanstalk的平臺環境版本不能夠隨意修改,對底層資源的修改也須要修改經過elasticbeanstalk來做。
ECS全程EC2 Container Services,是AWS的docker 集羣管理服務,這裏就不詳細展開了。
值得一提的時,ElasticBeanstalk和ECS也能夠聯動,若是ElasticBeanstalk提供的環境不能知足要求,你能夠把你的自定義環境打包到docker Image,ElasticBeanstalk支持docker部署。
03/獵豹DevOps案例分享
最後,分享一下獵豹DevOps的一些狀況。
各項服務的頻繁開啓與維護: 自動化運維開發
代碼快速迭代: 基於ansible的發佈配置管理
各業務成本控制: 基於tags的成本覈算
服務性能監控: zabbix監控
上面四項是獵豹移動在海外運維中遇到的問題的解決辦法。
獵豹移動增加很是迅猛,如今使用了幾乎全部的AWS商用Region以服務全球用戶。docker
這是內部運維平臺的架構圖,基於Boto(aws api的python sdk)來構建,獵豹本身開發了一個資源申請流程系統,內部用戶能夠在網頁上申請資源,後臺經過boto來控制aws資源
此外,更復雜的一些運維和部署,經過ansible來作。
對於初創公司,能夠經過sdk控制,也能夠經過aws命令行來實現自動化。Ansible也是一個很是不錯的工具,不須要agent,支持aws api.數據庫
這是ansible快速部署ebs存儲卷的一個例子。
總結下要點:
首先,DevOps是個方式,要創建正確的文化,開發與運維互相協做,運維技能須要從單點系統擴展到架構設計和腳本自動化。
第二,選用正確的平臺和工具,諸如SDK、運維框架等平臺和工具,儘可能選用已有和比較成熟的,而後直接使用或進行二次開發。但即便二次開發,也是結合業務流,而不是從新作已有平臺的事情。
第三,完整考慮各個環境,包括開發、編譯、測試、集成、部署、平臺構建、監控等,從軟件設計之初就考慮到最終的基礎架構支持和優化部署,經過微服務演化加速繼承和部署,DevOps在其中相當重要。
第四,從哪裏上手?第一步,AWS命令行和SDK(好比基於python的boto或boto3);第二步,使用AWS基礎設施服務,如cloudformation;第三步,結合使用場景使用高級服務,如ElasticBeanstak、Opsworks等提升運維規範和敏捷度,CodeCommit、CodePipeline、CodeDeploy優化CI/CD流程。
04/Q&A
Q1:在 DevOps 環節中是否須要專門的安全人員?如何解決安全問題?
安全是貫徹始終的,在初創公司,最好是你們造成安全意識,使用工具、平臺和服務,也都積極瞭解安全方面的功能和保障。在AWS上作DevOps,要留意數據存儲和傳輸時候加密,數據的訪問權限設置,部署避免使用靜態祕鑰綁定等等。
Q2:Devops只適用於敏捷開發團隊,仍是也使用其它開發週期?
若是不作敏捷開發,那麼DevOps更多的是自動化部署、下降人爲錯誤、提升運維標準化方面。好比,雖然研發依然是瀑布式開發,可是運維Team內部能夠作自動化,基礎架構代碼化,可是有業務驅動的話,動力通常更強,對不對。
Q3:國內團隊如何選擇選擇雲廠商?
AWS的API和SDK是最全面的,在一個比較全面的平臺上能夠專一本身的平臺構建。首先,AWS的基礎服務功能很全面,好比VPC,如今尚未看到一個級別的;第二,AWS的PaaS服務能夠簡化運維,如數據分析類(EMR、Redshift、Kinesis)、數據庫類(RDS、DynamoDB);第三,在同一平臺上向先驅學習,好比Netflix、SuperCell、小米、獵豹、MobiVista、Camera360等等。
你們Google一下Netflix的OSS,有不少開源的好工具,便於你們在AWS上自動化運維、作大數據分析、提升架構可靠性。
Q4:如何利用 Docker 實現 DevOps 自動化、作好應用持續集成、持續交付有什麼好的案例。
Docker革命性地改變了開發和部署,改變了持續集成和交付的流程,研發和運維之間的交付從代碼編程了DockerImage(或者Code+DockerFile),運維只須要關注底層資源自動化。可是,DockerImage封裝的平臺環境要有內部的標準,雖然隔離後能夠多環境,但多環境仍是要有標準,方便管理。
另外,底層平臺的自動化依然須要編程或腳原本實現自動化提供,這點沒有變。
如今業界有一個誤區,就是把Docker的集裝箱特性和高動態特性沒有分場景去談,若是是你本身用,更可能是關注Docker的集裝箱特性,若是你是用Docker作一個PaaS,那才須要關注和實如今集羣裏提供高動態。
*此分享由亞馬遜的代聞在極牛線上技術分享羣裏所分享
【下期重磅預告】
下週三(9.20)咱們邀請了騰訊雲的三位技術大牛共同進行線上分享!
<講師羣>
張浩-騰訊雲產品經理
閆二輝-騰訊雲資深存儲架構師
周維躍-騰訊雲資深研發工程師
<主題>
騰訊雲分佈式高可靠消息隊列CMQ架構最佳實踐
有意加入的技術朋友,請在極牛公衆號(ji-niu)裏回覆「技術分享」。編程