Springcloud系列-簡介
Springcloud系列-簡介
首先SpringCloud帶有“cloud”的字樣,但它並不是雲端計算解決方案,而是在SpringBoot的基礎上構建的,用於快速構建分散式系統的通用模式的工具集。 使用SpringCloud開發的應用程式非常適合在Docker或者Paas上部署,所以又叫做雲原生應用。 springCloud是基於SpringBoot的一整套實現微服務的框架。他提供了微服務開發所需的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等元件。SpringBoot旨在簡化建立產品級的Spring 應用和服務,簡化了配置檔案,使用嵌入式web伺服器,含有諸多開箱即用微服務功能。
什麼是微服務
微服務架構風格是一種將一個單一應用程式開發為一組小型服務的方法,每個服務執行在自己的程式中,服務間的通訊採用輕量級通訊機制(通常使用http資源api)。微服務架構應具備以下特徵:
- 每個微服務可獨立執行在自己的程式裡。
- 一系列獨立執行的微服務共同構建起整個系統
- 每個服務為獨立的業務開發,一個微服務只關注某個特定的功能
- 微服務之間通過一些輕量級的通訊機制進行通訊
- 可以使用不同的語言與資料儲存技術
- 全自動的部署機制
說到微服務,就不得不說一下當下的分散式與rpc:
-
分散式 SOA 分散式重要的就是面向服務,簡單點說就是把整個系統拆分成不同的服務,將這些服務放在不同的伺服器上減輕單體服務的壓力提高併發量和效能。比如電商系統可以簡單地拆分程訂單系統、商品系統、登陸系統等等,部署在不同機器上,如果某個服務訪問量比較大的話,還可以將這個服務同時部署在多臺機器上。
-
rpc RPC(Romote Procedure Call):遠端過程呼叫,允許一臺計算機程式遠端呼叫另外一臺計算機的子程式,不用關心底層網路通訊。 在socket基礎上實現,比socket需要更多資源。
基於分散式與RPC的介紹,其實我們今天所記錄的springCloud微服務就是分散式的一種,現在市場上比較火的還有dubbo (ApacheDubbo)可以通過以下圖片看看兩者之間的區別:
Dubbo:
Dubbo是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和Spring框架無縫整合。 Dubbo是一款高效能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。
節點 | 角色說明 |
---|---|
Provider | 暴露服務的服務提供方 |
Consumer | 呼叫遠端服務的服務消費方 |
Registry | 服務註冊與發現的註冊中心 |
Monitor | 統計服務的呼叫次數和呼叫時間的監控中心 |
Container | 服務執行容器 |
- 負載均衡 同一個服務部署在不同的機器時該呼叫哪一臺機器上的服務
- 服務呼叫鏈路生成: 隨著系統發展,服務越來越多,服務間依賴關係錯綜複雜,甚至分不清哪個應用要在哪個應用之前啟動,架構師都不能完整描述應用的架構關係。Dubbo 可以為我們解決服務之間互相是如何呼叫的。
- 服務訪問壓力以及時長統計、資源排程和治理: 基於訪問壓力實時管理叢集容量,提高叢集訪問率。
- 服務降級: 某個服務掛掉之後呼叫備用服務。
為什麼選用dubbo:
- 1.遠端通訊: 提供對多種基於長連線的NIO框架抽象封裝, 包括多種執行緒模型,序列化,以及“請求-響應”模式的資訊交換方式。
- 2.軟負載均衡及容錯機制: 提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,地址路由,動態配置等叢集支援。
- 可在內網替代F5等硬體負載均衡器,降低成本,減少單點。
- 3.服務自動註冊與發現: 基於註冊中心目錄服務,使服務消費方能動態的查詢服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器
- 4.提供完善的管理控制檯dubbo-admin與簡單的控制中心dubbo-monitor
- 5.Dubbo提供了伸縮性很好的外掛模型,很方便進行擴充套件(ExtensionLoader)
- 6.支援多協議
SpringCloud:
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方式的服務註冊和發現。
- Spring Cloud Stream:資料流操作開發包,封裝了與Redis,Rabbit、Kafka等傳送接收訊息。
- Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令列方式快速建立雲元件。
(以上這些元件在後續的章節中會陸續寫出來。)
由於SpringCloud是基於SpringBoot開發的,所以也具有以下特徵:
- 約定優於配置
- 開箱即用、快速啟動
- 適用於各種環境
- 輕量級的元件
- 元件支援豐富,功能齊全
二者區別:
SpringCloud是基於REST API的請求方式,而Dubbo是基於RPC的請求;SpringCloud的服務治理是使用Eureka來進行服務的註冊及發現,而Dubbo是使用Zookeeper來做服務治理。
總結: Dubbo和Spring Cloud並不是完全的競爭關係,兩者所解決的問題域不一樣:Dubbo的定位始終是一款RPC框架,而SpringCloud的目的是微服務架構下的一站式解決方案。 非要比較的話,Dubbo可以類比到Netflix OSS技術棧,而SpringCloud集成了Netflix OSS作為分散式服務治理解決方案,但除此之外SpringCloud還提供了包括config、stream、security、sleuth等分散式服務解決方案。 當前由於RPC協議、註冊中心元資料不匹配等問題,在面臨微服務基礎框架選型時Dubbo與SpringCloud只能二選一,這也是兩者總拿來做對比的原因。 Dubbo之後會積極尋求適配到SpringCloud生態,比如作為SpringCloud的二進位制通訊方案來發揮Dubbo的效能優勢,或者Dubbo通過模組化以及對http的支援適配到SpringCloud。
結束語:
本篇文章主要介紹微服務,分散式以及RPC相關的知識點,SpringCloud的各大元件會在後續的文章中陸續發出。