1. 程式人生 > >微服務Spring Cloud例子

微服務Spring Cloud例子

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/

主要特點:
  1. 使用eureka和Netflix Ribbon進行服務註冊和服務發現.

  2. 使用Spring Cloud Stream, zookeeper和kafka實現分散式事務.

  3. 使用hystrix實現服務隔離, hystrix dashboard和turbine進行服務監控.

  4. 使用Spring MVC和Swagger實現REST API.

  5. 使用Spring Cloud Config實現配置集中管理.

系統拆分成了五個服務:
  使用者服務(user service)
  賬戶服務(account service)
  產品服務(product service)
  優惠券服務(coupon service)
  訂單服務(order service)

關注點主要在Backend Services和MQ, MySQL這一部分. 服務之間通過Rest API和事件進行通訊. Rest API主要用來進行一些只讀等不需要事務的操作, 涉及事務的操作一般使用事件來完成。