1 DevOps簡(jiǎn)介

軟件交付周期(SDLC,Software Development Life Cycle)越來(lái)越短,應(yīng)用程序規(guī)模越來(lái)越大咪鲜,DevOps致力于支持軟件的持續(xù)構(gòu)建和交付

SDLC已發(fā)展為通過(guò)若干流程飞几、工具、方法以實(shí)現(xiàn)快速交付

軟件交付的挑戰(zhàn)

瀑布模型和實(shí)物交付

串行由上而下刽脖,一般不返回上階段,交付周期一般較長(zhǎng),如軟盤\CD-ROM

敏捷模型和電子交付

增量借嗽、迭代、敏捷模型转培,可多次交付(更利于更新和打補(bǔ)抖竦肌),如exe程序

基礎(chǔ)設(shè)施(如服務(wù)器和網(wǎng)絡(luò))是靜態(tài)的浸须,需事先設(shè)置好惨寿,一般SDLA不涉及影響基礎(chǔ)設(shè)施

云端的軟件交付

軟件程序從二進(jìn)制變?yōu)樵诰€服務(wù)

虛擬化技術(shù)和軟件定義網(wǎng)絡(luò)(SDN)使服務(wù)器更動(dòng)態(tài)化

如Amazon Web Service(AWS)、Google Cloud Platform(GCP)這種云服務(wù)删窒,可輕松創(chuàng)建和管理動(dòng)態(tài)基礎(chǔ)設(shè)施

基礎(chǔ)設(shè)施被納入SDLC范圍裂垦,成為重要組件之一,程序被安裝和運(yùn)行在服務(wù)器上肌索,不再是客戶的PC機(jī)上

軟件和服務(wù)交付周期縮短

持續(xù)集成

為了更高質(zhì)量的快速交付蕉拢,開(kāi)發(fā)者和QA開(kāi)始采用一些自動(dòng)化技術(shù)

CI continuous integration,CI包含一系列工具的組合诚亚,如版本控制系統(tǒng)version control systems VCS晕换、構(gòu)建服務(wù)器、自動(dòng)化測(cè)試工具

VCS幫助開(kāi)發(fā)在中心服務(wù)器上維護(hù)程序源代碼

CI幫助開(kāi)發(fā)者和QA提升代碼質(zhì)量站宗,縮短程序歸檔或模塊打包周期届巩,CI足以應(yīng)對(duì)電子交付

持續(xù)交付

CI加上自動(dòng)化部署是服務(wù)器上應(yīng)用程序向用戶提供服務(wù)的過(guò)程

如何將軟件交付服務(wù)器?如何關(guān)閉份乒、替換恕汇、回滾已有程序腕唧?如系統(tǒng)庫(kù)也更新,如何升級(jí)瘾英?如何修改操作系統(tǒng)的用戶和組設(shè)置枣接?

基礎(chǔ)設(shè)施包含服務(wù)器和網(wǎng)絡(luò),上述取決于開(kāi)發(fā)缺谴、QA但惶、預(yù)發(fā)布、生產(chǎn)等環(huán)境湿蛔,每個(gè)環(huán)境都有不同的服務(wù)器配置和IP地址

CD continuous delivery膀曾,是CI工具、配置管理阳啥、編排工具的組合添谊,可實(shí)現(xiàn)上述問(wèn)題

配置管理

幫助配置操作系統(tǒng),包括用戶察迟、用戶組斩狱、系統(tǒng)庫(kù),可管理多臺(tái)服務(wù)器扎瓶,以便更換服務(wù)器時(shí)與所需狀態(tài)或配置保持一致所踊;支持將應(yīng)用程序部署或安裝到服務(wù)器中;配置管理支持自動(dòng)或手動(dòng)更新程序

手動(dòng)觸發(fā)執(zhí)行-藍(lán)綠部署

基礎(chǔ)設(shè)施即代碼

配置管理工具不僅支持操作系統(tǒng)或虛擬機(jī)概荷,還支持云基礎(chǔ)設(shè)施秕岛,在云端創(chuàng)建并配置網(wǎng)絡(luò)、存儲(chǔ)和虛擬機(jī)误证,通過(guò)配置文件自動(dòng)化設(shè)置云基礎(chǔ)設(shè)施

配置管理比標(biāo)準(zhǔn)操作過(guò)程SOP有優(yōu)勢(shì)瓣蛀,復(fù)制環(huán)境也容易

編排

也是配置管理工具的一種,在配置和分配云資源時(shí)雷厂,更智能和動(dòng)態(tài)

編排工具可管理多個(gè)服務(wù)器和網(wǎng)絡(luò)資源惋增,當(dāng)管理員要增加應(yīng)用程序?qū)嵗龝r(shí),編排工具可確定可用服務(wù)器改鲫,自動(dòng)部署和配置應(yīng)用程序和網(wǎng)絡(luò)

編排工具超出SDLC范圍诈皿,但在擴(kuò)展應(yīng)用程序和重構(gòu)基礎(chǔ)設(shè)施資源時(shí)有助于持續(xù)交付

微服務(wù)趨勢(shì)

模塊化編程

每個(gè)模塊獨(dú)立且可重用,可由不同開(kāi)發(fā)團(tuán)隊(duì)維護(hù)

當(dāng)實(shí)現(xiàn)應(yīng)用程序時(shí)像棘,應(yīng)用程序只需初始化稽亏,并使用這些模塊來(lái)構(gòu)建更大的應(yīng)用程序

模塊化編程可提高軟件開(kāi)發(fā)速度,減少重復(fù)造輪子

包管理

Java或輕量級(jí)編程語(yǔ)言都有自己的模塊或包管理工具

java-Maven缕题、python-pip截歉、ruby-rubyGems、JavaScript-npm

包管理工具允許將模塊或軟件包注冊(cè)到集中式或私有存儲(chǔ)庫(kù)烟零,并下載必要的軟件包

MVC設(shè)計(jì)模型

不斷添加新功能和邏輯時(shí)瘪松,應(yīng)用程序需要更多的模塊咸作、包、框架組合宵睦,尤其是服務(wù)器端應(yīng)用程序

常需要連接數(shù)據(jù)庫(kù)如RDBMS记罚、身份驗(yàn)證服務(wù)器如LDAP,通過(guò)具有適當(dāng)?shù)脑O(shè)計(jì)的HTML將結(jié)果返回用戶

因此需要軟件設(shè)計(jì)模型壳嚎,以便應(yīng)用程序中使用一組模塊開(kāi)發(fā)應(yīng)用程序

MVC模型視圖和控制器桐智,一種流行的程序設(shè)計(jì)模型,定義了三個(gè)層次:

視圖層:負(fù)責(zé)用戶界面UI烟馅、輸入輸出I/O

模型層:負(fù)責(zé)數(shù)據(jù)查詢和持久化说庭,如加載和存儲(chǔ)數(shù)據(jù)到數(shù)據(jù)庫(kù)

控制層:負(fù)責(zé)視圖和模型之間的業(yè)務(wù)邏輯

簡(jiǎn)化MVC的框架:Struts、SpringMVC郑趁、Ruby on Rails刊驴、Django

單體架構(gòu)應(yīng)用程序

MVC定義了每層的邊界,但源代碼model穿撮、表示代碼view、業(yè)務(wù)邏輯controller都存在統(tǒng)一VCS存儲(chǔ)庫(kù)中痪欲,雖然應(yīng)用程序體積變大悦穿,會(huì)變得更慢,被稱為單體架構(gòu)monolithic业踢,包括構(gòu)建巨型exe\war程序的代碼

當(dāng)添加或修改其中一個(gè)模塊時(shí)栗柒,會(huì)影響很多代碼,導(dǎo)致沒(méi)人愿意維護(hù)這些代碼

遠(yuǎn)程過(guò)程調(diào)用

Sun RPC remote procedure call 遠(yuǎn)程過(guò)程調(diào)用知举,允許遠(yuǎn)程使用模塊瞬沦,有利于將應(yīng)用程序劃分為多個(gè)進(jìn)程(程序)單個(gè)程序可以有單獨(dú)的源代碼存儲(chǔ)庫(kù)

如RPC實(shí)現(xiàn)的NFS network file system網(wǎng)絡(luò)文件系統(tǒng),NFS客戶端和服務(wù)器之間的CPU和操作系統(tǒng)版本是互相獨(dú)立的

如RPC風(fēng)格的編程語(yǔ)言雇锡,unix逛钻、c語(yǔ)言有rpcgen工具生成樁代碼負(fù)責(zé)網(wǎng)絡(luò)通信、Java有類似RMI remote method invocationRMI編譯器生成連接遠(yuǎn)程java進(jìn)程的樁代碼锰提,以調(diào)用方法并獲得結(jié)果曙痘、Object C有分布式對(duì)象,.Net有遠(yuǎn)程處理功能

遠(yuǎn)程過(guò)程調(diào)用立肘,用于客戶端\服務(wù)器模型結(jié)構(gòu)边坤,不是分布式架構(gòu),出于安全角度谅年,不建議在公共網(wǎng)絡(luò)上使用

SOAP(HTTP/SSL)作為數(shù)據(jù)傳輸?shù)腤eb服務(wù)茧痒,使用XML作為數(shù)據(jù)表示和服務(wù)定義Web服務(wù)描述語(yǔ)言(Web Services Description Language,WSDL),然后使用通過(guò)描述、發(fā)現(xiàn)和集成(Universal Description融蹂、Discovery旺订、Integration弄企,UDDI)作為服務(wù)注冊(cè)來(lái)查找Web服務(wù)應(yīng)用程序

RESTfull

HTTP/SSL作為RPC傳輸,并簡(jiǎn)化為RESTfull設(shè)計(jì)

使用HTTP和SSL/TLS作為傳輸標(biāo)準(zhǔn)

使用HTTP方法進(jìn)行創(chuàng)建耸峭、加載桩蓉、上傳、刪除(create劳闹、load院究、upload、delete本涕,CLUD)业汰,如get、post菩颖、put样漆、delete

使用URI作為資源標(biāo)識(shí)符

使用JSON作為標(biāo)準(zhǔn)數(shù)據(jù)表示

RESTfull基于HTTP支持任何編程語(yǔ)言

如有多個(gè)RESTfull程序,需要考慮在VCS上管理多個(gè)源代碼及如何部署多個(gè)RESTfull服務(wù)器晦闰,CICD幫助構(gòu)建和部署更多RESTfull服務(wù)應(yīng)用程序

微服務(wù)

微服務(wù)設(shè)計(jì)關(guān)注

無(wú)狀態(tài)放祟,不將用戶會(huì)話存儲(chǔ)到系統(tǒng),有助于擴(kuò)展

無(wú)共享數(shù)據(jù)存儲(chǔ)呻右,有自己的數(shù)據(jù)存儲(chǔ)如數(shù)據(jù)庫(kù)跪妥,有助于封裝后端數(shù)據(jù)庫(kù),代碼重構(gòu)声滥,單個(gè)微服務(wù)中更新數(shù)據(jù)庫(kù)模式

版本控制和兼容性眉撵,經(jīng)常更改和更新API,應(yīng)定義版本落塑,具有向后兼容性纽疟,有助于與其他微服務(wù)和應(yīng)用程序解耦

集成CICD:采用CICD流程來(lái)消除管理工作

構(gòu)建微服務(wù)應(yīng)用程序框架

Spring Boot、Flask

單體架構(gòu)應(yīng)用程序設(shè)計(jì)和微服務(wù)設(shè)計(jì)

微服務(wù)也包括接口層憾赁、業(yè)務(wù)邏輯層污朽、數(shù)據(jù)存儲(chǔ),但應(yīng)用程序(服務(wù))由多個(gè)微服務(wù)構(gòu)建龙考,不同應(yīng)用程序可在下面共享相同的微服務(wù)膘壶,開(kāi)發(fā)者可以添加或修改現(xiàn)有的微服務(wù)

CICI有助于開(kāi)發(fā)和部署多個(gè)微服務(wù),但資源和復(fù)雜性(如虛擬機(jī)洲愤、操作系統(tǒng)颓芭、庫(kù)、磁盤卷柬赐、網(wǎng)絡(luò))在數(shù)量上無(wú)法與單體架構(gòu)應(yīng)用程序進(jìn)行比較亡问,在工具和角色可以支持云上大型自動(dòng)化環(huán)境

自動(dòng)化工具

自動(dòng)化實(shí)現(xiàn)快速軟件交付,解決管理許多微服務(wù)的復(fù)雜性

自動(dòng)化工具不是普通的IT\基礎(chǔ)設(shè)施應(yīng)用程序,如Active Directory州藕、Bind(DNS)束世、Sendmail(MTA),為了實(shí)現(xiàn)自動(dòng)化床玻,工程師應(yīng)具備編碼技能尤其是腳本語(yǔ)言毁涉,及基礎(chǔ)結(jié)構(gòu)運(yùn)維技能,如虛擬化锈死、網(wǎng)絡(luò)贫堰、存儲(chǔ)

DevOps是開(kāi)發(fā)和運(yùn)維的結(jié)合,可實(shí)現(xiàn)自動(dòng)化流程待牵,如持續(xù)集成其屏、基礎(chǔ)設(shè)施即代碼和持續(xù)交付

持續(xù)集成工具

Git VCS工具,使用git進(jìn)行check in\out代碼缨该,托管git服務(wù)如Github偎行、Bitbucket,創(chuàng)建保存Git存儲(chǔ)庫(kù)贰拿,并與其他用戶協(xié)作

構(gòu)建服務(wù)器蛤袒,如jekins、Teamcity

托管服務(wù)膨更,軟件即服務(wù)Software as a service妙真,SasS,如Codeship询一、Travis CI

持續(xù)交付工具

配置管理工具:Puppet隐孽、Chef癌椿、Ansible

托管Chef平臺(tái):AWS Ops Works

AWS CloudFormation有助于實(shí)現(xiàn)基礎(chǔ)設(shè)施即代碼健蕊,支持AWS操作的自動(dòng)化

創(chuàng)建VPC

在VPC上創(chuàng)建子網(wǎng)

在VPC上創(chuàng)建Internet網(wǎng)關(guān)

創(chuàng)建路由表以將子網(wǎng)關(guān)聯(lián)到Internet網(wǎng)關(guān)

創(chuàng)建安全組

創(chuàng)建云主機(jī)實(shí)例

將安全組關(guān)聯(lián)到云主機(jī)實(shí)例

AWS CodeDeploy聚焦軟件部署,允許用戶自定義

監(jiān)控和日志工具

Amazon CloudWatch是AWS內(nèi)置監(jiān)控工具

ELK是流行堆棧組合踢俄,是Elasticsearch缩功、Logstash、Kibana的組合

Logstash有助于采集日志并轉(zhuǎn)為JSON格式都办,發(fā)送到ES嫡锌,ES是一個(gè)分布式JSON數(shù)據(jù)庫(kù),Kibana可以可視化存在ES上的數(shù)據(jù)

Grafana 也是一個(gè)流行的可視化工具琳钉,與時(shí)間序列數(shù)據(jù)庫(kù)連接势木,如Graphite、InfluxDB歌懒,時(shí)間序列數(shù)據(jù)庫(kù)用于存儲(chǔ)扁平的啦桌、非規(guī)范化的數(shù)字型數(shù)據(jù),如CPU使用率和網(wǎng)絡(luò)流量,時(shí)間序列數(shù)據(jù)庫(kù)有內(nèi)置優(yōu)化甫男,可節(jié)省數(shù)據(jù)空間且改,更快的查詢歷史數(shù)據(jù),大多數(shù)DevOps監(jiān)控功能根據(jù)后端都適用時(shí)間序列數(shù)據(jù)庫(kù)

溝通工具

如使用多個(gè)DevOps工具板驳,需切換訪問(wèn)不同控制臺(tái)以檢查CICD流水線是否正常工作又跛,

如需考慮, 將源代碼合并到GitHub、在Jenkins上觸發(fā)新構(gòu)建若治、觸發(fā)AWS CodeDeploy以部署新版吧應(yīng)用程序

通信工具慨蓝,可以幫助集成這些DevOps工具,任何人都可查看事件并評(píng)論直砂,如Slack菌仁、HipChat

公有云

云計(jì)算,可以輕松實(shí)現(xiàn)CICD和自動(dòng)化工作静暂,特別是公有云API為DevOps提供多CICD支持

Amazon Web Services济丘、Google Cloud Platform

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市洽蛀,隨后出現(xiàn)的幾起案子摹迷,更是在濱河造成了極大的恐慌,老刑警劉巖郊供,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峡碉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡驮审,警方通過(guò)查閱死者的電腦和手機(jī)鲫寄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疯淫,“玉大人地来,你說(shuō)我怎么就攤上這事∥醪簦” “怎么了未斑?”我有些...
    開(kāi)封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)币绩。 經(jīng)常有香客問(wèn)我蜡秽,道長(zhǎng),這世上最難降的妖魔是什么缆镣? 我笑而不...
    開(kāi)封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任芽突,我火速辦了婚禮,結(jié)果婚禮上董瞻,老公的妹妹穿的比我還像新娘寞蚌。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布睬澡。 她就那樣靜靜地躺著固额,像睡著了一般。 火紅的嫁衣襯著肌膚如雪煞聪。 梳的紋絲不亂的頭發(fā)上斗躏,一...
    開(kāi)封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音昔脯,去河邊找鬼啄糙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛云稚,可吹牛的內(nèi)容都是我干的隧饼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼静陈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼燕雁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鲸拥,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拐格,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后刑赶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體捏浊,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年撞叨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了金踪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牵敷,死狀恐怖胡岔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劣领,我是刑警寧澤姐军,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布铁材,位于F島的核電站尖淘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏著觉。R本人自食惡果不足惜村生,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望饼丘。 院中可真熱鬧趁桃,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蟀苛,卻和暖如春益咬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帜平。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工幽告, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裆甩。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓冗锁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親嗤栓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冻河,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容