什麼是SpringCloud

何爲微服務

在瞭解SpringCloud以前,咱們先來大體瞭解下微服務這個概念吧。web

傳統單體架構

單體架構在小微企業比較常見,典型表明就是一個應用、一個數據庫、一個web容器就能夠跑起來。redis

單體架構

能夠從上圖看出,單體架構基本上就是如上所說的:一個應用,一個數據庫,一個web容器,裏面集成了全部的功能。這在小型項目裏面時比較好維護的,畢竟功能很少,也不復雜,但擴展性和可靠性比較差,由於全部功能集成在一個服務或者一個war包中,修改某個功能時,須要全部服務從新打包。可能前期開發比較快,後期隨着功能的增加,交互的週期會越變越長的。算法

服務化架構

服務化架構,也能夠稱之爲SOA架構。spring

SOA表明面向服務的架構,將應用程序根據不一樣的職責劃分爲不一樣的模塊,不一樣的模塊直接經過特定的協議和接口進行交互。這樣使整個系統切分紅不少單個組件服務來完成請求,當流量過大時經過水平擴展相應的組件來支撐,全部的組件經過交互來知足總體的業務需求。數據庫

SOA服務化的優勢是,它能夠根據需求經過網絡對鬆散耦合的粗粒度應用組件進行分佈式部署、組合和使用。服務層是SOA的基礎,能夠直接被應用調用,從而有效控制系統中與軟件代理交互的人爲依賴性。編程

服務化架構是一套鬆耦合的架構,服務的拆分原則是服務內部高內聚,服務之間低耦合。後端

通常上咱們使用dubbo來進行服務的治理功能,沒有使用SpringCloud以前,基本上都是使用dubbo來拆分服務,進行服務間的調用。安全

看下服務化架構的架構圖:服務器

服務化架構

能夠發現從單體架構到服務化架構,應用數量都在不斷的增長,慢慢的下沉的就成了基礎組建,上浮的就成爲業務系統。從上述也能夠看出架構的本質就是不斷的拆分重構:分的過程是把系統拆分爲各個子系統/模塊/組件,拆的時候,首先要解決每一個組件的定位問題,而後才能劃分彼此的邊界,實現合理的拆分。合就是根據最終要求,把各個分離的組件有機整合在一塊兒。拆分的結果使開發人員可以作到業務聚焦、技能聚焦,實現開發敏捷,合的結果是系統變得柔性,能夠因需而變,實現業務敏捷。網絡

其實,我以爲最核心仍是邊界拆分。如何拆,拆的顆粒度要多細,就很考驗一個架構師對業務和底層技術的掌控程度。一個好的架構師,會讓整個系統邊界清晰,涇渭分明,功能沒有多少重疊的。(不知道什麼時候才能成長爲一名架構師(┬_┬))

微服務架構

簡單來講,微服務架構是 SOA 架構思想的一種擴展,更增強調服務個體的獨立性、拆分粒度更小。

下面這個圖,也是上次給公司內部培訓PPT上的,我以爲能夠能好的歸納出何爲微服務:

微服務框架

其實服務化架構已經能夠解決大部分企業的需求了,那麼咱們爲何要研究微服務呢?先說說它們的區別;

  • 微服務架構強調業務系統須要完全的組件化和服務化,一個組件就是一個產品,能夠獨立對外提供服務
  • 微服務再也不強調傳統SOA架構裏面比較重的ESB企業服務總線
  • 微服務強調每一個微服務都有本身獨立的運行空間,包括數據庫資源。
  • 微服務架構自己來源於互聯網的思路,所以組件對外發布的服務強調了採用HTTP Rest API的方式來進行
  • 微服務的切分粒度會更小

下面的這張圖,相信你們都應該看過,固然,這個圖只是一部分,你們有興趣能夠看看《一個典型的微服務架構》:

微服務

簡單來講,從圖中能夠看出,每個應用功能區都使用微服務完成,是相互獨立的,之間經過輕量級的通訊協議(Http)進行服務通訊,這樣的話,各個應用能夠按實際業務需求,選擇本身的技術棧和開發語言。

因此能夠看出,微服務的好處有:服務獨立、擴展性好、可靠性強,但同時,也面臨一些新的問題,好比運維複雜性,分佈式複雜性、監控複雜性等等。

什麼是SpringCloud

SpringCloud是基於SpringBoot的一整套實現微服務的框架。它提供了微服務開發所需的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等組件。最重要的是,基於SpringBoot,會讓開發微服務架構很是方便。

官網也給出了SpringCloud的定位和說明:

SpringCloud定位

SpringCloud說明

既然,自己SpringClud是一套框架,是個大管家。下圖列舉了一些比較核心的功能:

核心組件

自己SpringCloud包含了不少的組件,下面簡單列舉說明下:

核心組件

SpringCloudGateway

Spring Cloud GatewaySpring官方基於Spring 5.0Spring Boot 2.0Project Reactor等技術開發的網關,Spring Cloud Gateway旨在爲微服務架構提供一種簡單而有效的統一的API路由管理方式。Spring Cloud Gateway做爲Spring Cloud生態系中的網關,目標是替代Netflix ZUUL其不只提供統一的路由方式,而且基於Filter鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等

SpringCloudNetflix

這但是個大boss,地位僅次於老大,老大各項服務依賴與它,與各類Netflix OSS組件集成,組成微服務的核心,它的小弟主要有EurekaHystrixZuul… 太多了

Netflix Eureka

服務中心,雲端服務發現,一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。服務中心,任何小弟須要其它小弟支持什麼都須要從這裏來拿,一樣的你有什麼獨門武功的都趕忙過報道,方便之後其它小弟來調用;它的好處是你不須要直接找各類什麼小弟支持,只須要到服務中心來領取,也不須要知道提供支持的其它小弟在哪裏,仍是幾個小弟來支持的,反正拿來用就行,服務中心來保證穩定性和質量。

Netflix Hystrix

熔斷器,容錯管理工具,旨在經過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。好比忽然某個小弟生病了,可是你還須要它的支持,而後調用以後它半天沒有響應,你殊不知道,一直在等等這個響應;有可能別的小弟也正在調用你的武功絕技,那麼當請求多以後,就會發生嚴重的阻塞影響老大的總體計劃。這個時候Hystrix就派上用場了,當Hystrix發現某個小弟不在狀態不穩定立馬立刻讓它下線,讓其它小弟來頂上來,或者給你說不用等了這個小弟今天確定不行,該幹嗎趕忙幹嗎去別在這排隊了。

Netflix Zuul

Zuul是在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 至關因而設備和Netflix流應用的 Web 網站後端全部請求的前門。當其它門派來找大哥辦事的時候必定要先通過zuul,看下有沒有帶刀子什麼的給攔截回去,或者是須要找那個小弟的直接給帶過去。

SpringCloudConfig

俗稱的配置中心,配置管理工具包,讓你能夠把配置放到遠程服務器,集中化管理集羣配置,目前支持本地存儲、Git以及Subversion。就是之後你們武器、槍火什麼的東西都集中放到一塊兒,別隨便本身帶,方便之後統一管理、升級裝備。

SpringCloudBus

事件、消息總線,用於在集羣(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。至關於水滸傳中日行八百里的神行太保戴宗,確保各個小弟之間消息保持暢通。

SpringCloudforCloudFoundry

Cloud Foundry是VMware推出的業界第一個開源PaaS雲平臺,它支持多種框架、語言、運行時環境、雲平臺及應用服務,使開發人員可以在幾秒鐘內進行應用程序的部署和擴展,無需擔憂任何基礎架構的問題

其實就是與CloudFoundry進行集成的一套解決方案,抱了Cloud Foundry的大腿。

SpringCloudCluster

Spring Cloud Cluster將取代Spring Integration。提供在分佈式系統中的集羣所須要的基礎功能支持,如:選舉、集羣的狀態一致性、全局鎖、tokens等常見狀態模式的抽象和實現。

若是把不一樣的幫派組織成統一的總體,Spring Cloud Cluster已經幫你提供了不少方便組織成統一的工具。

SpringCloudConsul

Consul是一個支持多數據中心分佈式高可用的服務發現和配置共享的服務軟件,由 HashiCorp 公司用 Go 語言開發, 基於 Mozilla Public License 2.0 的協議進行開源. Consul 支持健康檢查,並容許 HTTP 和 DNS 協議調用 API 存儲鍵值對.

Spring Cloud Consul封裝了Consul操做,consul是一個服務發現與配置工具,與Docker容器能夠無縫集成。

以後的文章,也基本上是講解這些組件的使用了。

其餘組件

固然,除了以上列舉的,還有好比Spring Cloud SecuritySpring Cloud SleuthSpring Cloud Data FlowSpring Cloud StreamSpring Cloud Zookeeper等等。

Spring Cloud Security

基於spring security的安全工具包,爲你的應用程序添加安全控制。這個小弟很牛鼻專門負責整個幫派的安全問題,設置不一樣的門派訪問特定的資源,不能把祕籍葵花寶典泄漏了。

Spring Cloud Sleuth

日誌收集工具包,封裝了Dapperlog-based追蹤以及ZipkinHTrace操做,爲SpringCloud應用實現了一種分佈式追蹤解決方案。

Spring Cloud Data Flow

  • Data flow 是一個用於開發和執行大範圍數據處理其模式包括ETL,批量運算和持續運算的統一編程模型和託管服務。

  • 對於在現代運行環境中可組合的微服務程序來講,Spring Cloud data flow是一個原生雲可編配的服務。使用Spring Cloud data flow,開發者能夠爲像數據抽取,實時分析,和數據導入/導出這種常見用例建立和編配數據通道 (data pipelines)。

  • Spring Cloud data flow 是基於原生雲對 spring XD的從新設計,該項目目標是簡化大數據應用的開發。Spring XD 的流處理和批處理模塊的重構分別是基於 Spring Boot的stream 和 task/batch 的微服務程序。這些程序如今都是自動部署單元並且他們原生的支持像 Cloud Foundry、Apache YARN、Apache Mesos和Kubernetes 等現代運行環境。

  • Spring Cloud data flow 爲基於微服務的分佈式流處理和批處理數據通道提供了一系列模型和最佳實踐。

Spring Cloud Stream

Spring Cloud Stream是建立消息驅動微服務應用的框架。Spring Cloud Stream是基於Spring Boot建立,用來創建單獨的/工業級spring應用,使用spring integration提供與消息代理之間的鏈接。數據流操做開發包,封裝了與Redis,RabbitKafka等發送接收消息。

一個業務會牽扯到多個任務,任務之間是經過事件觸發的,這就是Spring Cloud stream要乾的事了

Spring Cloud Task

Spring Cloud Task主要解決短命微服務的任務管理,任務調度的工做,好比說某些定時任務晚上就跑一次,或者某項數據分析臨時就跑幾回。

Spring Cloud Zookeeper

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是GoogleChubby一個開源的實現,是HadoopHbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

操做Zookeeper的工具包,用於使用zookeeper方式的服務發現和配置管理,抱了Zookeeper的大腿。

Spring Cloud Connectors

Spring Cloud Connectors簡化了鏈接到服務的過程和從雲平臺獲取操做的過程,有很強的擴展性,能夠利用Spring Cloud Connectors來構建你本身的雲平臺。

便於雲端應用程序在各類PaaS平臺鏈接到後端,如:數據庫和消息代理服務。

Spring Cloud CLI

基於Spring Boot CLI,可讓你以命令行方式快速創建雲組件。

題外話:這麼多組件,目前用到的還比較少的⊙﹏⊙‖∣。經常使用的仍是Netflix的全家桶。學習之路,路漫漫其修遠兮!

爲什麼選擇SpringCloud

微服務的框架那麼多好比:dubbo,爲何就要使用Spring Cloud的呢?

  • 產出於spring你們族,spring在企業級開發框架中無人能敵,來頭很大,能夠保證後續的更新、完善。

題外話:年初的時候,Dubbo又開始瘋狂更新了,並且還成爲Apache基金會孵化項目。但願愈來愈好把,畢竟以前的坑比較多,還但願能儘快修復。

  • 有Spring Boot 這個獨立干將能夠省不少事,大大小小的活Spring Boot都搞的挺不錯。
  • 做爲一個微服務治理的你們夥,考慮的很全面,幾乎服務治理的方方面面都考慮到了,方便開發開箱即用。
  • Spring Cloud 活躍度很高,教程很豐富,遇到問題很容易找到解決方案
  • 輕輕鬆鬆幾行代碼就完成了熔斷、均衡負責、服務中心的各類平臺功能.

爲什麼選擇SpringCloud

與Dubbo對比

作一個簡單的功能對比:

核心要素 Dubbo Spring Cloud
服務註冊中心 Zookeeper Spring Cloud Netflix Eureka
服務調用方式 RPC REST API
服務監控 Dubbo-monitor Spring Boot Admin
斷路器 不完善 Spring Cloud Netflix Hystrix
服務網關 Spring Cloud Netflix Zuul
分佈式配置 Spring Cloud Config
服務跟蹤 Spring Cloud Sleuth
消息總線 Spring Cloud Bus
數據流 Spring Cloud Stream
批量任務 Spring Cloud Task
…… …… ……

從上圖能夠看出其實Dubbo的功能只是Spring Cloud體系的一部分。

這樣對比是不夠公平的,首先DubboSOA時代的產物,它的關注點主要在於服務的調用,流量分發、流量監控和熔斷。而Spring Cloud誕生於微服務架構時代,考慮的是微服務治理的方方面面,另外因爲依託了SpirngSpirng Boot的優點之上,兩個框架在開始目標就不一致,Dubbo定位服務治理、Spirng Cloud是一個生態。

若是僅僅關注於服務治理的這個層面,Dubbo其實還優於Spring Cloud不少:

  • Dubbo 支持更多的協議,如:rmi、hessian、http、webservice、thrift、memcached、redis 等。
  • Dubbo 使用 RPC 協議效率更高,在極端壓力測試下,Dubbo 的效率會高於 Spring Cloud 效率一倍多。
  • Dubbo 有更強大的後臺管理,Dubbo 提供的後臺管理 Dubbo Admin 功能強大,提供了路由規則、動態配置、訪問控制、權重調節、均衡負載等諸多強大的功能。
  • 能夠限制某個 IP 流量的訪問權限,設置不一樣服務器分發不一樣的流量權重,而且支持多種算法,利用這些功能咱們能夠在線上作灰度發佈、故障轉移等。

題外話:可經過dubbo-monitordubbo-admin進行監控和管理相關配置。這兩個項目自己仍是不錯的。本想截個圖,看了下電腦沒有安裝。⊙﹏⊙‖∣

因此Dubbo專一於服務治理;Spring Cloud關注於微服務架構生態。

SpringCloud版本說明

Spring Cloud項目目前仍然是快速迭代期,版本變化很快。 Spring Cloud並無熟悉的數字版本號,而是對應一個開發代號。

本系列教程使用的都是Finchley SR1版本,基於Spring Boot 2.0.3

官網給出了目前各版本對應組件的版本信息:

Component Edgware.SR4 Finchley.SR1 Finchley.BUILD-SNAPSHOT
spring-cloud-aws 1.2.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-bus 1.3.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-cli 1.4.1.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-commons 1.3.4.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-contract 1.2.5.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-config 1.4.4.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-netflix 1.4.5.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-security 1.2.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-cloudfoundry 1.1.2.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-consul 1.3.4.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-sleuth 1.3.4.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-stream Ditmars.SR4 Elmhurst.SR1 Elmhurst.BUILD-SNAPSHOT
spring-cloud-zookeeper 1.2.2.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-boot 1.5.14.RELEASE 2.0.4.RELEASE 2.0.4.BUILD-SNAPSHOT
spring-cloud-task 1.2.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-vault 1.1.1.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-gateway 1.0.2.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-openfeign 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT  
spring-cloud-function 1.0.0.RELEASE 1.0.0.RELEASE 1.0.1.BUILD-SNAPSHOT

簡單說明:

  • 規律,但實際上首字母是有順序的,好比:Dalston版本,咱們能夠簡稱D版本,對應的Edgware版本咱們能夠簡稱E版本,目前最新的Finchley就是所說的F版本。

  • SpringCloud E版 對應 SpringBoot 1.5.x
  • SpringCloud F版 對應 SpringBoot 2.x

小版本:

  • SNAPSHOT: 快照版本,隨時可能修改。
  • SRx: Service Release,SR1表示第1個正式版本,通常同時標註GA:(GenerallyAvailable),表示穩定版本。

同時,注意官網的一句話:

Finchley builds and works with Spring Boot 2.0.x, and is not expected to work with Spring Boot 1.5.x

因此,寫此係列教程,順道能夠把SpringBoot2新增的相關知識點也能夠學習瞭解下。後續SpringBoot2的知識點會在SpringBoot系列文章中更新!

總結

本文大部份內容是在上次編寫培訓ppt時後找的相關材料,理論的東西有點多了。真的仍是代碼簡單點,是一就是一,很純粹。正是如Linus大神說的:Talk is cheap. Show me the code。翻譯成咱們博大精深的漢語就是:空談誤國,碼不出何以論天下。哈哈。最後仍是但願能經過此係列,能提高本身對SpringCloud的認識吧,同時也但願能讓未接觸過SpringCloud的同窗,經過此係列教程,能簡單的使用各組件。

相關文章
相關標籤/搜索