微服務項目實戰派 — 從 Spring Boot 到 Spring Cloud

薑橋

買這商品的人也買了...

商品描述

隨著微服務概念的興起,如何快速實施微服務成了一個重要話題。在Java服務端領域,Spring Cloud微服務體系事實上已經成為整個Java後端架構的標配。如果你打算從事Java服務端開發,或者你所在公司正打算轉型微服務,那麽Spring Cloud是無論如何都繞不開的存在。本書以項目實戰的形式來介紹Spring Cloud微服務體系。書中所有實例都來自作者多年工作實踐,內容覆蓋構建Spring Cloud微服務所需的絕大部分內容——包括微服務工程搭建、微服務網關、熔斷限流、分佈式任務調度、自動化CI/CD構建、Kubernetes容器化部署、微服務監控系統、分佈式鏈路追蹤等。

作者簡介

姜 橋
擁有10年的互聯網系統研發、設計及架構經驗。曾任職於PP錢包、宜信、玖富等互聯網金融公司,後加入摩拜單車,主要負責摩拜支付、對賬等核心系統的設計研發工作。在摩拜任職期間,參與了摩拜單車整體軟件系統從單體架構到Spring Cloud微服務架構升級改造的全過程。
目前任職於集度汽車,工作之餘專注於微服務架構領域相關的技術研究及分享,並定期發布至微信公眾號“無敵碼農”。感興趣的朋友可以關注公眾號與作者交流。

目錄大綱

第1章  基礎——從Spring Boot單體應用到Spring Cloud微服務  1
1.1  微服務的概念  2
1.1.1  什麼是微服務  2
1.1.2  從單體應用到微服務  2
1.1.3  主流的微服務技術棧  4
1.2  Spring Boot框架基礎  5
1.2.1  Spring Boot簡介  5
1.2.2  Spring Boot的核心原理  6
1.2.3  Spring Boot的核心註解  12
1.3  開發一個Spring Boot應用  19
1.3.1  【步驟1】創建Spring Boot基礎工程  19
1.3.2  【步驟2】創建項目配置文件  22
1.3.3  【步驟3】集成MyBatis框架  22
1.3.4  【步驟4】編寫服務接口完成數據庫操作  24
1.4  Spring Cloud微服務體系  27
1.4.1  Spring Cloud簡介  27
1.4.2  Spring Boot與Spring Cloud的關係  28
1.4.3  Spring Cloud微服務的核心組件  28
1.4.4  Spring Cloud的核心註解  30
1.4.5  Spring Cloud的技術生態圈  34
1.5  本章小結  35

第2章  【實例】用戶系統——用Spring Boot開發應用,用Spring Cloud將其改為微服務架構  36
2.1  功能概述  37
2.2  系統設計  37
2.2.1  業務邏輯設計  37
2.2.2  數據庫設計  40
2.3  【步驟1】搭建Spring Boot應用的工程代碼  41
2.3.1  創建Spring Boot應用工程  41
2.3.2  創建應用的配置文件  43
2.3.3  集成數據庫訪問框架MyBatis  44
2.3.4  集成緩存數據庫Redis  47
2.4  【步驟2】用Spring Boot實現業務邏輯  49
2.4.1  定義用戶微服務服務接口層(Controller層)  49
2.4.2  開髮用戶微服務業務層(Service層)代碼  52
2.4.3  開發MyBatis持久層(Dao層)組件  55
2.5  【步驟3】將Spring Boot應用升級為Spring Cloud微服務  59
2.5.1  部署服務註冊中心Consul  59
2.5.2  對Spring Boot應用進行微服務改造  60
2.5.3  將Spring Cloud微服務注入服務註冊中心Consul  63
2.6  本章小結  65

第3章  【實例】SSO授權認證系統——用“Spring Security + Spring Cloud Gateway”構建OAuth 2.0授權認證服務  66
3.1  功能概述  67
3.2  系統設計  67
3.2.1  OAuth 2.0授權認證流程  67
3.2.2  系統結構設計  70
3.2.3  數據庫設計  71
3.3  【步驟1】構建Spring Cloud授權認證微服務  75
3.3.1  創建Spring Cloud微服務工程  75
3.3.2  將Spring Cloud微服務注入服務註冊中心Consul  77
3.3.3  集成JDBC數據源,以訪問MySQL數據庫  77
3.3.4  構建OAuth 2.0授權認證微服務  79
3.3.5  開發調用資源微服務的FeignClient代碼  88
3.3.6  開發授權認證的自定義登錄界面  93
3.4  【步驟2】構建Spring Cloud資源微服務  96
3.4.1  創建Spring Cloud微服務工程  96
3.4.2  將Spring Cloud微服務注入Consul  98
3.4.3  集成MyBatis框架,以訪問MySQL數據庫  98
3.4.4  構建OAuth 2.0資源微服務  99
3.4.5  實現“用戶受保護信息查詢”的業務邏輯  102
3.5  【步驟3】搭建基於Spring Cloud Gateway的服務網關  115
3.5.1  認識微服務網關  115
3.5.2  了解常見的服務網關組件  116
3.5.3  服務網關的具體構建  117
3.5.4  添加安全認證機制  118
3.6  【步驟4】演示OAuth 2.0授權認證流程  120
3.6.1  編寫註冊Client端系統的SQL語句  120
3.6.2  演示用戶授權認證登錄的過程  121
3.6.3  通過微服務網關訪問OAuth資源微服務  124
3.7  本章小結  124

第4章  【實例】車輛電子圍欄系統——用“PostgreSQL + PostGis”實現電子圍欄服務,並利用配置中心管理微服務
的多環境配置信息  125
4.1  功能概述  126
4.2  系統設計  126
4.2.1  系統結構設計  126
4.2.2  數據庫設計  127
4.3  【步驟1】構建Spring Cloud微服務工程代碼  130
4.3.1  搭建“PostgreSQL + PostGIS”數據庫環境  130
4.3.2  創建Spring Cloud微服務工程  131
4.3.3  將Spring Cloud微服務注入Consul  133
4.3.4  集成MyBatis,以訪問PostgreSQL數據庫  134
4.3.5  通過MyBatis-Plus簡化MyBatis的操作  135
4.4  【步驟2】實現微服務的業務邏輯  137
4.4.1  定義服務接口層(Controller層)  137
4.4.2  開發業務層(Service層)代碼  149
4.4.3  開發MyBatis持久層(Dao層)組件  165
4.5  【步驟3】演示電子圍欄微服務的簡單操作  173
4.5.1  通過地圖工具,定義電子圍欄的GeoJson信息  173
4.5.2  演示電子圍欄微服務的簡單操作  174
4.6  【步驟4】使用Spring Cloud ConfigServer配置中心  179
4.6.1  構建Spring Cloud ConfigServer配置中心微服務  179
4.6.2  將微服務接入Config配置中心  181
4.6.3  利用配置中心管理微服務的多環境配置  183
4.7  本章小結  184

第5章  【實例】電子錢包系統——用“Feign + Ribbon + Hystrix + Vue.js + Docker”實現微服務的“負載調用 + 熔斷降級 + 部署”  185
5.1  功能概述  186
5.2  系統設計  186
5.2.1  系統流程設計  187
5.2.2  系統結構設計  188
5.2.3  數據庫設計  189
5.3  【步驟1】構建Spring Cloud微服務工程代碼  191
5.3.1  創建Spring Cloud微服務工程  191
5.3.2  將Spring Cloud微服務注入Consul  192
5.3.3  集成MyBatis,以訪問MySQL數據庫  193
5.3.4  通過MyBatis-Plus簡化MyBatis的操作  193
5.4  【步驟2】實現微服務的業務邏輯  194
5.4.1  定義服務接口層(Controller層)  194
5.4.2  開發業務層(Service層)的代碼  202
5.4.3  開發MyBatis持久層(Dao層)組件  220
5.5  【步驟3】集成“Feign + Ribbon + Hystrix”實現微服務的“遠程通信 + 負載調用 + 熔斷降級”  225
5.5.1  集成微服務通信組件“Feign + Ribbon”  226
5.5.2  開發調用“支付微服務”的FeignClient客戶端代碼  226
5.5.3  微服務熔斷降級的概念  230
5.5.4  集成Hystrix實現微服務的熔斷降級  231
5.5.5  測試Hystrix熔斷降級的生效情況  234
5.6  【步驟4】基於Vue.js開發電子錢包微服務的充值界面  238
5.6.1  認識Vue.js  238
5.6.2  搭建N0de.js環境  238
5.6.3  創建電子錢包微服務的Vue.js前端工程  239
5.6.4  編寫電子錢包微服務的前端功能  241
5.6.5  測試“電子錢包充值”前後端交互流程  246
5.7  【步驟5】用Docker部署Spring Cloud微服務  248
5.7.1  認識Docker  249
5.7.2  利用Dockerfile文件構建微服務鏡像  250
5.7.3  創建docker-compose.yml文件  252
5.7.4  通過Docker容器化部署微服務  254
5.8  本章小結  255

第6章  【實例】支付系統——用“Redis分佈式鎖 + Mockito”實現微服務場景下的“支付邏輯 + 代碼測試”  256
6.1  功能概述  257
6.2  系統設計  257
6.2.1  支付流程設計  258
6.2.2  系統結構設計  260
6.2.3  數據庫設計  261
6.3  【步驟1】構建Spring Cloud微服務工程代碼  264
6.3.1  創建Spring Cloud微服務工程  264
6.3.2  將Spring Cloud微服務注入Consul  265
6.3.3  集成MyBatis,以訪問MySQL數據庫  266
6.3.4  通過MyBatis-Plus簡化MyBatis的操作  266
6.4  【步驟2】實現基於Redis的分佈式鎖  267
6.4.1  配置Redis服務  267
6.4.2  集成Redis客戶端訪問組件  268
6.4.3  理解Redis分佈式鎖的原理  269
6.4.4  實現Redis分佈式鎖的客戶端代碼  271
6.5  【步驟3】實現微服務的業務邏輯  273
6.5.1  定義服務接口層(Controller層)  273
6.5.2  開發業務層(Service層)代碼  281
6.5.3  開發MyBatis持久層(Dao層)組件  292
6.6  【步驟4】接入“支付b”渠道  298
6.6.1  申請支付b沙箱環境  298
6.6.2  開發接入支付b支付的代碼  300
6.6.3  測試“支付b電腦網頁支付”接口  303
6.6.4  測試支付b“渠道支付結果通知”的邏輯  306
6.7  【步驟5】進行Spring Cloud 微服務代碼單元測試  307
6.7.1  認識單元測試  307
6.7.2  開發Mockito單元測試代碼  308
6.8  本章小結  312

第7章  【實例】A/B測試系統——用“Spring Boot Starter機制 + Caffeine緩存”實現A/B流量切分  313
7.1  功能概述  314
7.2  系統設計  314
7.2.1  系統流程設計  314
7.2.2  系統結構設計  316
7.2.3  數據庫設計  317
7.3  【步驟1】構建Spring Cloud微服務工程

代碼  319
7.3.1  創建Spring Cloud微服務工程  320
7.3.2  將Spring Cloud微服務注入Consul  321
7.3.3  集成MyBatis,以訪問MySQL數據庫  322
7.3.4  通過MyBatis-Plus簡化MyBatis的操作  323
7.4  【步驟2】集成高性能本地緩存Caffeine  323
7.4.1  引入Caffeine的依賴  324
7.4.2  開發Caffeine的配置類代碼  324
7.4.3  演示Caffeine的使用效果  326
7.5  【步驟3】實現微服務的業務邏輯  329
7.5.1  定義服務接口層(Controller層)  329
7.5.2  開發業務層(Service層)的代碼  345
7.5.3  開發MyBatis持久層(Dao層)組件  366
7.6  【步驟4】基於Spring Boot Starter方式編寫“接入SDK”  374
7.6.1  創建Spring Boot Starter工程代碼  374
7.6.2  開發“接入SDK”的代碼  376
7.7  【步驟5】接入A/B測試微服務,實現灰度發布  385
7.7.1  創建A/B測試接入方微服務示例工程代碼  385
7.7.2  通過接口調用的方式創建A/B測試  386
7.7.3  開發A/B測試代碼,實現灰度流量切分  388
7.8  本章小結  394

第8章  【實例】分佈式任務調度系統——用“ZooKeeper + ElasticJob”處理分佈式任務  395
8.1  功能概述  396
8.2  【步驟1】構建分佈式任務調度系統  396
8.2.1  認識分佈式任務調度框架ElasticJob  396
8.2.2  搭建ZooKeeper分佈式協調服務  398
8.2.3  部署ElasticJob的Console管理控制台  400
8.3  【步驟2】實現Spring Cloud微服務分佈式任務處理  403
8.3.1  創建Spring Cloud微服務工程  403
8.3.2  編寫ElasticJob的“接入SDK”  405
8.3.3  定義微服務分佈式任務  412
8.4  本章總結  415

第9章  搭建微服務DevOps發布系統——用“GitLab + Harbor + Kubernetes”構建Spring Cloud微服務CI/CD自動化發布體系  416
9.1  CI/CD概述  417
9.2  了解DevOps發布系統的設計流程  418
9.3  【基礎知識1】GitLab代碼倉庫  419
9.3.1  部署GitLab代碼倉庫  419
9.3.2  配置GitLab 郵箱通知  422
9.3.3  設置GitLab的 CI/CD功能  424
9.3.4  安裝Maven及Docker環境  430
9.4  【基礎知識2】Docker鏡像倉庫  430
9.4.1  Docker鏡像簡介  431
9.4.2  選擇Docker鏡像倉庫  431
9.4.3  部署Harbor私有鏡像倉庫  432
9.5  【基礎知識3】Kubernetes容器編排技術  436
9.5.1  Kubernetes簡介  437
9.5.2  搭建Kubernetes集群  438
9.5.3  Kubernetes的技術原理  453
9.6  自動化發布Spring Cloud微服務  457
9.6.1  創建Spring Cloud微服務的示例工程  457
9.6.2  配置Spring Cloud項目的Docker打包插件  459
9.6.3  準備GitLab CI/CD 服務器的Kubernetes環境  461
9.6.4  編寫Kubernetes的發布部署文件  462
9.6.5  定義Spring Cloud微服務的GitLab CI/CD流程  464
9.6.6  將微服務應用自動發佈到Kubernetes集群中  466
9.7  本章小結  469

第10章  搭建微服務監控系統——用“Prometheus + Grafana + SkyWalking”實現度量指標監控及分佈式鏈路追踪  470
10.1  認識監控系統  471
10.1.1  監控對象及分層  471
10.1.2  常見的監控指標及類型  472
10.1.3  主流的監控系統及選型  475
10.2  【實戰】構建微服務度量指標監控系統  477
10.2.1  認識Prometheus  477
10.2.2  【步驟1】部署Prometheus Operator  481
10.2.3  【步驟2】演示Prometheus的Metrics(度量指標)監控效果  484
10.2.4  【步驟3】部署Grafana可視化監控系統  487
10.2.5  【步驟4】將Spring Cloud 微服務接入Prometheus  489
10.2.6  【步驟6】使用ServiceMonitor管理監控目標  510
10.2.7  【步驟7】構建基於Grafana的可視化監控界面  513
10.3  【實戰】構建微服務分佈式鏈路追踪系統  517
10.3.1  認識分佈式鏈路追踪  518
10.3.2  認識SkyWalking  520
10.3.3  【步驟1】部署SkyWalking  521
10.3.4  【步驟2】將Spring Cloud微服務接入SkyWalking  527
10.3.5  【步驟3】通過SkyWalking UI追踪分佈式鏈路  535
10.4  本章小結  537