springCloud生態(tài)圈簡介

一、簡介

Spring Cloud 為開發(fā)者提供了在分布式系統(tǒng)(配置管理,服務(wù)發(fā)現(xiàn),熔斷,路由,微代理,控制總線,一次性token,全居瑣,leader選舉,分布式session,集群狀態(tài))中快速構(gòu)建的工具,使用Spring Cloud的開發(fā)者可以快速的啟動服務(wù)或構(gòu)建應(yīng)用、同時能夠快速和云平臺資源進行對接。

Spring Cloud Config配置中心

Spring Cloud Config就是我們通常意義上的配置中心。Spring Cloud Config-把應(yīng)用原本放在本地文件的配置抽取出來放在中心服務(wù)器,本質(zhì)是配置信息從本地遷移到云端。從而能夠提供更好的管理、發(fā)布能力。

Spring Cloud Config分服務(wù)端和客戶端,服務(wù)端負責(zé)將git(svn)中存儲的配置文件發(fā)布成REST接口,客戶端可以從服務(wù)端REST接口獲取配置。但客戶端并不能主動感知到配置的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發(fā)各自的/refresh。

Spring Cloud Netflix 服務(wù)發(fā)現(xiàn)

Spring Cloud Eureka提供在分布式環(huán)境下的服務(wù)發(fā)現(xiàn),服務(wù)注冊的功能。

Spring Cloud Netflix,該項目是Spring Cloud的子項目之一,主要內(nèi)容是對Netflix公司一系列開源產(chǎn)品的包裝,它為Spring Boot應(yīng)用提供了自配置的Netflix OSS整合。

通過一些簡單的注解,開發(fā)者就可以快速的在應(yīng)用中配置一下常用模塊并構(gòu)建龐大的分布式系統(tǒng)。它主要提供的模塊包括:服務(wù)發(fā)現(xiàn)(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。Spring cloud Hystrix 熔斷器

斷路器(Cricuit Breaker)是一種能夠在遠程服務(wù)不可用時自動熔斷(打開開關(guān)),并在遠程服務(wù)恢復(fù)時自動恢復(fù)(閉合開關(guān))的設(shè)施。

斷路器(Cricuit Breaker)是一種能夠在遠程服務(wù)不可用時自動熔斷(打開開關(guān)),并在遠程服務(wù)恢復(fù)時自動恢復(fù)(閉合開關(guān))的設(shè)施,Spring Cloud通過Netflix的Hystrix組件提供斷路器、資源隔離與自我修復(fù)功能。

Spring Cloud Zuul 服務(wù)網(wǎng)關(guān)

Spring Cloud Eureka提供在分布式環(huán)境下的服務(wù)發(fā)現(xiàn),服務(wù)注冊的功能。

Spring Cloud Netflix,該項目是Spring Cloud的子項目之一,主要內(nèi)容是對Netflix公司一系列開源產(chǎn)品的包裝,它為Spring Boot應(yīng)用提供了自配置的Netflix OSS整合。通過一些簡單的注解,開發(fā)者就可以快速的在應(yīng)用中配置一下常用模塊并構(gòu)建龐大的分布式系統(tǒng)。它主要提供的模塊包括:服務(wù)發(fā)現(xiàn)(Eureka),斷路器(Hystrix),智能路有(Zuul),客戶端負載均衡(Ribbon)等。

當然Spring Cloud還有額外擴展的其它很多組件,包括了服務(wù)鏈路監(jiān)控和跟蹤(很關(guān)鍵的一個功能),消息總線,數(shù)據(jù)流處理,批量任務(wù)處理等。而對于整個Spring Cloud微服務(wù)框架簡單來說,即是:

你只要劃分到你的微服務(wù)組件和模塊,并定義好需要暴露的API接口,那么剩下的整個開發(fā)和傳統(tǒng)方式?jīng)]有太大的區(qū)別,你開發(fā)完成的組件集成起來就是一個分布式可擴展的微服務(wù)環(huán)境。里面設(shè)計到的接口發(fā)布,服務(wù)注冊,服務(wù)調(diào)用和路由,服務(wù)監(jiān)控,健康檢測和流控等都會由微服務(wù)框架來幫你完成。

正是有了成熟的微服務(wù)框架,我們才更應(yīng)該將微服務(wù)架構(gòu)設(shè)計重心從技術(shù)底層轉(zhuǎn)移到組件劃分和接口設(shè)計上。

SpringCloud和Dubbo的區(qū)別問題

對于兩者的區(qū)別在如下文章有詳細描述可以參考:

http://blog.didispace.com/microservice-framework/

可以看到SpringCLoud能夠提供的基礎(chǔ)能力要多于Dubbo,Dubbo可以看作是SpringCLoud簡單實現(xiàn)。

Dubbo是RPC服務(wù)治理框架,和Spring Cloud一樣具備服務(wù)注冊、發(fā)現(xiàn)、路由、負載均衡等能力。但是沒有配置中心,完整的好用全鏈路監(jiān)控,需要采用開源的解決方案定制或者自研。Spring cloud的配置中心,全鏈路監(jiān)控等組件。從目前來看,Spring Cloud國內(nèi)中小型企業(yè)用的比較多,大型企業(yè)可能需要對其需要的組件進行定制化處理。

但是也需要看到Spring Cloud基于注解的服務(wù)發(fā)現(xiàn),服務(wù)治理等功能具有代碼侵入性,dubbo沒有代碼侵入性,業(yè)務(wù)開發(fā)人員不需要通過注解的方式去關(guān)注框架級別的處理。從中間件或者做基礎(chǔ)架構(gòu)的角度來看,其實服務(wù)治理等功能對普通的業(yè)務(wù)程序員應(yīng)該是透明的,業(yè)務(wù)程序員不需要關(guān)注服務(wù)治理框架的使用,專注于業(yè)務(wù)代碼即可。

基于SpringCLoud微服務(wù)框架的實踐

對于基于SpringCLoud框架的具體實踐,建議參考翟永超博客的系列文章,具體如下:

服務(wù)注冊和發(fā)現(xiàn):http://blog.didispace.com/springcloud1/

服務(wù)消費:http://blog.didispace.com/springcloud2/

服務(wù)熔斷機制:http://blog.didispace.com/springcloud3/

服務(wù)配置中心:http://blog.didispace.com/springcloud4/

服務(wù)網(wǎng)關(guān):http://blog.didispace.com/springcloud5/

高可用服務(wù)注冊中心:http://blog.didispace.com/springcloud6/

消息總線:http://blog.didispace.com/springcloud7/

服務(wù)注冊和發(fā)現(xiàn)

注意這里仍然使用的是SpringBoot框架,并和SpringBoot框架進行了集成,在pom.xml配置文件中增加了對SpringCLoud相關(guān)包和組件的依賴。在原有的接口API定義的基礎(chǔ)上,我們增加@EnableDiscoveryClient注解后,即可以讓服務(wù)注冊中心很輕松的發(fā)現(xiàn)服務(wù)提供方以及提供的服務(wù)。

服務(wù)消費

方式1 - Ribbon是一個基于HTTP和TCP客戶端的負載均衡器。Ribbon可以在通過客戶端中配置的ribbonServerList服務(wù)端列表去輪詢訪問以達到均衡負載的作用。當Ribbon與Eureka聯(lián)合使用時,ribbonServerList會被DiscoveryEnabledNIWSServerList重寫,擴展成從Eureka注冊中心中獲取服務(wù)端列表。

方式2 - Feign是一個聲明式的Web Service客戶端,它使得編寫Web Serivce客戶端變得更加簡單。我們只需要使用Feign來創(chuàng)建一個接口并用注解來配置它既可完成。它具備可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的編碼器和解碼器。Spring Cloud為Feign增加了對Spring MVC注解的支持,還整合了Ribbon和Eureka來提供均衡負載的HTTP客戶端實現(xiàn)。

斷路器

首先在pom.xml文件中增加引入對hystrix依賴,同時在消費端Application主類上增加@EnableCircuitBreaker注解開啟斷路器功能。注意原有的服務(wù)消費方式也涉及到修改,增加了服務(wù)Callback的回調(diào)函數(shù)。

服務(wù)網(wǎng)關(guān)

服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)中一個不可或缺的部分。通過服務(wù)網(wǎng)關(guān)統(tǒng)一向外系統(tǒng)提供REST API的過程中,除了具備服務(wù)路由、均衡負載功能之外,它還具備了權(quán)限控制等功能。Spring Cloud Netflix中的Zuul就擔任了這樣的一個角色,為微服務(wù)架構(gòu)提供了前門保護的作用,同時將權(quán)限控制這些較重的非業(yè)務(wù)邏輯內(nèi)容遷移到服務(wù)路由層面,使得服務(wù)集群主體能夠具備更高的可復(fù)用性和可測試性。

spring cloud Eureka使用實例

spring cloud 是基于spring boot實現(xiàn)的微服務(wù)架構(gòu)開發(fā)工具,他為微服務(wù)中設(shè)計的配置管理、服務(wù)治理、斷路器、智能路由、微代理、控制總線、全局鎖、決策精選、分布式會話和集群狀態(tài)管理等操作提供了一套簡單的開發(fā)方式。?

spring cloud eureka 我們可以把它看做cloud生態(tài)中的一個組成部分,它主要的職責(zé)是服務(wù)治理。?

學(xué)習(xí)一個事物最簡單的方式就是使用它,那么,我們從搭建一個實例開始入手,看看如何搭建spring cloud eureka?

先說明下有兩類角色:1,server 2,client?

相對于注冊中心來說,只有注冊中心的實例為服務(wù)端,其余(服務(wù)提供方和客戶端)均為client端。?

1.新建spring boot應(yīng)用,添加spring cloud eureka server組件,可以在生成的pom文件中添加,當然也可以在新建應(yīng)用時指定,如:?


(如果是注冊中心則選在Eureka Server,如果是服務(wù)中心或者是client端則選擇Eureka Discovery)?

生成的pom文件:?

@EnableEurekaClient

@SpringBootApplication

publicclass EurekaserverApplication {

public static void main(String[] args){

? ? ? ? SpringApplication.run(EurekaserverApplication.class, args);

? ? }

}

3.修改properties文件或yml文件

如果是注冊中心實例則添加

server.port=8082

eureka.instance.hostname=localhost

eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

eureka.client.serviceUrl.defaultZone=http://[Math Processing Error]eureka.instance.hostname:{server.port}/eureka

如果是client端(服務(wù)提供方或者客戶端)

server.port=8083

spring.application.name=hello-service

eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka

這里詳細說明下各項的配置:

注冊中心:

server.port不用說,指明啟動的實例端口

eureka.instance.hostname:指明該eureka實例的主機名稱

eureka.client.register-with-eureka:默認情況下,該注冊中心實例也會向自己注冊自己,所以說,設(shè)置為false即為禁用本身的客戶端注冊

eureka.client.fetch-registry:注冊中心的職責(zé)是負責(zé)維護實例,并不需要去檢索服務(wù),因為此處設(shè)置為false

eureka.client.serviceUrl.defaultZone:這是spring cloud的服務(wù)劃分機制,后面的博客會詳細講解,在這里你可以簡單理解為集群中心url地址

client:

eureka.client.serviceUrl.defaultZone:指明集群中心的地址

好了,到目前為止,一個完備的集群中心就搭建完了,

我們來分析一下構(gòu)成:

1.集群注冊中心 2.服務(wù)提供方 3.客戶端實例

他們?nèi)咧g關(guān)系可用下列示意圖表示:

開啟三個實例,分別擔任上述三者。

可以通過訪問注冊中心地址:

http://localhost:8082/(8082是注冊中心實例端口),可看到如下頁面

ok,至此,即完成了一套服務(wù)的搭建,麻雀雖小五臟俱全。

我們現(xiàn)在可以來分析回顧一下上述基礎(chǔ)架構(gòu)中的三個核心要素:

**服務(wù)注冊中心:Eureka提供的服務(wù)端,提供服務(wù)注冊與發(fā)現(xiàn)的功能,即上述的eureka-server

服務(wù)提供者:提供服務(wù)的應(yīng)用??梢允莝pring boot的應(yīng)用,也可以是其他遵循Eureka的通信機制的應(yīng)用。他將自己提供的服務(wù)注冊到Eureka上以供其他的應(yīng)用發(fā)現(xiàn)

服務(wù)消費者:消費者應(yīng)用從服務(wù)注冊中心上面獲取服務(wù)列表,從而可以知道從何處可以調(diào)用其所需的服務(wù)。

很多時候,客戶端既是服務(wù)提供者也是服務(wù)消費者。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容