Spring Cloud 微服務實戰筆記

Spring Cloud 微服務實戰筆記

微服務知識

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

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

微服務架構中不一樣模塊拆分紅不一樣服務,都能獨立部署和擴展,運行在本身的進程內,有穩定的邊界,更新也不會影響其餘服務運營。並且因爲是獨立部署的,能夠更準確的爲每一個服務評估性能容量,也更容易發現系統瓶頸位置。算法

微服務帶來的問題

微服務架構有如此多優勢,單也由於服務的拆分引入了許多問題。數據庫

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

微服務實施

服務調用

微服務架構中一般經過兩種方式互相通訊:後端

  • 使用HTTPRESTFUL 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 基於RibbonHystrix的聲明式服務調用組件。
    • Zuul 網關組件,提供智能路由,訪問過濾等功能。
    • Archaius 外部化配置組件
  • 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風格項目的基礎依賴模塊。
相關文章
相關標籤/搜索