Spring Cloud 微服務實戰筆記

2022-02-23 10:06:19 字數 2409 閱讀 5353

傳統開發所有業務邏輯都在乙個應用中, 開發,測試,部署隨著需求增加會不斷為單個專案增加不同業務模組;前端展現也不侷限於html檢視模板的形式,後端向前端支援需要更多的介面模組。

隨著需求增多,專案變大,單體系統部署在乙個程序內部,往往修改很小的功能,為了部署上線也會影響其他功能。後期維護成本會變得越來越大,難以控制。

微服務架構中不同模組拆分成不同服務,都能獨立部署和擴充套件,執行在自己的程序內,有穩定的邊界,更新也不會影響其他服務運營。而且由於是獨立部署的,可以更準確的為每個服務評估效能容量,也更容易發現系統瓶頸位置。

微服務架構有如此多優點,單也因為服務的拆分引入了許多問題。

服務呼叫

微服務架構中通常通過兩種方式互相通訊:

去中心化管理

在實施微服務架構時,希望每乙個服務都管理其自由的資料庫,這就是資料管理的去中心化。

但隨之而來資料一致性也成了需要解決的問題直以,分布式事務本身實現難度就非常大,所以在微服務架構中,強調在各個服務之間進行無事務的呼叫,對資料一致性,只要求資料在最後處理狀態一致即刻;若在過程中發現錯誤, 通過補償機制來進行處理,使得錯誤資料能夠達到最終的 一 致性。

以下內容摘自我的領域驅動設計(ddd:domain-driven design)筆記

傳統架構,資料一般是強一致性的,我們通常會使用資料庫事務保證一次操作的所有資料修改都在乙個資料庫事務裡,從而保證了資料的強一致性。在分布式的場景,我們也同樣希望資料的強一致性,就是使用分布式事務。但是眾所周知,分布式事務的難度、成本是非常高的,而且採用分布式事務的系統的吞吐量都會比較低,系統的可用性也會比較低。所以,很多時候,我們也會放棄資料的強一致性,而採用最終一致性;

cqrs(command query responsibility segregation)架構 - 命令查詢的責任分離, 則完全秉持最終一致性的理念。這種架構基於乙個很重要的假設,就是使用者看到的資料總是舊的。比如秒殺的場景,當你下單前,也許介面上你看到的商品數量是有的,但是當你下單的時候,系統提示商品賣完了。

容錯設計

單體應用中, 一般不存在單個元件故障而其他部件還能執行的情況,通常是一掛全掛。

在微服務架構中,當部分服務存在故障,而導致沒有返回,執行緒掛起等待,直到超時才能釋放。正常服務頻繁呼叫故障服務,導致大量執行緒被掛起,從而出現故障蔓延。

所以晶塊檢測出故障源並京可能自動恢復服務很關鍵。通常希望每個服務中實現監控和日誌記錄,比如服務狀態,斷路器狀態,吞吐量,網路延遲等關鍵資料的儀錶盤。

思想轉變

設計服務時,需要學習領域驅動設計,細緻的分出每個服務和相關邊界。

實施微服務的團隊,每個小組都應該以做產品的方式,對服務的整個生命週期負責。

spring cloud是基於spring boot的微服務架構開發工具,它為微服務中涉及的配置管理,服務治理,斷路器,智慧型路由,微**,控制匯流排,全域性鎖,決策競選,分布式會話集群狀態管理等操作提供了簡單的開發方式。

常用子專案:

spring cloud bus事件、訊息匯流排。用於傳播集群中的狀態變化或事件, 以觸發後續的處理, 比如用來動態重新整理配置等。

spring cloud cluster針對zookeeper,redis,hazelcast,consul的選舉演算法和通用狀態模式的實現。

spring cloud consul服務發現與配置管理工具。

spring cloud stream通過redis,rabbitkafka實現的消費微服務,通過簡單的宣告式模型來傳送和接收訊息。

spring cloud security安全工具包,提供在zuul**中對oauth2客戶端請求的中繼器。

spring cloud sleuth分布式跟蹤實現,可以完美整合zipkin

spring cloud zookeeper服務發現與配置管理工具

spring cloud starters基於spring boot風格專案的基礎依賴模組。

Spring cloud 微服務實現流程

spring cloud是一系列框架的有序集合。它利用spring boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現註冊 配置中心 訊息匯流排 負載均衡 斷路器 資料監控等,都可以用spring boot的開發風格做到一鍵啟動和部署。spring並沒有重複製造輪子,它只是將目前各...

《Spring Cloud微服務實戰》開始預售

京東 亞馬遜已全面開啟預售!快來一起體驗spring cloud所帶來的全家桶式微服務架構解決方案!掃一掃前往京東購買 為什麼選擇spring cloud spring cloud簡介 版本說明 配置詳解 監控與管理 小結eureka詳解 原始碼分析 配置詳解 服務例項類配置 元資料 跨平台支援 原...

SpringCloud2020微服務實戰專案(四)

ribbon 是 netflix 發布的開源專案,主要功能是提供客戶端的軟體負載均衡演算法和服務呼叫。ribbon 客戶端元件提供一系列完善的配置項如連線超時,重試等。簡單的說,就是在配置檔案中列出 load balancer 簡稱lb 後面所有的機器,ribbon 會自動的幫助你基於某種規則 如簡...