Spring Cloud簡介
Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,為開發者提供了在分布式系統(配置管理,服務發現,熔斷,路由,微代理,控制總線,一次性token,全居瑣,leader選舉,分布式session,集群狀態)中快速構建的工具。
SpringCloud子項目介紹
Spring Cloud Config:配置管理開發工具包,可以讓你把配置放到遠程服務器,目前支持本地存儲、Git以及Subversion。
Spring Cloud Bus:事件、消息總線,用於在集群(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。
Spring Cloud Netflix:針對多種Netflix組件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
Netflix Eureka:雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層服務器的故障轉移。
Netflix Hystrix:容錯管理工具,旨在通過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。
Netflix Zuul:邊緣服務工具,是提供動態路由,監控,彈性,安全等的邊緣服務。
Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調機制等功能。
Spring Cloud for Cloud Foundry:通過Oauth2協議綁定服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS雲平台。
Spring Cloud Sleuth:日志收集工具包,封裝了Dapper,Zipkin和HTrace操作。
Spring Cloud Data Flow:大數據操作工具,通過命令行方式操作數據流。
Spring Cloud Security:安全工具包,為你的應用程序添加安全控制,主要是指OAuth2。
Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫集成。
Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務注冊和發現。
Spring Cloud Stream:數據流操作開發包,封裝了與Redis,Rabbit、Kafka等發送接收消息。
Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令行方式快速建立雲組件。
Spring Cloud基於Spring Boot, 由眾多的子項目組成. 例如Spring Cloud Config是一個中心化的配置管理服務, 用來解決微服務環境下配置文件分散管理的難題, Spring Cloud Stream是一個消息中間件抽象層, 目前支持Redis, Rabbit MQ和Kafka, Spring Cloud Netflix整合了Netflix OSS, 可以直接在項目中使用Netflix OSS. 目前Spring Cloud的子項目有接近20個, 如果要使用Spring Cloud, 務必先將子項目都了解一遍, 得知道哪些功能Spring Cloud已經提供了, 避免團隊花費大量時間重復造輪子.
一個合格的微服務系統必然包括從設計(從業務層面划分服務, 獨立數據庫), 到開發(選用合適的架構和工具, 解決CAP問題), 到測試(持續集成, 自動化測試), 到運維(容器化, 服務監控, 服務容錯)的一系列解決方案.
微服架構圖案例
Demo地址:https://github.com/zhangjianbinJAVA/mysteam.git
原博客地址:http://skaka.me/
主要特點:
-
使用eureka和Netflix Ribbon進行服務注冊和服務發現.
-
使用Spring Cloud Stream, zookeeper和kafka實現分布式事務.
-
使用hystrix實現服務隔離, hystrix dashboard和turbine進行服務監控.
-
使用Spring MVC和Swagger實現REST API.
-
使用Spring Cloud Config實現配置集中管理.
系統拆分成了五個服務:
用戶服務(user service)
賬戶服務(account service)
產品服務(product service)
優惠券服務(coupon service)
訂單服務(order service)
關注點主要在Backend Services和MQ, MySQL這一部分. 服務之間通過Rest API和事件進行通信. Rest API主要用來進行一些只讀等不需要事務的操作, 涉及事務的操作一般使用事件來完成。