天天看點

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小朔哥,就可以擷取免費領取方式!