傳統開發全部業務邏輯都在一個應用中, 開發,測試,部署隨着需求增長會不斷爲單個項目增長不一樣業務模塊;前端展示也不侷限於html視圖模板的形式,後端向前端支持須要更多的接口模塊。html
隨着需求增多,項目變大,單體系統部署在一個進程內部,每每修改很小的功能,爲了部署上線也會影響其餘功能。後期維護成本會變得愈來愈大,難以控制。前端
微服務架構
中不一樣模塊拆分紅不一樣服務,都能獨立部署和擴展,運行在本身的進程內,有穩定的邊界,更新也不會影響其餘服務運營。並且因爲是獨立部署的,能夠更準確的爲每一個服務評估性能容量,也更容易發現系統瓶頸位置。算法
微服務架構
有如此多優勢,單也由於服務的拆分引入了許多問題。數據庫
自動化的工具
。單體應用的代碼依賴
變爲了服務間的通訊依賴
, 因此要保證接口的正確調用,須要完善的接口和版本管理工具
。網絡延遲
,分佈式事務
,異步消息
,容錯性
等。在微服務架構
中一般經過兩種方式互相通訊:後端
HTTP
的RESTFUL API
或輕量級消息發送協議, 實現消息傳遞和服務調用的觸發RabbitMQ
提供可靠異步交換.在實施微服務架構時,但願每個服務都管理其自由的數據庫,這就是數據管理的去中心化。安全
但隨之而來數據一致性也成了須要解決的問題直以,分佈式事務
自己實現難度就很是大,因此在微服務架構中,強調在各個服務之間進行無事務
的調用,對數據一致性,只要求數據在最後處理狀態一致即刻;若在過程當中發現錯誤, 經過補償機制來進行處理,使得錯誤數據可以達到最終的 一 致性。網絡
如下內容摘自個人
領域驅動設計(DDD:Domain-Driven Design)
筆記架構傳統架構,數據通常是強一致性的,咱們一般會使用數據庫事務保證一次操做的全部數據修改都在一個數據庫事務裏,從而保證了數據的強一致性。在分佈式的場景,咱們也一樣但願數據的強一致性,就是使用分佈式事務。可是衆所周知,分佈式事務的難度、成本是很是高的,並且採用分佈式事務的系統的吞吐量都會比較低,系統的可用性也會比較低。因此,不少時候,咱們也會放棄數據的強一致性,而採用最終一致性;負載均衡
CQRS(Command Query Responsibility Segregation)架構 - 命令查詢的責任分離, 則徹底秉持最終一致性的理念。這種架構基於一個很重要的假設,就是用戶看到的數據老是舊的。好比秒殺的場景,當你下單前,也許界面上你看到的商品數量是有的,可是當你下單的時候,系統提示商品賣完了。運維
單體應用中, 通常不存在單個組件故障而其餘部件還能運行的狀況,一般是一掛全掛。
在微服務架構中,當部分服務存在故障,而致使沒有返回,線程掛起等待,直到超時才能釋放。正常服務頻繁調用故障服務,致使大量線程被掛起,從而出現故障蔓延。
因此晶塊檢測出故障源並京可能自動恢復服務很關鍵。一般但願每一個服務中實現監控和日誌記錄,好比服務狀態,斷路器狀態,吞吐量,網絡延遲等關鍵數據的儀表盤。
設計服務時,須要學習領域驅動設計,細緻的分出每一個服務和相關邊界。
實施微服務
的團隊,每一個小組都應該以作產品的方式,對服務的整個生命週期負責。
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
風格項目的基礎依賴模塊。