2023年9月27日 星期三

微服務開發指南:使用Spring Cloud與Docker

 





|Chapter 01| 使用 Spring 實作微服務架構

1.1. 微服務架構的演變  
1.1.1. 常見的 N 層架構 
1.1.2. 什麼是單體架構? 
1.1.3. 什麼是微服務架構?
1.1.4. 為什麼要改變建構應用程式的方式?
1.2. Spring 社群的微服務技術
1.3. 本書範例專案與相關微服務技術
1.4. 微服務編寫準則與開發模式
1.4.1. 微服務的核心模式
1.4.2. 微服務的路由模式
1.4.3. 微服務的用戶端彈性模式
1.4.4. 微服務的安全模式
1.4.5. 微服務的日誌紀錄和追蹤模式


|Chapter 02| 使用 Spring Cloud 打造微服務生態系統

2.1. Spring Cloud 關鍵技術
2.1.1. Spring Cloud Config
2.1.2. Spring Cloud Service Discovery
2.1.3. Spring Cloud LoadBalancer、Resilience4j
2.1.4. Spring Cloud Gateway
2.1.5. Spring Cloud Stream
2.1.6. Spring Cloud Sleuth、Zipkin
2.1.7. Spring Cloud Security
2.2. 使用 Spring Cloud 的簡單範例
2.3. 本書範例專案
2.3.1. 專案情境與需求
2.3.2. 使用 Spring Initializr 建立專案


|Chapter 03| 使用 Spring Boot 開發微服務程式

3.1. 架構師的任務:設計微服務架構
3.1.1. 解析業務需求
3.1.2. 決定服務粒度
3.1.3. 定義服務介面
3.1.4. 何時不該使用微服務?
3.2. 開發者的任務:使用 Spring Boot 建構微服務
3.2.1. 建立 Controller 類別
3.2.2. 建立 Domain 類別
3.2.3. 建立 Service 類別
3.2.4. 建立多國語系環境
3.2.5. 測試服務
3.3. DevOps 的任務:打造精密的執行環境
3.3.1. 服務組裝:打包和部署微服務
3.3.2. 服務引導:管理微服務的設定
3.3.3. 服務註冊和發現:用戶端如何與微服務通訊
3.3.4. 服務監控:傳達微服務的健康狀況
3.4. 結語


|Chapter 04| 整合 Docker 建構微服務專案與環境

4.1. 應該選擇虛擬機還是容器技術?
4.2. 使用 Docker 容器技術
4.2.1. 什麼是 Docker ?
4.2.2. 安裝 Docker Desktop 與 WSL
4.2.3. 常用 Docker 指令介紹
4.3. 使用 Dockerfile 建立 Docker 映像檔
4.3.1. Dockerfile 的編寫指示介紹
4.3.2. 使用 docker build 指令建構映像檔
4.4. 使用 Docker Compose 定義和管理 Docker 容器群組
4.4.1. Docker Compose 的安裝與簡介
4.4.2. docker-compose.yml 的編寫指示介紹
4.4.3. Docker Compose 的指令介紹
4.5. 整合 Docker 與微服務
4.5.1. 使用 Maven 插件 dockerfile-maven-plugin 支援 Docker
4.5.2. 編寫 Dockerfile
4.5.3. 建構 Docker 映像檔並執行
4.5.4. 使用 Buildpacks 建構 Docker 映像檔
4.5.5. 使用 Docker Compose 啟動服務


|Chapter 05| 使用 Spring Cloud Config Server 管理微服務的設定

5.1. 設定資料的複雜性與管理原則
5.1.1. 設定資料的管理架構
5.1.2. 設定資料的管理實作
5.2. 建構 Spring Cloud Config Server 的微服務用戶端
5.2.1. 設定微服務用戶端讀取 Spring Cloud Config Server 的資料
5.2.2. 使用介面 Environment 或 @Value 讀取設定資料
5.2.3. 微服務用戶端的資料設計
5.3. 建構 Spring Cloud Config Server
5.3.1. 選擇專案的依賴項目
5.3.2. 設定 Spring Cloud Config Server 的啟動類別
5.3.3. 使用檔案系統儲存設定資料
5.3.4. 啟動微服務架構的所有服務
5.3.5. 使用 Git 儲存設定資料
5.3.6. 同步讀取 Spring Cloud Config Server 更新後的設定資料
5.4. 保護機敏設定資料
5.4.1. 設定對稱密鑰
5.4.2. 啟用 Spring Cloud Config Server 的自動加解密機制


|Chapter 06| 整合 Netflix Eureka 建構 Service Discovery

6.1. Service Discovery 的需求與目的
6.1.1. Service Discovery 對於微服務的重要性
6.1.2. 使用負載均衡器解析服務位址的缺點
6.2. 雲端的 Service Discovery
6.2.1. Service Discovery 的機制
6.2.2. 使用 Spring Cloud 和 Netflix Eureka 實作 Service Discovery
6.3. 建構 Spring Cloud Eureka 服務 
6.3.1. 建立 Eureka Server 專案 
6.3.2. Eureka Server 的註冊與自我保存機制 
6.4. 向 Spring Cloud Eureka 註冊服務  
6.4.1. 建立查詢 Eureka Server 的微服務程式
6.4.2. 使用 Eureka Server 的儀表板與 REST API
6.5. 使用 Eureka Server 查找服務實例
6.5.1. 使用支援負載均衡的 RestTemplate 呼叫服務實例
6.5.2. 使用 DiscoveryClient 與標準 RestTemplate 元件呼叫服務實例
6.5.3. 使用 Netflix Feign 的用戶端程式呼叫服務實例


|Chapter 07| 整合 Resilience4j 建立彈性與容錯的微服務架構

7.1. 用戶端彈性模式簡介
7.1.1. 用戶端負載均衡 (Client-Side Load Balancing) 模式
7.1.2. 斷路器 (Circuit Breaker) 模式 
7.1.3. 回退 (Fallback) 模式
7.1.4. 隔板 (Bulkhead) 模式
7.2. 以 Resilience4j 實作用戶端彈性模式
7.2.1. 未使用彈性模式的情境
7.2.2. 使用彈性模式的情境
7.2.3. 使用 Book 微服務專案實作彈性模式
7.3. 實作斷路器 (Circuit Breaker) 模式
7.3.1. 斷路器的原理  
7.3.2. 查詢資料庫時套用斷路器模式  
7.3.3. 呼叫 Author 微服務時套用斷路器模式  
7.3.4. 自定義斷路器  
7.4. 實作回退 (Fallback) 模式 
7.5. 實作隔板 (Bulkhead) 模式 
7.6. 實作重試 (Retry) 模式 
7.7. 實作頻率限制器 (Rate Limiter) 模式 
7.8. 使用 ThreadLocal 追蹤服務呼叫  


|Chapter 08| 使用 Spring Cloud Gateway 支援服務路由

8.1. 簡介 Service Gateway 
8.2. 導入 Spring Cloud Gateway
8.2.1. 建構 Spring Cloud Gateway 專案
8.2.2. 設定 Spring Cloud Gateway 與 Eureka Server 的關聯
8.3. 設定 Spring Cloud Gateway 服務路由
8.3.1. Spring Cloud Gateway 是反向代理
8.3.2. 設定自動映射路由
8.3.3. 設定手動映射路由
8.3.4. 同時使用自動與手動映射路由
8.3.5. 動態重新載入路由設定
8.4. 使用 Spring Cloud Gateway 的 Predicate 與 Filter 工廠
8.4.1. 使用內建的 Predicate 工廠設定路由
8.4.2. 使用內建的 Filter 工廠設定路由
8.4.3. 自定義前置與後置 Filter 追蹤服務呼叫
8.5. 自定義 Spring Cloud Gateway 的前置 Filter 與建立關聯 ID
8.6. 完備關聯 ID 在服務內的追蹤流程
8.6.1. 建立 UserContextFilter 攔截並讀取 HTTP 標頭資訊
8.6.2. 建立 UserContext 與 UserContextHolder 保存 HTTP 標頭資訊
8.6.3. 建立 UserContextInterceptor 和 RestTemplate 傳播關聯 ID
8.7. 自定義 Spring Cloud Gateway 的後置 Filter 並回應關聯 ID 至用戶端


|Chapter 09| 使用 Keycloak 保護微服務架構

9.1. 簡介 OAuth2
9.2. 簡介 Keycloak
9.3. 建立與設定 Keycloak
9.3.1. 使用 Docker 啟動 Keycloak
9.3.2. 建立 Realm
9.3.3. 建立用戶端程式
9.3.4. 建立 Realm 角色
9.3.5. 建立使用者
9.3.6. 取得 OAuth2 的存取令牌
9.4. 使用 Keycloak 保護微服務 
9.4.1. 新增 Spring Security 與 Keycloak 的 Maven 依賴項目  
9.4.2. 設定微服務連線 Keycloak  
9.4.3. 建立設定類別與限制端點存取  
9.4.4. 使用存取令牌驗證保護機制 
9.5. 整合 Keycloak 與 Service Gateway  
9.5.1. 存取令牌的傳播流程 
9.5.2. 設定 Service Gateway 傳播 Authorization 標頭 
9.5.3. 設定 Book 服務啟用 Keycloak 保護  
9.5.4. 傳播存取令牌  
9.6. 解析存取令牌中的自定義資訊 
9.7. 更完整的微服務安全性架構  
9.7.1. 對所有服務通訊使用 HTTPS/SSL  
9.7.2. 呼叫所有服務均透過 Service Gateway  
9.7.3. 將 API 區分公開區域和私有區域  
9.7.4. 封鎖服務裡非必要開放的通訊埠  


|Chapter 10| 使用 Spring Cloud Stream 支援事件驅動架構

10.1. 訊息傳遞、事件驅動架構和微服務的案例  
10.1.1. 簡介訊息代理與訊息傳遞模型  
10.1.2. 使用同步的請求與回應模型傳達服務間狀態變化
10.1.3. 使用訊息傳遞模型傳達服務間狀態變化
10.1.4. 訊息架構的注意事項
10.2. 使用 Spring Cloud Stream
10.2.1. 簡介 Spring Cloud Stream
10.2.2. 設定 Apache Kafka 的 Docker 環境
10.2.3. 在微服務專案中建立訊息生產者
10.2.4. 在微服務專案中建立訊息消費者
10.2.5. 驗證訊息的發送與接收
10.3. 結合 Redis 與 Spring Cloud Stream
10.3.1. 設定 Redis 的 Docker 環境
10.3.2. 使用 Redis 快取
10.4. 使用 Spring Cloud Stream 的函數式編程模型
10.4.1. 調整訊息生產者改使用函數式編程模型 
10.4.2. 調整訊息消費者改使用函數式編程模型 


|Chapter 11| 使用 Spring Cloud Sleuth 與 Zipkin 追蹤微服務架構

11.1. 簡介 Spring Cloud Sleuth
11.1.1. 微服務架構下追蹤與除錯的難題
11.1.2. 使用 Spring Cloud Sleuth 追蹤服務軌跡
11.2. 使用 Spring Cloud Sleuth 與 ELK Stack 彙整日誌紀錄
11.2.1. 整合 ELK Stack 與 Spring Cloud Sleuth
11.2.2. 在服務中設定 Logback
11.2.3. 在 Docker 中定義和運行 ELK Stack 服務
11.2.4. 使用 Kibana 查詢日誌紀錄彙整結果
11.2.5. 在 Service Gateway 將追蹤 ID 新增到 HTTP 回應標頭
11.2.6. 由 Spring Boot 3.x 開始將停止支援 Spring Cloud Sleuth 
11.3. 使用 Zipkin 進行分散式追蹤 
11.3.1. 設定 Zipkin 
11.3.2. 使用 Zipkin 追蹤跨服務操作  
11.3.3. 使用 Zipkin 追蹤訊息傳遞 
11.3.4. 新增自定義跨度  

2023年8月19日 星期六

Java課程規劃

Java課程規劃

第1階段:JavaSE 基礎班

  1. 課程名稱:Java SE 基礎班

  2. 參考用書:OCP:Java SE 11 Developer 認證指南(上)- 物件導向設計篇,博碩出版社-曾瑞君

  3. 課程時數:48小時

  4. 適合對象:無程式語言基礎。

  5. 課程規劃:

  • 01| Java歷史與證照介紹
  • 02| Java程式語言簡介
  • 03| 物件導向的程式設計思維
  • 04| 認識Java語法與建立類別
  • 05| 認識變數與Java基本型別
  • 06| 使用參考型別操作物件與var宣告
  • 07| 使用選擇結構和相關運算子
  • 08| 陣列
  • 09| 使用重複結構
  • 10| 方法的設計與使用
  • 11| 物件導向程式設計(一)
  • 12| 物件導向程式設計(二)
  • 13| 程式執行異常處理
  • 14| 類別設計(一)
  • 15| 類別設計(二)
  • 16| 介面設計
  • 17| Lambda表示式入門

 

第2階段:JavaSE 進階班

  1. 課程名稱:Java SE 進階班

  2. 參考用書:OCP:Java SE 11 Developer認證指南(下) - API剖析運用篇,博碩出版社-曾瑞君

  3. 課程時數:48小時

  4. 適合對象:完成第1階段課程(或相同技術水平),有志取得OCP:Java SE 11 Developer證照者

  5. 課程規劃:

  • 01| 泛型(Generics)和集合物件(Collections)
  • 02| 例外(Exceptions)與斷言(Assertions)
  • 03| 輸入與輸出(I/O)
  • 04| NIO.2
  • 05| 執行緒(Threads)
  • 06| 執行緒與並行API(Concurrency API)
  • 07| 使用JDBC建立資料庫連線
  • 08| Java的區域化(Localization)
  • 09| Lambda表示式的應用
  • 10| 使用Stream API
  • 11| Date/Time API
  • 12| 資安監控程式實作(有剩餘時間才進行,約需1天,參考部落格)

 

補充課程1:JavaSE 11新功能

  1. 課程名稱:JavaSE 11新功能

  2. 參考用書:OCP:Java SE 11 Developer認證指南(下) - API剖析運用篇,博碩出版社-曾瑞君

  3. 課程時數:12小時

  4. 適合對象:完成第2階段課程(或相同技術水平),有志取得OCP:Java SE 11 Developer證照者

  5. 課程規劃:

  • 01| 標註型別(Annotation)
  • 02| Java平台模組系統(Java Platform Module System)
  • 03| 模組化應用程式
  • 04| 開發安全的Java程式

 

第3階段:JavaEE Web程式設計班

  1. 課程名稱:JavaEE Web程式設計班

  2. 參考用書:Java RWD Web企業網站開發指南 | 使用Spring MVC與Bootstrap,碁峰出版社-曾瑞君

  3. 課程時數:48小時

  4. 適合對象:完成第2階段課程(或相同技術水平)者。

  5. 課程規劃:

  • 01| 前端HTML入門
  • 02| 前端CSS入門
  • 03| 前端JavaScript入門
  • 04| Java Servlet
  • 05| Java Server Pages
  • 06| 實作 MVC 架構
  • 07| Servlet 的執行環境
  • 08| 容器支援 Servlet 和 JSP 的設備
  • 09| 再談 View 的機制
  • 10| JSP 程式設計
  • 11| 使用客製化標籤開發 JSP 程式
  • 12| 深入 Controller
  • 13| 深入 Model
  • 14| 非同步的 Servlets 和AJAX
  • 15| JavaEE網站安全性實作介紹

 

第4階段:Spring框架程式設計班

  1. 課程名稱:Spring框架程式設計班

  2. 參考用書:Spring Boot情境式網站開發指南|使用Spring Data JPA、Spring Security、Spring Web Flow,碁峰出版社-曾瑞君

  3. 課程時數:48小時

  4. 適合對象:完成第3階段課程(或相同技術水平)者。

  5. 課程規劃:

  • 01| 前端JQuery入門
  • 02| 前端Bootstrap入門
  • 03| Spring 框架導論
  • 04| Spring DI
  • 05| Spring AOP
  • 06| Spring JDBCTemplate
  • 07| Spring MVC
  • 08| Spring MVC View
  • 09| SiteMesh 框架
  • 10| Spring Security
  • 11| 綜合實作

 

第5階段:Spring Boot與JPA程式設計班

  1. 課程名稱:Spring Boot與JPA程式設計班

  2. 參考用書:Spring REST API開發與測試指南:使用Swagger、HATEOAS、JUnit、Mockito、PowerMock、Spring Test,碁峰出版社-曾瑞君

  3. 課程時數:42小時

  4. 適合對象:完成第4階段課程(或相同技術水平)者。

  5. 課程規劃:

  • 01| 使用Maven管理Java專案
  • 02| JPA與資料庫
  • 03| 使用JPQL查詢語言
  • 04| 使用Spring Data JPA讓ORM更聰明
  • 05| 使用Spring Boot簡化Spring開發
  • 06| 簡介REST
  • 07| 使用Spring Boot建構REST API專案
  • 08| REST API的例外處理
  • 09| 使用Spring Security的HTTP基礎驗證方式保護REST API

 

第6階段:Spring Cloud程式設計班

  1. 課程名稱:Spring Cloud程式設計班

  2. 參考用書:微服務開發指南:使用Spring Cloud與Docker (出版中)

  3. 課程時數:

  4. 適合對象:完成第5階段課程(或相同技術水平)者。

  5. 課程規劃:

  • 01| 使用Spring實作微服務架構
  • 02| 使用Spring Cloud打造微服務生態系統
  • 03| 使用Spring Boot開發微服務程式
  • 04| 整合Docker建構微服務專案與環境
  • 05| 使用Spring Cloud Config Server管理微服務的設定
  • 06| 整合Netflix Eureka建構Service Discovery
  • 07| 整合Resilience4j建立高彈性與高容錯的微服務架構
  • 08| 使用Spring Cloud Gateway支援服務路由
  • 09| 使用Keycloak保護微服務架構
  • 10| 使用Spring Cloud Stream支援事件驅動架構 
  • 11| 使用Spring Cloud Sleuth與Zipkin追蹤分散式架構 

 

講師簡介

於 國立台灣大學 土木工程學系、大地工程組研究所 畢業,

曾在 明基、華碩、訊連、宏達電、北富銀、台灣高鐵、港商太古、港商電訊盈科、美商美超微 等公司任職,工作內容和 Java、資料庫、資訊安全有關,接觸Java前後超過15年。

教學分享與寫作是我業餘興趣,也是在技術上溫故知新。

教學經歷:
  1. 中國文化大學 教育推廣部 講師
  2. 台灣科技大學 教育推廣部 講師
  3. 巨匠電腦 板橋/桃園/苗栗認證中心 認證課程講師
  4. 其他企業包班講師
著作:
  1. Java SE7/8 OCAJP 專業認證指南:擬真試題實戰,博碩出版社
  2. Java SE7/8 OCPJP 進階認證指南:擬真試題實戰,博碩出版社
  3. Java SE8 OCPJP 進階認證指南,博碩出版社
  4. Java SE8 OCAJP 專業認證指南,博碩出版社
  5. Java RWD Web 企業網站開發指南 | 使用Spring MVC與Bootstrap,碁峰出版社
  6. Spring Boot 情境式網站開發指南|使用Spring Data JPA、Spring Security、Spring Web Flow,碁峰出版社
  7. Spring REST API 開發與測試指南 | 使用Swagger、HATEOAS、JUnit、Mockito、PowerMock、Spring Test,碁峰出版社
  8. OCP:Java SE 11 Developer 認證指南(上) - 物件導向設計篇,博碩出版社
  9. OCP:Java SE 11 Developer 認證指南(下) - API剖析運用篇,博碩出版社
  10. 微服務開發指南:使用Spring Cloud與Docker,碁峰出版社,出版中
證照:
  1. OCP, Java SE 11 Developer
  2. OCP/OCA, Java SE 8 Programmer
  3. OCP/OCA, Java SE 7 Programmer
  4. OCE, Java EE 6 Web Component Developer
  5. OCE, Java EE 6 Web Services Developer
  6. SCJD, Sun Certified Developer for the Java 2 Platform
  7. SCBCD, Sun Certified Business Component Developer for the Java Platform, EE 5
  8. SCWCD, Sun Certified Web Component Developer for the Java Platform, EE 1.4
  9. SCJP, Sun Certified Programmer for the Java Platform 1.4
  10. ECSA, EC-Council Certified Security Analyst
  11. ECSP-Java ,  EC-Council Certified Secure Programmer - Java
  12. CEH, EC-Council Certified Ethical Hacker
  13. OCP 10, Oracle Database 10g Administrator Certified Professional
  14. OCP 9, Oracle9i Database Administrator Certified Professional
  15. PL/SQL OCA, Oracle PL/SQL Developer Certified Associate
  16. MCTS SQL Server 2005