SpringCloud微服務架構篇3:Spring Cloud簡介

2020-11-29 新手java開發

微服務架構的核心關鍵點

1、微服務的服務治理

服務治理(服務註冊及服務發現),通過服務發現,消費者可以在預先不知道服務提供者物理地址的情況下,僅通過相應的服務名稱就可以實現服務調用。服務註冊機制,可以讓服務提供者在上線時將所提供的服務信息註冊到服務治理伺服器中,供服務消費者使用。當服務下線時將自己從服務治理伺服器中註銷,避免服務消費者調用而造成的異常。

2、微服務的負載均衡

客戶端負載均衡,也稱為軟負載均衡,指在服務消費者保存有一份服務者列表,這份服務者列表通常是從服務治理伺服器中動態獲取,也可以採用股東配置方式,然後通過某種負載均衡策略來決定每次服務調用時所使用的具體服務實例,從而實現微服務之間的負載均衡。

3、微服務的統一入口

API服務網關就是為微服務提供了一個統一入口,並能夠附加一些路由規則,使得不同的微服務通過路由規則提供一致的訪問入口。

4、微服務的容錯

微服務架構的容錯提出了斷路器、服務降級等模式,這些模式都可以有效防止微服務調用失敗而引起的連鎖反應,並且在必要時可以通過這些模式主動實施應用的降級處理,從而保證核心業務的正常運行。

5、微服務的統一配置

對微服務架構中,數十個、上百個實例,統一對配置進行管理和發布更新。

6、微服務的監控

日誌多由服務實力自己管理,如何將分散在多個日誌之間的調用串聯起來,形成一個完整的請求調用鏈。微服務監控中提供了日誌聚合、日誌可視化分析、調用鏈跟蹤等。

7、微服務的部署

通過構建-發布管道來構建自動化發布流程,可以通過Docker工具快速部署,通過k8s來構建自動化部署編排等。

Spring Cloud技術

SpringCloud使用Spring Boot風格將比較成熟的微服務框架組合起來,屏蔽掉了複雜的配置和實現原理,為快速構建微服務架構的應用提供了一套設施工具和開發支持。

所提供的基礎設置,如服務發現、客戶端負載均衡、API網關、微服務容錯、統一配置中心、消息總線及微服務調用監控等,都可以做到一鍵啟動和部署。

Spring Cloud所提供的核心功能包含:

基於Netfilix實現服務治理、客戶端負載均衡和聲明式調用;服務網關微服務容錯管理整合消息中間件提供消息驅動式開發基於Spring Security提供微服務安全、單點登錄功能分布式、版本化的統一配置管理微服務調用鏈及追蹤管理Spring Cloud子項目

對於Spring Cloud旗下的子項目大致可以分為兩類:一類是對現有成熟的第三方開源項目Spring Boot化,進行封裝集成,使得我們基於Spring的開發非常容易集成和使用。第二類是新增一些微服務架構開發所需的基礎設置,如Spring Cloud Config提供了統一配置中心、Spring Clound Stream則充當了與Kafka、RabbitMQ等消息中間件快速集成的橋梁。

1、Spring Clound與Spring Boot

Spring Boot可以說是微服務架構的核心技術之一,快速啟動,通過Spring Boot應用中添加Spring MVC依賴,就可以快速實現基於REST架構的服務接口,並且可以提供堆HTTP標準動作的支持。而且Spring Boot默認提供JackJson序列化支持,可以讓服務接口輸入、輸出支持JSON。當使用Spring Cloud進行微服務架構開發時,必須要Spring Boot。

2、Spring Cloud與服務治理

服務治理是Spring Cloud的核心,在實現上提供了連個選擇,即Consul和Netflix的Eureka。

Eureka提供了服務註冊中心、服務發現客戶端,以及註冊服務的UI界面應用。在Eureka的實現中,節點之間相互平等,有部分註冊中心「掛掉」也不會對整個應用造成影響,即使集群只剩下一個節點存活,也可以正常地治理服務。即使所有服務註冊節點都宕機,Eureka客戶端中所緩存的服務實例列表信息,也可讓服務消費能夠正常工作,從而保障微服務之間互相調用的健壯性和應用的彈性。

3、Spring Cloud與客戶端負載均衡

Ribbon默認與Eureka進行無縫整合,當客戶端啟動的時候,從Eureka伺服器中獲取一份服務註冊列表並維護在本地,當服務消費者需要調用時,Ribbon就會根據負載均衡策略選擇一個合適的服務提供者實例並進行訪問。

通過在微服務調用時通過RestTemplate進行調用,這時需要開發者處理參數、調用路徑等,Spring Cloud通過集成Netflix的Feign項目,為開發者提供了聲明式服務調用,從而簡化了微服務之間的調用處理方式。並且默認Feigin項目集成了Ribbon,使得聲明式調用也支持客戶端負載均衡功能。

4、Spring Cloud與微服務容錯、降級

微服務容錯、降級旨在為微服務架構提供更大的彈性,通過Hystrix提供的@HystrixCommand註解可以輕鬆為我們所開發的微服務提供容錯、回退、降級等功能。另外,Hystrix也默認集成到Fegin子項目中。

Hystrix是根據「斷路器」模式而創建。當Hystrix監控到某服務單元發生故障之後,就會進入服務熔斷處理,並向調用方返回一個符合預期的服務降級處理(fallback),而不是長時間的等待或者拋出調用異常,從而保障服務調用方的線程不會被長時間、不必要地佔用,避免故障在應用中的蔓延造成的雪崩效應。

而Hystrix的儀錶盤項目(Dasgboard)可以監控各個服務調用所消耗的時間、請求數、成功率等。通過這種近乎實時的監控和告警,可以及時發現系統中潛在問題並進行處理。

5、Spring Clond與服務網關

Spring Cloud通過集成Netflix中的Zuul實現API服務網關功能,提供對請求的路由和過濾兩個功能,其中路由功能負責將外部請求轉發到具體的微服務實例上,是實現外部訪問統一入口的基礎。過濾器功能則負責對請求的處理過程進行幹預,是實現請求校驗、服務聚合等功能的基礎。通過Zuul,可以將細粒度的服務組合起來提供一個粗粒度的服務,所有請求都導入一個統一的入口,對外整個服務只需要暴露一個API藉口,屏蔽了服務端的實現細節。通過Zuul的反向代理功能,可以實現路由尋址,將請求轉發到後端的粗粒度服務上,並做一些通用的邏輯處理。

Zuul默認會與Eureka伺服器進行整合,自動從Eureka伺服器中獲取所有註冊的服務並進行路由映射,實現API服務網關自動配置。

6、Spring Cloud與消息中間件

Spring Cloud提供了Stream項目,通過建立消息應用抽象層,構建了消息收發、分組消費和消息分片等功能處理,將業務應用中的消息收發與具體消息中間件進行解耦,使微服務應用開發中可以非常方便地與Kafka和RabbitMQ等消息中間件進行集成。

此外,Spring Cloud Bus基於Stream進行擴展,可以作為微服務之間的事件、消息總線,用於服務集群中狀態變化的傳播,比如Spring Cloud Config藉助Bus,可以實現配置的動態刷新處理。

7、Spring Cloud與分布式配置中心

Spring Cloud Config具有中心化、版本控制、支持動態更新和語言獨立等特性。在Config子項目中將微服務應用分為兩種角色:配置伺服器(Config Server)和配置客戶端(Config Client)。使用配置伺服器集中地管理所有配置屬性文件,配置服務中心可以將配置屬性文件存儲到Git、SVN等具有版本管理倉庫中,也可以存放在文件系統中。默認採用Git的方式進行存儲,因此可以很容易地對配置文件進行修改,並實現版本控制。

8、Spring Cloud與微服務鏈路追蹤

Sleuth核心思想就是通過一個全局的ID將分布在各微服務結點上的請求處理串聯起來,還原了調用關係,並藉助數據埋點,實現對微服務調用鏈路上的性能數據的採集。因此,通過Sleuth可以很清楚地了解到一個用戶請求經過了哪些服務、每個服務處理花費了多長時間,從而可以對用戶的請求進行分析。

此外,通過將採集的數據發送給Zipkin進行存儲、統計和分析,從而可以實現可視化的分析和展示,幫助開發者對微服務實施優化處理。

9、Spring Cloud與微服務安全

Spring Cloud Security提供了一個認證和鑑權的安全框架,實現了資源授權、令牌管理等功能,同時結合了Zuul可以將認證信息在微服務調用過程中直接傳遞,簡化了我們進行安全管控的開發。此外,因為Spring Cloud Security默認支持OAuth 2.0認證協議,因此單點登錄也可以非常容易實現,並且OAuth 2.0所生成的令牌可以使用JWT的方式,進一步簡化了微服務中的安全管理。

10、Spring Cloud其他子項目

Spring Cloud Cli:提供了以命令行和腳本的方式來管理微服務。Spring Cloud Data Flow:一個用於開發、執行大數據處理的統一編程模型和託管服務。其基於原生雲,並重新對Spring XD進行設計,簡化了大數據應用的開發,為基於微服務的分布式流處理和批處理數據通道提供了一系列模型和最佳實踐。Spring Cloud Task:用於短時的任務管理和調度微服務管理,通過與Data Flow一起使用。Spring Cloud Starters:類似於Spring Boot的啟動項目,為基於Spring Cloud的微服務開發提供開箱即用的依賴管理Spring Cloud Contract:面向Java的契約框架,消費者驅動的,旨在幫助開發者完成微服務測試的子項目。Spring Cloud優點

Spring Cloud作為Spring Boot的傳承,遵循約定優於配置的原則,在使用時不需要複雜的配置就可以運行起來,學習曲線低。Spring Cloud中大部分子項目開箱即用,採用自動化配置機制,使用門檻低。Spring Cloud屬於Spring大家族,Spring是進行企業級開發的首選框架,因此在項目中引入Spring Cloud的技術成本低。Spring Cloud的口號就是開發「面向雲環境的應用程式」,通過集成成熟的第三方開源組件,為微服務架構的開發提供了全方位的支持,並且在Spring系列下後續的更新、完善都有保障。Spring Cloud拋棄了傳統的RPC通信,採用了基於HTTP的REST方式,使得微服務接口更為靈活,服務提供者和消費者之間的依賴只需要連接即可,而不存在代碼級別的強依賴,這對快速演化的微服務架構更合適。Spring Cloud並沒有限制所使用的環境,可以與異構系統進行整合。同時對於所提供的各組件服務即可單獨部署,又可集中部署,方便了運維和管理。

相關焦點

  • SpringCloud微服務架構篇7:Config配置資源庫及加解密
    {label}:對應配置服務端鎖配置的spring.cloud.config.label。配置伺服器根絕客戶端的請求參數、以及配置文件中鎖配置的標籤(spring.cloud.config.label),從git倉庫中按照上述規則去查找服務的配置文件。配置伺服器將匹配到的git倉庫拉取到本地,並建立本地緩存。
  • Spring Cloud 中 Zuul 網關到底有何牛逼之處?竟然這麼多人在用!
    Zuul是spring cloud中的微服務網關。網關:是一個網絡整體系統中的前置門戶入口。請求首先通過網關,進行路徑的路由,定位到具體的服務節點上。Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka註冊中心中進行服務的註冊和發現。也是一個網關,請求應該通過Zuul來進行路由。Zuul網關不是必要的。是推薦使用的。
  • 如何使用SpringCloud進行灰度發布
    將分一下四步:第一,設置網關權重路由設置Spring Cloud Gateway中提供了org.springframework.cloud.gateway.handler.predicate.WeightRoutePredicateFactory去實現根據分組設置權重進行路由,因此使用起來相對比較簡單,有興趣的可以debug閱讀源碼。
  • Spring Cloud系列各子項目在微服務架構中的作用分析
    Springcloud一般用於搭建微服務項目,那麼微服務項目是怎麼工作的呢?Springcloud的幾個子項目分別扮演什麼角色?網關:Spring Cloud Netflix Zuul / Spring Cloud Gateway微服務開發要把一整個系統不同模塊分成不同的服務項目,每個服務都有自己的調用地址埠信息,那麼前端用戶怎麼調用呢?總不能把所有服務的接口地址給前端吧。
  • SpringCloud搭建-ConfigClient調用配置中心
    我們以測試服務為例:添加依賴在測試服務的pom.xml中引入以下依賴:<dependency><groupId>org.springframework.cloud</groupId>
  • 微服務這麼流行,你理解嘛?
    在前一段時間,我們實驗室的項目開始變得越來越麻煩,代碼也越來越臃腫,一個人兼顧前後端的全棧開發,實在是力不從心,沒有一點點幸福感,於是迫切的想要解放生產力,放飛自我,因此開始決定重構項目,改用之前學習過但是一直沒用過的微服務架構。這篇文章將從以下幾個角度來學習Springcloud入門的一些相關知識。1、微服務是什麼?
  • 2021升級版微服務教程—為什麼會有微服務?什麼是SpringCloud?
    3.讀寫分離image-20200317145753793 上述的架構看上去非常的完美,但是,隨著並夕夕商城業務量的不斷增加,新的問題暴露了出來。問題:商品搜索使用資料庫模糊查詢不行,不精確,慢 【全文檢索】圖書查詢 模糊匹配不同模塊的數據訪問的頻率是不一樣的(熱度不同),首頁數據訪問量比較大,訂單數據的訪問量相比之下要小很多。
  • 20道你必須要背會的微服務面試題,面試一定會被問到
    寫在前面:在學習springcloud之前大家一定要先了解下,常見的面試題有那塊,然後我們帶著問題去學習這個微服務技術,那麼就會更加理解springcloud技術。如果你已經學了springcloud,那麼在準備面試的時候,一定要看看看這些面試題。
  • 微服務架構技術棧
    一、前言2014 年可以認為是微服務 1.0 的元年,當年有幾個標誌性事件:一是 Martin Fowler 在其博客上發表了」Microservices」一文,正式提出微服務架構風格;二是 Netflix 微服務架構經過多年大規模生產驗證,最終抽象落地形成一整套開源的微服務基礎組件,統稱 NetflixOSS,Netflix 的成功經驗開始被業界認可並推崇
  • Spring Boot Admin快速打造監控平臺
    提供的功能,將各個微服務的狀態整合到一起,並提供良好的界面查看支持,並且能夠動態的修改實例日誌級別。Spring Boot Admin 開源地址:https://github.com/codecentric/spring-boot-adminSpring Boot Admin分為server和client,使用非常方便,server端可查看各個微服務的狀態,client端將微服務註冊到server端。
  • 微服務,Java目前很火熱的系統架構
    學習內容安排如下: 系統架構的演化:集中式架構、分布式架構。當然系統架構肯定不是說我一篇文章就能學好的,只能說我作為一名初學者,是如何去理解這些概念的。至於想要真正地去弄懂這些,需要自己長期性地不斷學習,非一朝一夕就能學完的。一、系統架構概述技術更新是非常快的,從單一應用到垂直細分,到分布式,到SOA,以及微服務架構。
  • 來一個《春夜喜雨》的英文版(Happy Rain on a Spring Night)
    英譯文: Good rain knows its time right,It will fall when comes spring.With wind it steals in night,Mute, it moistens each thing.現譯文:好雨似乎會挑選時辰,降臨在萬物萌生之春。伴隨和風,悄悄進入夜幕。
  • 架構大遷移:從Java Spring到ReactJS +API微服務架構
    面對著這樣的窘境,你能做的,而且唯一需要做的就是對其重構,重新開發一個全新架構的,高性能的,流行的系統。本文中蟲蟲給大家介紹實例Java平臺重構的方法,將Java Spring開發的系統遷移到ReactJS+API的微服務架構。基礎梳理為什麼要重構平臺架構?
  • restful微服務風格_restful 風格的微服務架構 - CSDN
    本文整理了 spring boot + jpa+mysql+redis +swagger+yml等技術,實現了微服務restFul 風格的demo,下載即運行[http://localhost:8080/
  • Cloud - Cloud: 產生不利影響
    動詞cloud 的本意是「遮蔽,被雲覆蓋,使變朦朧」,例如:Mist clouded the hills.(霧遮住了山丘。)上文中體現了cloud的比喻義「使陷入麻煩,產生不利影響,玷汙」,例如:cloud the issues(混淆爭端);Scandal clouded the officer's reputation.(醜聞玷汙了官員的聲望。)
  • 「spring water」是指泉水,那「spring back」是指什麼呢?
    難道是「春天回來了」,不,這裡的spring不能做「春天」解釋,應該是動詞「回彈;跳回;恢復原狀」的意思。所以spring back意思是「恢復健康」。例句:It's not as easy to spring back from injury when you get older.等你變老,想從傷痛中恢復過來可就沒那麼容易了。
  • 春天的詩之英文篇十首 Poems About Spring in English
    A strain of the earth’s sweet being in the beginningIn Eden garden. – Have, get, before it cloy,Before it cloud, Christ, lord, and sour with sinning,
  • cloud是雲,nine是九,那be on cloud nine是什麼意思?
    我們知道cloud有「雲,雲朵」的意思,nine是數字九,那be on cloud nine是什麼意思呢?be on cloud nine的意思是「to be extremely happy and excited」,即「異常興奮,樂不可支,高興極了」。這句習語最開始是指美國氣象局在20世紀50年代定義的雲的一種分類。據說,這種雲通常指積雨雲或雷雨。它常常高達四萬英尺。
  • Spring Boot 示例的@RestController 和 @RequestMapping註解
    Spring 有多個類型的註解,例如在包 org.springframework.context.annotation 和 org.springframework.stereotype 的註解。設計 @RestController 的目的主要也是為了針對目前越來越流行的微服務和 Rest API 的開發來設計的。@RestController 和 @RequestMapping 註解都是 Spring MVC 中的註解(這 2 個註解是沒有在 Spring Boot 中指定的)。 請參考 Spring 參考文檔中的 MVC 部分 來獲得更多的有關信息。
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    創建下面一個pojo看看spring都有哪些功能Sping有一個功能就是幫我們創建pojo對象實例,下面我麼需要在applicationContext.xml中將pojo配置為bean,註冊到spring