編輯推薦
深度解析互聯網時代開發運維模式DevOps。每一個想學習DevOps理論與實踐的人都應該研讀的*一本書。工業界和學術界的一次思想碰撞——實用具體和嚴謹全麵的有機融閤。
李兵劉超王青汪浩洪緋王潤郭峰徐峰郭蕾吳超英瀋海峰黃麗果祝立明聯名推薦。
內容簡介
本書由南京大學軟件學院三位資深教師聯閤行業一綫專傢編寫而成,係統全麵地介紹DevOps——這一互聯網時代新型軟件開發模式的原理、方法和實踐。內容詳實、結構清晰、錶述淺顯易懂,非常適閤在校學生學習使用,也可以作為産業界DevOps初學者學習參考。
全書第一部分首先從時代背景齣發,介紹DevOps模式的淵源;結閤雲時代運維的特徵,進一步闡明DevOps模式是適應當前軟件係統開發、部署和維護的必然選擇。第二部分介紹瞭主流軟件開發方法及其流程;作為DevOps的基礎理論,精益生産和看闆方法是這部分的重點。第三部分則重點闡述瞭DevOps模式下的典型實踐,例如:微服務架構、持續集成、持續交付(部署)、虛擬化、Docker容器、自動化等。
作者簡介
榮國平,南京大學軟件學院教師,長期從事軟件過程改進相關的工作。從2006年開始,多次赴美參加SEI的相關培訓,並在當年成為國內唯*的SEI授權PSP培訓師和TSP團隊教練。在JSS、軟件學報等期刊以及包括ICSE、ESEM、ICSSP、EASE、CSEE&T;、APSEC等在內的一流國際會議上發錶論文40餘篇。DevOps中國技術社區發起人之一。
張賀,南京大學軟件工程教授、博士生導師,入選登峰人纔計劃(A-層次),澳大利亞聯邦科學院(CSIRO)主任科學傢。在歐洲和澳洲從事軟件工程研究與實踐十餘年,2013年起就職於南京大學。長期從事軟件過程、軟件體係結構、服務計算、經驗軟件工程領域的科研和實踐。負責主持愛爾蘭(歐盟)、澳大利亞、中國等多個國傢*科研基金項目。著有英文專著兩部,並在國際重要軟件工程學術期刊和會議上發錶論文百餘篇,其中10篇會議長文獲*佳論文奬。
邵棟,南京大學軟件學院副教授,嵌入式技術係主任,軟件學院院長助理。主要從事軟件工程教學研究工作,研究方嚮為軟件過程、高科技市場理論、敏捷軟件開發、軟件工程教育等。2005、2009、2014年三次獲得教育部頒發的“國傢*教學成果奬二等奬”,是國傢*教學團隊“軟件工程主乾課程教學團隊”骨乾成員,編寫教材一部,擔任國傢精品課程“計算與軟件工程”主講教師,兩次獲得“南京大學我*喜愛的老師”稱號。
精彩書評
本書是目前國內(也可能是國際範圍內)第*本DevOps的係統性教材,作者以雲計算、微服務等新興領域為研究載體,聚焦其中的前言問題與關鍵技術,結閤DevOps的應用開發案例與工具集,深入淺齣、娓娓道來,是一本不可多得的軟件工程教材。
——李兵,武漢大學國際軟件學院副院長
本書全麵地介紹瞭DevOps的由來和發展,遵循的基本原則,相關的理論基礎,推薦的有效方法和實踐,以及支持平颱和工具,為在校學生和企業開發與運維相關人員提供瞭一本內容豐富、易讀易懂的教材。
——劉超,北京航空航天大學軟件工程研究所所長
本書梳理瞭DevOps的發展曆史和基本概念,並給齣瞭一些技術和實踐的方法,為初學者提供瞭很好的指導!
——王青教授,中國科學院軟件研究所
本書從理論、技術、工具、方法及實踐等多個角度對DevOps進行瞭全麵詮釋,在內容上引入瞭多個組織采用Devops的成功案例,凝結瞭作者和眾多行業專傢多年的實踐積纍與思想結晶。
——汪浩,中金雲金融(北京)大數據科技股份有限公司研發總監
本書深入淺齣地剖析瞭DevOps模式如何具體應用到産品研發中,當我們麵對日益復雜的業務場景和技術發展時,能提供更為高效的方法和策略提升綜閤競爭力。
——洪緋,阿裏巴巴土豆視頻産品研發副總裁
本書全麵且深入淺齣地介紹、闡述並探討瞭DevOps本身及其運用的重要維度和方麵,特彆就DevOps的初學者學習理論基礎而言大有裨益。
——王潤,普華永道閤夥人
本書詳細闡述瞭DevOps背後的軟件交付理論體係,並結閤當下熱門的微服務架構設計和容器技術,帶領讀者領略瞭前沿的交付設計和實踐探索。
——郭峰,DaoCloud聯閤創始人兼首席技術官
本書為大傢清晰講述瞭DevOps理念發展的曆程,以及DevOps和敏捷、精益之間的聯係,以實踐項目的方式將軟件架構、研發模式和研發工具結閤起來,是一部非常值得大傢去深入學習、探討的DevOps教程。
——徐峰,華為軟件開發雲CTO
InfoQ在很早之前就嚮社區普及推廣DevOps相關的實踐,我們堅信DevOps將會對軟件開發産生深遠影響。本書是國內為數不多的係統講解DevOps技術的書籍,推薦閱讀。
——郭蕾,InfoQ總編輯
目錄
贊譽
序
前言
第1章 DevOps概述 …… 1
1.1 互聯網時代的轉型挑戰 …… 1
1.2 獨角獸公司 …… 4
1.2.1 Netflix公司 …… 4
1.2.2 Instagram …… 8
1.2.3 成功秘訣 …… 9
1.3 什麼是DevOps …… 10
1.3.1 發展淵源 …… 10
1.3.2 價值觀 …… 12
1.3.3 原則 …… 13
1.3.4 方法 …… 15
1.3.5 實踐 …… 16
1.3.6 工具 …… 16
1.4 DevOps應用與研究現狀 …… 17
1.4.1 微服務 …… 17
1.4.2 持續集成和持續交付 …… 19
1.4.3 工具研究和開發 …… 21
本章小結 …… 23
思考題 …… 23
參考文獻 …… 23
第2章 雲時代的運維 …… 26
2.1 雲計算概述 …… 26
2.1.1 IaaS …… 26
2.1.2 PaaS …… 28
2.1.3 SaaS …… 29
2.1.4 XaaS …… 30
2.2 IT服務標準介紹 …… 30
2.2.1 CMMI-SVC …… 30
2.2.2 ITIL …… 33
2.2.3 ISO20000 …… 33
2.2.4 ITSS …… 36
2.3 什麼是運維 …… 39
2.3.1 運維的價值 …… 39
2.3.2 運維的技術與技能 …… 40
2.3.3 傳統運維的轉型之路 …… 40
本章小結 …… 41
思考題 …… 41
參考文獻 …… 42
第3章 軟件架構演進 …… 44
3.1 軟件架構概述 …… 44
3.1.1 什麼是軟件架構 …… 44
3.1.2 軟件架構的目標 …… 46
3.1.3 軟件架構的不同視角 …… 46
3.2 軟件架構的演進 …… 51
3.2.1 傳統軟件架構的演進 …… 51
3.2.2 流量爆炸時代的大型互聯網軟件架構 …… 54
3.2.3 互聯網軟件架構演進實例 …… 60
本章小結 …… 66
思考題 …… 67
參考文獻 …… 67
更多閱讀 …… 67
第4章 軟件開發過程和方法 …… 68
4.1 軟件過程概述 …… 68
4.1.1 軟件開發方法發展曆史 …… 69
4.1.2 軟件過程的多維視角 …… 77
4.2 個體過程和實踐 …… 79
4.2.1 PSP過程基本原則 …… 80
4.2.2 PSP過程度量 …… 81
4.2.3 PROBE估算原理 …… 82
4.2.4 PROBE估算流程 …… 83
4.2.5 通用計劃框架 …… 85
4.2.6 PSP質量與質量策略 …… 87
4.2.7 評審與測試 …… 88
4.2.8 評審過程質量 …… 89
4.2.9 設計與質量 …… 98
4.2.10 設計過程 …… 100
4.2.11 設計的層次 …… 101
4.3 小組過程和實踐 …… 102
4.3.1 XP實踐 …… 102
4.3.2 Scrum方法 …… 105
4.3.3 TSP過程 …… 106
4.4 軟件過程改進 …… 108
4.4.1 元模型 …… 108
4.4.2 過程改進參考模型與標準 …… 112
4.5 DevOps中的開發過程和方法 …… 121
本章小結 …… 121
思考題 …… 121
參考文獻 …… 122
第5章 精益思想和看闆方法 …… 124
5.1 從精益思想說起 …… 124
5.1.1 精益起源於豐田 …… 124
5.1.2 精益實踐的傳播 …… 124
5.1.3 精益作為方法學開始超越生産製造 …… 126
5.1.4 上升至精益的價值觀 …… 126
5.2 精益的三個層麵 …… 128
5.3 精益産品開發實踐體係 …… 129
5.3.1 精益産品開發的目標 …… 129
5.3.2 精益産品開發的原則 …… 130
5.3.3 精益産品開發的運作實踐 …… 131
5.4 看闆方法的起源 …… 132
5.4.1 看闆的中文意思帶來誤解 …… 132
5.4.2 看闆是精益製造係統的核心工具 …… 133
5.4.3 看闆形成拉式生産方式 …… 135
5.5 什麼是産品開發中的看闆方法 …… 136
5.5.1 産品開發中的看闆方法的誕生 …… 136
5.5.2 看闆方法的第一組實踐—建立看闆係統的3個實踐 …… 136
5.5.3 看闆方法的第二組實踐—運作看闆係統的2個實踐 …… 140
本章小結 …… 142
思考題 …… 142
參考文獻 …… 143
第6章 微服務軟件架構 …… 144
6.1 軟件架構的發展 …… 144
6.1.1 單體架構 …… 144
6.1.2 分層架構 …… 144
6.1.3 SOA架構 …… 146
6.1.4 分布式架構 …… 148
6.2 現代應用的12範式 …… 150
6.3 什麼是微服務架構 …… 150
6.4 微服務架構的特徵 …… 151
6.4.1 通過服務組件化 …… 152
6.4.2 圍繞業務能力組織 …… 152
6.4.3 是産品不是項目 …… 153
6.4.4 智能端點和啞管道 …… 153
6.4.5 去中心化治理 …… 154
6.4.6 去中心化數據管理 …… 154
6.4.7 基礎設施自動化 …… 155
6.4.8 為失效設計 …… 155
6.4.9 進化式設計 …… 155
6.5 微服務核心模式 …… 156
6.5.1 服務注冊與發現 …… 156
6.5.2 配置中心 …… 157
6.5.3 API網關 …… 157
6.5.4 熔斷器 …… 158
6.5.5 分布式追蹤 …… 160
本章小結 …… 161
思考題 …… 162
參考文獻 …… 162
第7章 容器技術基礎 …… 163
7.1 內核基礎 …… 163
7.1.1 Linux namespace …… 164
7.1.2 Linux CGroup …… 168
7.2 Docker架構概覽 …… 169
7.2.1 Client …… 170
7.2.2 Docker Daemon …… 171
7.2.3 Docker Registry …… 172
7.2.4 Graph …… 173
7.2.5 Driver …… 173
7.2.6 libcontainer …… 173
7.3 鏡像管理 …… 174
7.3.1 什麼是Docker鏡像 …… 174
7.3.2 Dockerfile、Docker鏡像和Docker容器的關係 …… 174
7.3.3 Dockerfile …… 176
7.4 Docker網絡管理 …… 178
7.4.1 Docker網絡模式 …… 178
7.4.2 libnetwork和Docker網絡 …… 179
7.4.3 Docker的內置Overlay網絡 …… 180
7.5 Docker存儲 …… 181
7.5.1 Docker存儲驅動 …… 181
7.5.2 Docker驅動比較 …… 182
7.6 Docker編排 …… 183
7.6.1 Docker Swarm …… 183
7.6.2 Kubernetes …… 185
本章小結 …… 186
思考題 …… 186
參考文獻 …… 187
第8章 基於容器技術的DevOps實踐 …… 188
8.1 概述 …… 188
8.2 代碼管理 …… 188
8.2.1 Git介紹 …… 190
8.2.2 Git工作流程 …… 191
8.3 持續交付流水綫 …… 194
8.3.1 預備步驟 …… 194
8.3.2 實現持續交付流水綫 …… 199
8.3.3 持續交付最佳實踐 …… 201
8.3.4 檢查列錶 …… 204
8.4 持續集成工具 …… 205
8.4.1 傳統的CI工具 …… 205
8.4.2 雲計算環境中的CI工具 …… 206
8.4.3 用於移動應用的CI工具 …… 206
8.4.4 使用Docker的CI工具 …… 207
8.5 Java應用持續交付實踐舉例 …… 207
8.5.1 持續集成 …… 207
8.5.2 持續部署 …… 209
8.5.3 版本管理 …… 211
本章小結 …… 212
思考題 …… 212
參考文獻 …… 212
第9章 DevOps工具集 …… 214
9.1 概述 …… 214
9.2 協同開發工具 …… 215
9.2.1 JIRA …… 215
9.2.2 Kanboard …… 216
9.2.3 Rally …… 218
9.3 持續集成工具 …… 219
9.3.1 Jenkins …… 219
9.3.2 Bamboo …… 220
9.3.3 Travis CI …… 220
9.4 版本管理工具 …… 221
9.4.1 Git …… 221
9.4.2 GitHub …… 223
9.4.3 GitLab …… 223
9.4.4 Subversion …… 223
9.4.5 Mercurial …… 223
9.5 編譯工具 …… 224
9.5.1 Ant …… 224
9.5.2 Maven …… 225
9.5.3 Gradle …… 226
9.5.4 MSBuild …… 226
9.6 配置管理工具 …… 227
9.6.1 Chef …… 227
9.6.2 Puppet …… 228
9.6.3 Ansible …… 228
9.7 測試工具 …… 228
9.7.1 JUnit …… 228
9.7.2 Selenium …… 229
9.7.3 Cucumber …… 229
9.7.4 FitNesse …… 230
9.8 監控工具 …… 231
9.8.1 Nagios …… 231
9.8.2 Zabbix …… 231
9.9 工具網址 …… 232
前言/序言
近年來DevOps開發模式對軟件産業産生瞭深遠影響,相當多的軟件企業開始采用這種新的模式。來自權威機構的預測報告甚至認為,未來全球排名前2000的軟件企業中,超過80%都將轉嚮DevOps模式。事實上,DevOps發展速度之快和影響範圍之廣都大大超齣瞭人們的預期。
DevOps之所以會産生如此巨大的影響,我們認為這不是偶然的。這種方法本身具有的特性非常適閤在需求很難確定、快速響應變更、快速提供價值和高可靠性要求這樣的所謂互聯網時代軟件環境中得到應用。由此,作為軟件工程教育者,我們不得不思考DevOps給現代軟件工程教育所帶來的影響。一方麵,我們的教育本身就需要教會學生把經過實踐檢驗的優秀管理方法和適用的具體開發技術相結閤,應用過程化思想和係統化的方法去開發和維護各類軟件係統。從這個意義上說,DevOps是滿足上述目標的極好載體。因此,忽視DevOps,不僅僅會錯過一個實現軟件工程教育目的的好機會,更為糟糕的是,可能會由此擴大學校教育和業界實際實踐之間的差距。另一方麵,將DevOps引入大學課堂,也麵臨著諸多挑戰。首要的就是目前尚缺一本專門以DevOps為主題,全麵係統地涵蓋DevOps各個方麵的教材。有鑒於此,我們編著瞭這樣一本教材,試圖彌補這一缺憾。
考慮到本書主要麵嚮DevOps的初學者,因此,在內容的選擇和組織上,我們並沒有一味羅列DevOps的流行詞匯和工具,而是盡可能把DevOps方法背後的理論基礎解釋清楚。對於具有典型DevOps特徵的軟件工程技術和實踐,例如微服務架構演進、精益管理、容器技術等,我們則不吝筆墨地大篇幅介紹。由此,我們試圖傳遞齣一個概念,即DevOps作為一種方法學,不能簡單等同於某類實踐或者工具,而是涵蓋管理的基礎理論、技術以及工具的有機整體。綜閤起來,本書具有如下特點:
全麵係統地覆蓋DevOps的各個方麵,便於讀者以此書作為DevOps的基礎(盡管內容並不基礎!)入門書籍。
保持客觀、中立和審慎的態度。盡管我們推崇DevOps,但絕不盲從。在材料的組織和內容錶述方麵,我們以解決實際問題為導嚮來介紹DevOps。同時,我們也清晰錶達觀點—DevOps並不抗拒其他方法學。
部分知識點和相應的案例直接來源於一綫業界專傢的工作經曆,可以增強讀者的代入感,同時,也有助於讀者更好地理解DevOps。
本書具體分工如下:第1章由王天青、邵棟、張賀以及任群閤作編寫;第2章由騰靈靈和宋駿閤作編寫;第3章由蔣孟傑編寫;第4章由榮國平編寫;第5章由何勉編寫;第6~8章由王天青編寫;第9章由吳昊編寫。此外,榮國平、張賀和邵棟對全書進行統稿和潤色。由於時間倉促,再加上編者的水平所限,書中難免有錯誤與不妥之處,懇請讀者指正和賜教。
榮國平
2017年7月於南大北園
DevOps:原理、方法與實踐 下載 mobi epub pdf txt 電子書