前言
第1章 迎接云原生的浪潮1
1.1 撲面而來的云原生1
1.1.1 單體應用面臨的挑戰(zhàn)2
1.1.2 從微服務到云原生3
1.1.3 云原生應用的特性4
1.1.4 云原生計算基金會 CNCF5
1.2 云原生設計的十二原則6
1.2.1 Codebase(單一代碼)7
1.2.2 Dependencies(依賴管理)7
1.2.3 Configuration(配置)7
1.2.4 Backing services(支撐服務)7
1.2.5 Build, Release, Run(構建、發(fā)布、運行)8
1.2.6 Processes(無狀態(tài)服務進程)8
1.2.7 Port Binding(端口綁定)8
1.2.8 Concurrency(并發(fā)能力)8
1.2.9 Disposability(易回收)9
1.2.10 Dev/Prod Parity(環(huán)境對等)9
1.2.11 Logs(日志流)9
1.2.12 Admin Processes(管理進程)9
1.3 云原生四大核心要素10
1.3.1 容器化10
1.3.2 微服務技術11
1.3.3 DevOps12
1.3.4 持續(xù)交付13
1.4 使用 .NET 技術開發(fā)云原生應用的優(yōu)勢14
1.4.1 高性能15
1.4.2 跨平臺15
1.4.3 完全容器化支持15
1.4.4 開源15
1.5 小結16
第2章 配置 .NET云原生開發(fā)與運行環(huán)境17
2.1 系統(tǒng)要求17
2.2 安裝與配置Git環(huán)境18
2.2.1 安裝 Git18
2.2.2 配置Git18
2.2.3 下載eShopOnContainers源代碼20
2.3 安裝 .NET20
2.3.1 .NET 版本選擇21
2.3.2 安裝 .NET22
2.4 安裝 Visual Studio 2022 或 Visual Studio Code23
2.4.1 安裝Visual Studio 202223
2.4.2 安裝 Visual Studio Code25
2.5 安裝Docker27
2.5.1 安裝 WSL 227
2.5.2 安裝 Docker Desktop31
2.5.3 配置 Docker Desktop32
2.5.4 配置國內 Docker 環(huán)境35
2.6 啟用 Kubernetes36
2.7 小結36
第3章 云原生應用開發(fā)—電子商務應用eShopOnContainers37
3.1 云原生應用 eShopOnContainers功能概述37
3.1.1 功能需求38
3.1.2 eShopOnContainers開發(fā)架構38
3.2 運行eShopOnContainers應用40
3.2.1 了解docker-compose文件40
3.2.2 構建eShop44
3.2.3 運行eShopOnContainers 應用45
3.2.4 注意事項46
3.3 訪問eShopOnContainers應用程序47
3.3.1 訪問MVC Web應用47
3.3.2 訪問SPA Web應用48
3.3.3 訪問Android、iOS和Windows上的移動應用49
3.3.4 訪問 Swagger UI49
3.3.5 訪問日志控制臺50
3.3.6 應用程序與微服務列表53
3.4 eShopOnContainers代碼組織53
3.4.1 項目架構53
3.4.2 源代碼介紹54
3.4.3 領域驅動設計56
3.4.4 單元測試和集成測試60
3.5 小結62
第4章 實現(xiàn)云原生應用的擴展性63
4.1 容器化應用63
4.1.1 單體部署面臨的挑戰(zhàn)63
4.1.2 什么是Docker65
4.1.3 Docker常用命令68
4.1.4 開發(fā)中用到的Docker知識73
4.2 鏡像倉庫74
4.2.1 Docker Hub74
4.2.2 創(chuàng)建自定義的容器鏡像倉庫75
4.2.3 創(chuàng)建私有鏡像倉庫77
4.3 Docker定義文件Dockerfile80
4.3.1 Dockerfile 語法概要80
4.3.2 構建ASP.NET Core應用81
4.3.3 構建 ASP.NET Core Docker 應用83
4.4 擴展容器應用84
4.4.1 使用Docker compose管理云原生應用84
4.4.2 使用Kubernetes管理云原生應用86
4.4.3 使用環(huán)境變量89
4.5 容器與編排器實踐94
4.5.1 購物車服務94
4.5.2 構建 Dockerfile95
4.5.3 構建docker-compose.yaml96
4.5.4 構建Kubernetes部署文件97
4.6 小結101
第5章 實現(xiàn)云原生應用的通信102
5.1 云原生應用通信的復雜性102
5.2 服務注冊與服務發(fā)現(xiàn)103
5.2.1 微服務下的服務注冊和服務發(fā)現(xiàn)104
5.2.2 Docker Compose環(huán)境下的服務注冊與發(fā)現(xiàn)105
5.2.3 Kubernetes 環(huán)境下的服務注冊與發(fā)現(xiàn)106
5.3 前端應用的通信模式107
5.3.1 實現(xiàn)網關的選擇109
5.3.2 實時通信110
5.4 服務與服務之間的通信111
5.4.1 查詢 Query112
5.4.2 命令Command115
5.4.3 事件Event116
5.4.4 領域總線和集成總線118
5.5 新一代通信協(xié)議gRPC118
5.5.1 gRPC的優(yōu)勢118
5.5.2 gRPC核心概念119
5.5.3 在 .NET中應用gRPC119
5.5.4 gRPC的使用場景120
5.5.5 在eShopOnContainers中實現(xiàn)gRPC支持120
5.6 服務網格(Service Mesh)122
5.7 實戰(zhàn)演練:實現(xiàn) eShopOnContainers中的組件間通信123
5.7.1 實現(xiàn)基于 Envoy 的 API 網關123
5.7.2 實現(xiàn)BFF網關125
5.7.3 實現(xiàn)基于MediatR的領域總線128
5.7.4 基于RabbitMQ實現(xiàn)跨微服務的事件總線133
5.7.5 基于事件總線實現(xiàn)集成總線135
5.8 小結140
第6章 數(shù)據(jù)訪問模式141
6.1 云原生應用中的數(shù)據(jù)訪問模式141
6.1.1 微服務中對數(shù)據(jù)庫使用方式的變化142
6.1.2 跨微服務的查詢143
6.1.3 數(shù)據(jù)完整性和分布式事務145
6.1.4 大規(guī)模數(shù)據(jù)訪問147
6.2 關系型與非關系型數(shù)據(jù)庫150
6.2.1 CAP定理151
6.2.2 關系型數(shù)據(jù)庫與NoSQL數(shù)據(jù)庫152
6.2.3 NewSQL數(shù)據(jù)庫153
6.3 在云原生應用中應用緩存154
6.3.1 應用緩存的原因154
6.3.2 云原生應用的緩存架構154
6.4 實戰(zhàn)演練:實現(xiàn)eShopOnContainers中產品價格變更的最終一致性155
6.4.1 實現(xiàn)簡化事件溯源模式的集成事件日志156
6.4.2 發(fā)布基于事件日