基於 Spring Cloud 完整的微服務架構實戰

搜雲庫技術團隊發表於2017-12-18

本專案是一個基於 Spring Boot、Spring Cloud、Spring Oauth2 和 Spring Cloud Netflix 等框架構建的微服務專案。

@作者:Sheldon 地址:https://github.com/zhangxd1989

技術棧

  • Spring boot - 微服務的入門級微框架,用來簡化 Spring 應用的初始搭建以及開發過程。
  • Eureka - 雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。
  • Spring Cloud Config - 配置管理工具包,讓你可以把配置放到遠端伺服器,集中化管理叢集配置,目前支援本地儲存、Git 以及 Subversion。
  • Hystrix - 熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。
  • Zuul - Zuul 是在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 相當於是裝置和 Netflix 流應用的 Web 網站後端所有請求的前門。
  • Spring Cloud Bus - 事件、訊息匯流排,用於在叢集(例如,配置變化事件)中傳播狀態變化,可與 Spring Cloud Config 聯合實現熱部署。
  • Spring Cloud Sleuth - 日誌收集工具包,封裝了 Dapper 和 log-based 追蹤以及 Zipkin 和 HTrace 操作,為 SpringCloud 應用實現了一種分散式追蹤解決方案。
  • Ribbon - 提供雲端負載均衡,有多種負載均衡策略可供選擇,可配合服務發現和斷路器使用。
  • Turbine - Turbine 是聚合伺服器傳送事件流資料的一個工具,用來監控叢集下 hystrix 的 metrics 情況。
  • Spring Cloud Stream - Spring 資料流操作開發包,封裝了與 Redis、Rabbit、Kafka 等傳送接收訊息。
  • Feign - Feign 是一種宣告式、模板化的 HTTP 客戶端。
  • Spring Cloud OAuth2 - 基於 Spring Security 和 OAuth2 的安全工具包,為你的應用程式新增安全控制。

應用架構

該專案包含 8 個服務

  • registry - 服務註冊與發現
  • config - 外部配置
  • monitor - 監控
  • zipkin - 分散式跟蹤
  • gateway - 代理所有微服務的介面閘道器
  • auth-service - OAuth2 認證服務
  • svca-service - 業務服務A
  • svcb-service - 業務服務B

體系架構

architecture

應用元件

components

啟動專案

  • 使用 Docker 快速啟動
    1. 配置 Docker 環境
    2. mvn clean package 打包專案及 Docker 映象
    3. 在專案根目錄下執行 docker-compose up -d 啟動所有專案
  • 本地手動啟動
    1. 配置 rabbitmq
    2. 修改 hosts 將主機名指向到本地
      127.0.0.1 registry config monitor rabbitmq auth-service
      或者修改各服務配置檔案中的相應主機名為本地 ip
    3. 啟動 registry、config、monitor、zipkin
    4. 啟動 gateway、auth-service、svca-service、svcb-service

專案預覽

註冊中心

訪問 http://localhost:8761/ 預設賬號 user,密碼 password

registry

監控

訪問 http://localhost:8040/ 預設賬號 admin,密碼 admin

控制皮膚

monitor

應用註冊歷史

monitor

Turbine Hystrix皮膚

monitor

應用資訊、健康狀況、垃圾回收等詳情

monitor

計數器

monitor

檢視和修改環境變數

monitor

管理 Logback 日誌級別

monitor

檢視並使用 JMX

monitor

檢視執行緒

monitor

認證歷史

monitor

檢視 Http 請求軌跡

monitor

Hystrix 皮膚

monitor

鏈路跟蹤

訪問 http://localhost:9411/ 預設賬號 admin,密碼 admin

控制皮膚

zipkin

鏈路跟蹤明細

zipkin

服務依賴關係

zipkin

RabbitMQ 監控

Docker 啟動訪問 http://localhost:15673/ 預設賬號 guest,密碼 guest(本地 rabbit 管理系統預設埠15672)

rabbit

介面測試

  1. 獲取 Token
curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "password=password&username=anil&grant_type=password&scope=read%20write"
複製程式碼

返回如下格式資料:

{
  "access_token": "eac56504-c4f0-4706-b72e-3dc3acdf45e9",
  "token_type": "bearer",
  "refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",
  "expires_in": 3599,
  "scope": "read write"
}
複製程式碼
  1. 使用 access token 訪問 service a 介面
curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svca
複製程式碼

返回如下資料:

svca-service (172.18.0.8:8080)===>name:zhangxd
svcb-service (172.18.0.2:8070)===>Say Hello
複製程式碼
  1. 使用 access token 訪問 service b 介面
curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svcb
複製程式碼

返回如下資料:

svcb-service (172.18.0.2:8070)===>Say Hello
複製程式碼
  1. 使用 refresh token 重新整理 token
curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "grant_type=refresh_token&refresh_token=da1007dc-683c-4309-965d-370b15aa4aeb"
複製程式碼

返回更新後的 Token:

{
  "access_token": "63ff57ce-f140-482e-ba7e-b6f29df35c88",
  "token_type": "bearer",
  "refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",
  "expires_in": 3599,
  "scope": "read write"
}
複製程式碼
  1. 重新整理配置
curl -X POST -vu user:password http://localhost:8888/bus/refresh
複製程式碼

原始碼下載

github.com/souyunku/sp…

Contact

  • 作者:鵬磊
  • 出處:www.ymq.io
  • Email:admin@souyunku.com
  • 版權歸作者所有,轉載請註明出處
  • Wechat:關注公眾號,搜雲庫,專注於開發技術的研究與知識分享

關注公眾號-搜雲庫
搜雲庫

相關文章