spring cloud詳解


spring cloud詳解

 

1、Spring boot與Spring cloud 之間的關系

Spring boot 是 Spring 的一套快速配置腳手架,可以基於spring boot 快速開發單個微服務 ​ Spring Cloud基於Spring Boot,為微服務體系開發中的架構問題,提供了一整套的解決方案——服務注冊與發現,服務消費,服務保護與熔斷,網關,分布式調用追蹤,分布式配置管理等。 ​ Spring Cloud是一個基於Spring Boot實現的雲應用開發工具; ​ Spring boot專注於快速、方便集成的單個個體,Spring Cloud是關注全局的服務治理框架; ​ spring boot使用了默認大於配置的理念,很多集成方案已經幫你選擇好了,能不配置就不配置, ​ Spring Cloud很大的一部分是基於Spring boot來實現。

服務的框架那么多比如:dubbo、Kubernetes,為什么就要使用Spring Cloud的呢?

  • 產出於spring大家族,spring在企業級開發框架中無人能敵,來頭很大,可以保證后續的更新、完善。比如dubbo現在就差不多死了(后面又卷土重來重新開始更新了)

  • 有spring Boot 這個獨立干將可以省很多事,大大小小的活spring boot都搞的挺不錯。(框架搭建快捷,幾分鍾就能跑起一個子項目,便於快捷開發。)

  • 作為一個微服務治理的大家伙,考慮的很全面,幾乎服務治理的方方面面都考慮到了,方便開發開箱即用。(一站式構建微服務,對於中小型公司有利,不需要花費大量人力機器實現負載均衡,熔斷等措施)

  • Spring Cloud 活躍度很高,教程很豐富,遇到問題很容易找到解決方案(源於Spring家族,用戶基數大,技術分享帖也多)

  • 輕輕松松幾行代碼就完成了熔斷、均衡負責、服務中心的各種平台功能(功能齊全)

Spring Cloud 也有一個缺點,只能使用Java開發,不適合小型獨立的項目。

通俗來說,SpringCloud就像是一體機,拿回來就可以用,不需要開發人員去深入了解各個功能(服務注冊(Eureka),API gateway(Zuul),熔斷器(Hystrix)等等),但是缺點就是如果某些功能想用其他框架代替,開發者可能要去研究一下其他框架與Spring Could 的整合(DIY 組裝電腦),需要了解其運行原理。

 

spring-cloud組件詳解

  1. Spring Cloud Config:配置管理開發工具包,可以讓你把配置放到遠程服務器,目前支持本地存儲、Git以及Subversion。

  2. Spring Cloud Bus:事件、消息總線,用於在集群(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。

  3. Spring Cloud Netflix:針對多種Netflix組件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

  4. Netflix Eureka:雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層服務器的故障 轉移。

  5. Netflix Hystrix:容錯管理工具,旨在通過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。

  6. Netflix Zuul:邊緣服務工具,是提供動態路由,監控,彈性,安全等的邊緣服務。

  7. Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調 機制等功能。

  8. Spring Cloud for Cloud Foundry:通過Oauth2協議綁定服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS 雲平台。

  9. Spring Cloud Sleuth:日志收集工具包,封裝了Dapper,Zipkin和HTrace操作。

  10. Spring Cloud Data Flow:大數據操作工具,通過命令行方式操作數據流。

  11. Spring Cloud Security:安全工具包,為你的應用程序添加安全控制,主要是指OAuth2。

  12. Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫集成。

  13. Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務注冊和發現。


 

項目架構的演變歷程

 
 
 
 
 
集中式架構
垂直拆分
分布式服務
SOA面向服務架構
微服務架構
 

2. 微服務架構說明

目標:了解SOA與微服務架構的區別以及說出微服務架構的特點

SOA使用了ESB組件的面向服務架構:ESB自身實現復雜;應用服務粒度較大,所有服務之間的通信都經過ESB會降低通信速度;部署、測試ESB比較麻煩。

微服務架構:是一套使用小服務或者單一業務來開發單個應用的方式或途徑。

微服務架構特點:

  • 單一職責

  • 服務粒度小

  • 面向服務(對外暴露REST api)

  • 服務之間相互獨立

與使用ESB的SOA架構的區別:微服務架構沒有使用ESB,有服務治理注冊中心;業務粒度小。

spring cloud 概述

Eureka注冊中心

Eureka的主要功能是進行服務管理,定期檢查服務狀態,返回服務地址列表。Eureka是服務注冊中心,只做服務注冊;自身並不提供服務也不消費服務。

 

  • 服務注冊:在服務提供工程user-service上添加Eureka客戶端依賴;自動將服務注冊到EurekaServer服務地址列表。

    • 添加依賴;

    • 改造啟動引導類;添加開啟Eureka客戶端發現的注解;

    • 修改配置文件;設置Eureka 服務地址

  • 服務發現:在服務消費工程consumer-demo上添加Eureka客戶端依賴;可以使用工具類根據服務名稱獲取對應的服務地址列表。

    • 添加依賴;

    • 改造啟動引導類;添加開啟Eureka客戶端發現的注解;

    • 修改配置文件;設置Eureka 服務地址;

    • 改造處理器類ConsumerController,可以使用工具類DiscoveryClient根據服務名稱獲取對應服務地址列表。

     

spring-cloud微服務總體流程

高可用配置**:

  • 將Eureka Server作為一個服務注冊到其它Eureka Server,這樣多個Eureka Server之間就能夠互相發現對方,同步服務,實現Eureka Server集群。

負載均衡Ribbon

  1. 負載均衡是一個算法,可以通過該算法實現從地址列表中獲取一個地址進行服務調用。

  2. Ribbon提供了輪詢、隨機兩種負載均衡算法(默認是輪詢)可以實現從地址列表中使用負載均衡算法獲取地址進行服務調用。

  3. 在實例化RestTemplate的時候使用@LoadBalanced,服務地址直接可以使用服務名。

熔斷器Hystrix

Hystrix是一個延遲和容錯庫,用於隔離訪問遠程服務,防止出現級聯失敗。

線程隔離

用戶請求不直接訪問服務,而是使用線程池中空閑的線程訪問服務,加速失敗判斷時間。

服務降級

及時返回服務調用失敗的結果,讓線程不因為等待服務而阻塞。

 

 

Feign應用

自動根據參數拼接http請求地址。

Feign負載均衡及熔斷

  • 負載均衡

  • 服務熔斷

  • 請求壓縮

  • 日志級別

Spring Cloud Gateway網關

Spring Cloud Gateway的核心就是一系列的過濾器,可以將客戶端的請求轉發到不同的微服務。主要作用:過濾和路由。

路由:

  1. 面向服務的路由;只需要在配置文件中指定路由路徑類似: `lb://user-service;;lb 之后編寫的服務名必須要在eureka中注冊才能使用

  2. 客戶端的請求地址與微服務的服務地址如果不一致的時候,可以通過配置路徑過濾器實現路徑前綴的添加和去除。

過濾器

  • 用法:在配置文件中指定要使用的過濾器名稱;

  • 類型:局部、全局;

  • 使用場景:請求鑒權、異常處理、記錄調用時長等。

Gateway網關一般直接給終端請求使用;Feign一般用在微服務之間調用。

Spring Cloud Config分布式配置中心

 

服務注冊中心yml配置

 server:
  port: 12000
 spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/goheima/heima-config.git
   # 配置rabbitmq信息;如果是都與默認值一致則不需要配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
 eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
 management:
  endpoints:
    web:
      exposure:
         # 暴露觸發消息總線的地址
        include: bus-refresh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM