1. 程式人生 > >Spring Cloud(5)---基於 Spring Cloud 完整的微服務架構實戰

Spring Cloud(5)---基於 Spring Cloud 完整的微服務架構實戰

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

技術棧

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

體系架構

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

應用元件

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

啟動專案

使用 Docker 快速啟動

配置 Docker 環境

mvn clean package 打包專案及 Docker 映象

在專案根目錄下執行 docker-compose up -d 啟動所有專案

本地手動啟動

配置 rabbitmq

修改 hosts 將主機名指向到本地

127.0.0.1 registry config monitor rabbitmq auth-service

或者修改各服務配置檔案中的相應主機名為本地 ip

啟動 registry、config、monitor、zipkin

啟動 gateway、auth-service、svca-service、svcb-service

專案預覽

註冊中心

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

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

監控

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

控制面板

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

應用註冊歷史

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

Turbine Hystrix面板

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

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

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

計數器

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

檢視和修改環境變數

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

管理 Logback 日誌級別

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

檢視並使用 JMX

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

檢視執行緒

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

認證歷史

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

檢視 Http 請求軌跡

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

Hystrix 面板

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

鏈路跟蹤

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

控制面板

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

鏈路跟蹤明細

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

服務依賴關係

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

RabbitMQ 監控

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

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

介面測試

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"
 }

2.使用 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
3.使用 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
4.使用 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"
 }

5.重新整理配置

curl -X POST -vu user:password http://localhost:8888/bus/refresh