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組件詳解
-
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方式的服務注冊和發現。
項目架構的演變歷程
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
-
負載均衡是一個算法,可以通過該算法實現從地址列表中獲取一個地址進行服務調用。
-
Ribbon提供了輪詢、隨機兩種負載均衡算法(默認是輪詢)可以實現從地址列表中使用負載均衡算法獲取地址進行服務調用。
-
在實例化RestTemplate的時候使用@LoadBalanced,服務地址直接可以使用服務名。
熔斷器Hystrix
Hystrix是一個延遲和容錯庫,用於隔離訪問遠程服務,防止出現級聯失敗。
線程隔離
用戶請求不直接訪問服務,而是使用線程池中空閑的線程訪問服務,加速失敗判斷時間。
服務降級
及時返回服務調用失敗的結果,讓線程不因為等待服務而阻塞。
Feign應用
自動根據參數拼接http請求地址。
Feign負載均衡及熔斷
-
負載均衡
-
服務熔斷
-
請求壓縮
-
日志級別
Spring Cloud Gateway網關
Spring Cloud Gateway的核心就是一系列的過濾器,可以將客戶端的請求轉發到不同的微服務。主要作用:過濾和路由。
路由:
-
面向服務的路由;只需要在配置文件中指定路由路徑類似: `lb://user-service;;lb 之后編寫的服務名必須要在eureka中注冊才能使用
-
客戶端的請求地址與微服務的服務地址如果不一致的時候,可以通過配置路徑過濾器實現路徑前綴的添加和去除。
-
用法:在配置文件中指定要使用的過濾器名稱;
-
類型:局部、全局;
-
使用場景:請求鑒權、異常處理、記錄調用時長等。
Gateway網關一般直接給終端請求使用;Feign一般用在微服務之間調用。
Spring Cloud Config分布式配置中心
服務注冊中心yml配置
server