雲原生構建:微服務、容器化與容器編排
內容描述
本書力求對構建雲原生應用做一個較為完整的梳理,
意在建立雲原生應用編程技術的知識體系和對雲原生的理解。
本書從單體應用編程基礎開始,帶領讀者一步步地完成單體應用並將單體應用改造成微服務,
然後進行容器化以及容器編排,循序漸進地構造雲原生應用。
本書著重於經驗分享和總結,同時也會有相關的概念解析以及代碼示例,
希望能夠幫助大家少走彎路,共同學習與進步。
本書主要面向有一定基礎和工作經驗的軟件工程師和架構師,
旨在通過梳理雲原生應用編程中的關鍵和實用知識點,
並伴有相應的概念解析及實踐案例,
進而更快地建立起自身對雲原生應用的理解以及感受傳統應用演變為雲原生應用的過程變化。
目錄大綱
目錄
第1章 何為雲原生,雲原生為何而生
1.1 現代軟件行業的需求
1.1.1 上線交付時間要求越來越短
1.1.2 支持的設備形式越來越多樣化
1.1.3 服務可靠性要求越來越高
1.2 軟件架構的變化
1.2.1 集中式架構
1.2.2 分佈式架構
1.2.3 雲原生架構
1.3 雲原生簡介
1.3.1 什麼是雲原生
1.3.2 什麼是雲原生應用
1.4 如何構造雲原生應用
1.4.1 雲原生應用設計理念
1.4.2 雲原生應用的12要素
1.4.3 雲原生應用的構造步驟
1.5 本章小結
第2章 從0到1——單體應用
2.1 單體應用介紹
2.1.1 單體應用:不可分割的軟件架構
2.1.2 單體應用的優缺點
2.1.3 單體應用的適用場景
2.2 單體應用實踐——微商城項目介紹與設計
2.2.1 項目背景
2.2.2 開發工具與技術棧
2.3 項目開發前——Spring Boot概念
2.3.1 Spring Boot:快速配置開發的腳手架
2.3.2 Spring Boot Starters:依賴關係描述符
2.3.3 Spring Cloud:系列框架的有序集合
2.3.4 Spring、Spring MVC、Spring Boot、Spring Cloud之間的聯繫與區別
2.3.5 Spring Initializr:項目結構創建工具
2.4 項目開發——微商城搭建實踐
2.4.1 使用Spring Initializr初始化項目
2.4.2 項目分層——持久層
2.4.3 項目分層——業務邏輯層
2.4.4 項目分層——控制層
2.4.5 添加用戶認證攔截
2.4.6 配置H2數據庫
2.4.7 使用Swagger自動生成接口文檔
2.4.8 配置log
2.4.9 啟動項目並進行接口測試
2.5 項目開發——應用構建與部署
2.5.1 打包類型選擇——jar與war
2.5.2 使用Maven構建可運行的jar包
2.5.3 使用Maven構建可外部部署的war包
2.5.4 部署jar/war包並啟動應用程序
2.6 本章小結
第3章 拆分單體應用方法及微服務設計模式
3.1 不僅僅是編碼——馓服務介紹
3.1.1 兩面性:微服務的優缺點
3.1.2 項目需要從單體應用切換成微服務嗎
3.2 單體應用拆分成微服務設計理論
3.3 微服務場景下事務控制的典型解決方案
3.3.1 二階段提交
3.3.2 三階段提交
3.3.3 服務化的二階段提交(TCC)
3.3.4 基於消息的最終一致性方案
3.3.5 如何選擇事務控制解決方案
3.4 微服務架構常見的設計模式
3.4.1 獨享數據庫
3.4.2 事件溯源
3.4.3 命令查詢職責分離
3.4.4 外部化配置
3.4.5 API網關
3.4.6 服務發現
3.4.7 斷路器
3.4.8 健康檢查
3.4.9 日誌聚合
3.4.10 日誌審計
3.4.11 分佈式追踪
3.4.12 訪問令牌
3.5 本章小結
第4章 單體應用微服務改造實踐
4.1 單體應用內分隔服務
4.1.1 創建劃分服務的包
4.1.2 查看依賴結構矩陣
4.1.3 改造服務之間的相互依賴
4.2 外部化配置
4.2.1 生成Config Server基本框架
4.2.2 配置Config Server
4.2.3 啟用Config Server
4.2.4 啟動Config Server
4.2.5 配置中心客戶端
4.3 服務註冊與發現
4.3.1 生成Eureka Server基本框架
4.3.2 配置Eureka Server
4.3.3 啟用Eureka Server
4.3.4 更新配置中心全局配置
4.3.5 啟動Eureka Server
4.4 健康檢查
4.5 熔斷
4.6 服務追踪
4.6.1 運行Zipkin Server
4.6.2 應用服務集成Zipkin
4.7 API網關
4.7.1 生成API Gateway基本框架
4.7.2 配置API網關
4.7.3 啟動API網關
4.8 日誌聚合與分析
4.8.1 分佈式搜索和分析引擎Elasticsearch
4.8.2 分析和可視化平台Kibana
4.8.3 數據收集引擎Logstash
4.8.4 應用服務集成ELK
4.9 微商城完全改造成微服務架構
4.9.1 微商城總體微服務架構圖
4.9.2 按照應用內分隔服務理論徹底將業務服務拆分
4.9.3 微商城微服務啟動實踐
4.10 本章小結
第5章 微服務進階——容器化技術
5.1 容器化技術介紹
5.1.1 容器化:應用程序級別的虛擬化
5.1.2 容器:標準化的軟件單元
5.2 開源的應用容器引擎Docker
5.2.1 運行和管理容器的核心軟件Docker Engine
5.2.2 Docker容器的特點
5.2.3 為什麼要使用Docker
5.2.4 容器與虛擬機的區別
5.3 Docker架構
5.3.1 Docker守護進程
5.3.2 Docker客戶端
5.3.3 Docker倉庫
5.3.4 Doeker對象
5.3.5 底層技術支持
5.4 Docker安裝
5.4.1 卸載舊版本
5.4.2 安裝方法的選擇
5.4.3 使用Docker倉庫進行安裝
5.4.4 運行第一個容器
5.5 鏡像和容器的基本操作
5.5.1 獲取鏡像
5.5.2 列出鏡像
5.5.3 刪除鏡像
作者介紹
鄒炎
多年從事互聯網Java開發與架構工作,擁有豐富的系統架構經驗,曾參與過多個大型分佈式網站架構設計與開發,指導操作過多個互聯網系統的微服務改造,擔任過所在企業的技術講師和校/社招面試官;對分佈式與高並發、雲原生有著較為深入的研究和理解。目前從事系統架構和企業架構設計評審工作,對安全性、高可用、高性能、雲原生系統設計與開發有著豐富的實戰經驗。
謝邵虎
曾於GE消費者金融集團(GECF)全球研發中心擔任系統架構師和TechLeader;擁有十年以上後端開發經驗,精通分佈式系統設計和開發,對分佈式系統實現及設計理念有獨到的見解,多年系統架構經驗。參與開發/架構多個大型項目,對SpringCloud、微服務、持續集成、持續交付、容器技術、大數據生態圈常用組件均有涉獵。
朱明杰
擁有豐富的Java開發經驗,一直工作在編程一線,作為開發主力參與過多個高並發、微服務架構的大型項目,現已在線上穩定運行,對微服務領域有著較為深入的理解。