Spring Cloud 微服務實戰筆記

微服務知識

傳統開發所有業務邏輯都在一個應用中, 開發,測試,部署隨着需求增加會不斷爲單個項目增加不同業務模塊;前端展現也不侷限於html視圖模板的形式,後端向前端支持需要更多的接口模塊。

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

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

Spring Cloud 微服務實戰筆記
微服務帶來的問題

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

運維人員需要維護的進程數量增多了, 所以需要自動化的工具。
服務拆分了,但業務邏輯的依賴不會消除,只是從單體應用的代碼依賴變爲了服務間的通信依賴, 所以要保證接口的正確調用,需要完善的接口和版本管理工具。
由於服務獨立部署在各自進程內,所以它們間通信需要考慮網絡延遲,分佈式事務,異步消息,容錯性等。
微服務實施

服務調用

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

使用HTTP的RESTFUL API或輕量級消息發送協議, 實現消息傳遞和服務調用的觸發
通過輕量級消息總線上傳消息,類似RabbitMQ提供可靠異步交換.
去中心化管理

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

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

以下內容摘自我的領域驅動設計(DDD:Domain-Driven Design)筆記

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

CQRS(Command Query Responsibility Segregation)架構 - 命令查詢的責任分離, 則完全秉持最終一致性的理念。這種架構基於一個很重要的假設,就是用戶看到的數據總是舊的。比如秒殺的場景,當你下單前,也許界面上你看到的商品數量是有的,但是當你下單的時候,系統提示商品賣完了。

容錯設計

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

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

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

思想轉變

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

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

Spring Cloud 介紹

Spring Cloud 是基於Spring Boot的微服務架構開發工具,它爲微服務中涉及的配置管理,服務治理, 斷路器, 智能路由, 微代理, 控制總線, 全局鎖,決策競選,分佈式會話和集羣狀態管理等操作提供了簡單的開發方式。

常用子項目:

Spring Cloud Config 配置管理工具, 支持使用Git存儲 配置內容, 可以使用它實現應用配置的外部化存儲, 並支持客戶端配置信息刷新、 加密/ 解密配置內容 等
Spring Cloud Netflix 核心組件,對多個Netflix OSS套件進行整合
Eureka 服務治理組件,包含服務註冊中心、 服務註冊與發現機制的實現。
Hystrix 容錯管理組件,實現斷路器模式,幫助服務依賴中出現的延遲和爲故障提供強大的容錯能力。
Ribbon 客戶端負載均衡的服務調用組件。
Feign 基於Ribbon和Hystrix的聲明式服務調用組件。
Zuul 網關組件,提供智能路由,訪問過濾等功能。
Archaius 外部化配置組件
Spring Cloud Bus 事件、消息總線。用於傳播集羣中的狀態變化或事件, 以觸發後續的處理, 比如用來動態刷新配置等。
Spring Cloud Cluster 針對ZooKeeper,Redis,Hazelcast,Consul的選舉算法和通用狀態模式的實現。
Spring Cloud Consul 服務發現與配置管理工具。
Spring Cloud Stream 通過Redis,Rabbit或Kafka實現的消費微服務,通過簡單的聲明式模型來發送和接收消息。
Spring Cloud Security 安全工具包,提供在Zuul代理中對OAuth2客戶端請求的中繼器。
Spring Cloud Sleuth 分佈式跟蹤實現,可以完美整合Zipkin
Spring Cloud ZooKeeper 服務發現與配置管理工具
Spring Cloud Starters 基於Spring Boot風格項目的基礎依賴模塊。

更多的技術分享,盡在我的公衆號:Java小朔哥

還有我把近一年經歷過的面試,和一些刷過的面試題都做成了PDF,PDF都是可以免費分享給大家的,只要關注我的wx公衆號:java小朔哥,就可以獲取免費領取方式!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章