《Spring響應式微服務》讀書筆記

Spring響應式微服務: Spring Boot 2 + Spring 5+Spring Cloud 實戰
鄭天民 著
2019.6出版

雲原生基礎理論

雲原生所需要的能力和特徵
在這裏插入圖片描述

The Twelve Factors

12-Factors經常被直譯爲12要素,也被稱爲12原則,描述如何利用雲平臺提供的便利來開發更具可靠性和擴展性、更加易於維護的雲原生應用。
在這裏插入圖片描述

另外還有補充的三點:

  • API聲明管理
  • 認證和授權
  • 監控與告警

雲原生應用的三大特徵:

  • 容器化封裝:
    以容器爲基礎,提高整體開發水平,形成代碼和組件重用,簡化雲原生應用程序的維護。在容器中運行應用程序和進程,並作爲應用程序部署的獨立單元,實現高水平資源隔離。
  • 動態管理:
    通過集中式的編排調度系統來動態的管理和調度。
  • 面向微服務:
    明確服務間的依賴,互相解耦。

雲原生架構的原則

雲原生架構的重點是通過橫向擴展、分佈式處理,以及自動更換故障組件來實現彈性和擴展。

在這裏插入圖片描述
雲原生架構的高層次元素

  • 系統的功能需求(它應該做什麼,例如“以這種格式處理訂單…”);
  • 非功能性要求(如“每分鐘至少處理 200 個訂單”);
  • 約束(超出變更範圍的內容,例如“訂單必須在我們現有的大型機系統上更新”)。

谷歌雲原生架構的 5 條原則

  • 原則 1:自動化設計
  • 原則 2:善用狀態
  • 原則 3:支持託管服務
  • 原則 4:深入實踐防禦
  • 原則 5:架構不止

自動化雲原生系統的一些常見領域:

  • 基礎設施:
    使用 Google Cloud Deployment Manager 或 Terraform 之類的工具,自動創建基礎設施並對其進行更新;
  • 持續集成 / 持續交付(CI/CD):
    使用 Google Cloud Build 、 Jenkins 和 Spinnaker 等工具自動構建、測試和部署構成系統的軟件包。不僅應該自動部署,還應該努力實現金絲雀測試和回滾等過程的自動化;
  • 伸縮性(Scale Up/Down):
    除非系統負載幾乎從未發生變化,否則應該根據負載的增加自動擴展系統,並根據負載的持續下降進行收縮。通過擴展,可以確保服務仍然可用,並通過按比例收縮來降低成本。這對於大型應用程序(如公共網站)以及具有不規則負載的較小應用程序(例如在某些時段非常繁忙但在其他時間幾乎不使用的內部應用程序)來說是很有意義的。對於有時幾乎沒有流量並且可以容忍一些初始延遲的應用程序,甚至應該考慮將其收縮爲零(刪除所有正在運行的實例,並在下次需要時重新啓動應用程序);
  • 監控和自動恢復:
    應該從一開始就在雲原生系統中納入監控和日誌記錄。日誌記錄和監視的數據流可以很自然地用於監視系統的運行狀況,除此之外還可以有許多用途。例如,它們可以對系統的使用和用戶的行爲(有多少人在使用系統,他們在使用什麼部分,他們的平均延遲時間是多少等)提供有價值的見解。其次,它們可以通過彙總來衡量整個系統的健康狀況(例如,磁盤又快滿了,它的填寫速度比平時快嗎?磁盤使用量和服務佔用之間的關係是什麼?等等)。最後,它們是添加自動化理想的地方,當磁盤要填滿時,可以自動調整磁盤大小以保持系統正常運行,而不僅僅只記錄錯誤。

領域驅動設計

基本概念

  • 通用語言 ubiquitous language
  • 限界上下文 boundary context:語義和語境上的邊界
  • 子域 sub-domain
  • 上下文映射 context maping

子域類型

  • 核心域
  • 支撐子域
  • 通用子域

上下文映射的種類

  • 合作關係
  • 共享內核
  • 客戶供應商
  • 跟隨者
  • 防腐層
  • 開放主機服務
  • 已發佈語言
  • 各行其道

戰術設計

  • 聚合根
  • 領域事件
  • 事件風暴

設計的技術維度

  • 聚合 aggregate
  • 領域事件 domain event

領域劃分原則

  • 服務關聯度原則
  • 業務能力職責單一原則
  • 領域名字代表的自然語言上下文保持互相獨立
  • 讀寫分離原則
  • 組織關係原則

微服務劃分原則

  • 垂直劃分優先原則
  • 持續演進原則
  • 服務自治,接口隔離原則
  • 自動化驅動原則

服務拆分策略

  • 前後端拆分
  • 把經常變更的部分拆分
  • 把公共的部分進行拆分
  • 根據業務拆分
  • 根據領域模型拆分

服務設計核心標準

  • 服務無狀態 service statelessness
  • 服務可重用 service reusability
  • 服務可發現 service discoverability
  • 服務自治 service autonomy
  • 服務松耦合 service loose coupling

服務集成模式

  • 接口集成
    • RPC
    • REST
    • Message
    • ESB
  • 數據集成
    • 共享數據庫 shared database
    • 數據複製 Data replication
  • 客戶端集成
  • 外部集成

微服務核心組件

  • 服務通訊
  • 事件驅動
  • 負載均衡
  • 服務路由
  • API網關
  • 配置管理

在這裏插入圖片描述

服務註冊與發現

組件名 語言 CAP 一致性算法 服務健康檢查 對外暴露接口
Eureka Java AP 可配支持 HTTP
Consul Go CP Raft 支持 HTTP/DNS
Zookeeper Java CP Paxos 支持 客戶端
etcd Go CP Raft
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章