?作者簡介:2022年博客新星 第八。熱愛國學(xué)的Java后端開發(fā)者,修心和技術(shù)同步精進(jìn)。
??個人主頁:Java Fans的博客
??個人信條:不遷怒,不貳過。小知識,大智慧。
??當(dāng)前專欄:SpringCloud 微服務(wù)學(xué)習(xí)專欄
?特色專欄:國學(xué)周更-心性養(yǎng)成之路
??本文內(nèi)容:SpringCloud 微服務(wù)系列——【基礎(chǔ)與服務(wù)注冊中心詳解】
1、什么是微服務(wù)
官網(wǎng): https://www.martinfowler.com/articles/microservices.html
In short, the microservice architectural(架構(gòu)) style is an approach to developing a single application as a suite(系列) of small services
, each running in its own process(進(jìn)程)
and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business(業(yè)務(wù)) capabilities(單元)
and independently(獨(dú)立) deployable(部署)
by fully automated deployment machinery. There is a bare(基于) minimum of centralized(分布式) management(管理) of these services
, which may be written in different programming languages and use different data storage technologies. -----[摘自官網(wǎng)]
- a suite of small services --一系列微小服務(wù)
- running in its own process --運(yùn)行在自己的進(jìn)程里
- built around business capabilities --圍繞自己的業(yè)務(wù)開發(fā)
- independently deployable --獨(dú)立部署
- bare minimum of centralized management of these services --基于分布式管理
- 官方定義:微服務(wù)就是由一系列圍繞自己業(yè)務(wù)開發(fā)的微小服務(wù)構(gòu)成,他們獨(dú)立部署運(yùn)行在自己的進(jìn)程里,基于分布式的管理
- 通俗定義:微服務(wù)是一種架構(gòu),這種架構(gòu)是將單個的整體應(yīng)用程序分割成更小的項目關(guān)聯(lián)的獨(dú)立的服務(wù)。一個服務(wù)通常實(shí)現(xiàn)一組獨(dú)立的特性或功能,包含自己的業(yè)務(wù)邏輯和適配器。各個微服務(wù)之間的關(guān)聯(lián)通過暴露api來實(shí)現(xiàn)。這些獨(dú)立的微服務(wù)不需要部署在同一個虛擬機(jī),同一個系統(tǒng)和同一個應(yīng)用服務(wù)器中。
2、為什么是微服務(wù)
傳統(tǒng)單體應(yīng)用
1.優(yōu)點(diǎn)
- 單一架構(gòu)模式在項目初期很小的時候開發(fā)方便,測試方便,部署方便,運(yùn)行良好。
2.缺點(diǎn)
- 應(yīng)用隨著時間的推進(jìn),加入的功能越來越多,最終會變得巨大,一個項目中很有可能數(shù)百萬行的代碼,互相之間繁瑣的jar包。
- 久而久之,開發(fā)效率低,代碼維護(hù)困難
- 如果想整體應(yīng)用采用新的技術(shù),新的框架或者語言,那是不可能的。
- 任意模塊的漏洞或者錯誤都會影響這個應(yīng)用,降低系統(tǒng)的可靠性
微服務(wù)架構(gòu)應(yīng)用
1.優(yōu)點(diǎn)
- 將服務(wù)拆分成多個單一職責(zé)的小的服務(wù),進(jìn)行單獨(dú)部署,服務(wù)之間通過網(wǎng)絡(luò)進(jìn)行通信
- 每個服務(wù)應(yīng)該有自己單獨(dú)的管理團(tuán)隊,高度自治
- 服務(wù)各自有自己單獨(dú)的職責(zé),服務(wù)之間松耦合,避免因一個模塊的問題導(dǎo)致服務(wù)崩潰
2.缺點(diǎn)
- 開發(fā)人員要處理分布式系統(tǒng)的復(fù)雜性
- 多服務(wù)運(yùn)維難度,隨著服務(wù)的增加,運(yùn)維的壓力也在增大
- 服務(wù)治理 和 服務(wù)監(jiān)控難度增加
3、微服務(wù)的解決方案
3.1、Dubbo (阿里系)
-
初出茅廬:2011年末,阿里巴巴在GitHub上開源了基于Java的分布式服務(wù)治理框架Dubbo,之后它成為了國內(nèi)該類開源項目的佼佼者,許多開發(fā)者對其表示青睞。同時,先后有不少公司在實(shí)踐中基于Dubbo進(jìn)行分布式系統(tǒng)架構(gòu),目前在GitHub上,它的fork、star數(shù)均已破萬。Dubbo致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案,使得應(yīng)用可通過高性能RPC實(shí)現(xiàn)服務(wù)的輸出、輸入功能和Spring框架無縫集成。Dubbo包含遠(yuǎn)程通訊、集群容錯和自動發(fā)現(xiàn)三個核心部分。
-
停止維護(hù):從2012年10月23日Dubbo 2.5.3發(fā)布后,在Dubbo開源將滿一周年之際,阿里基本停止了對Dubbo的主要升級。只在之后的2013年和2014年更新過2次對Dubbo 2.4的維護(hù)版本,然后停止了所有維護(hù)工作。Dubbo對Srping的支持也停留在了Spring 2.5.6版本上。
-
死而復(fù)生:多年漫長的等待,隨著微服務(wù)的火熱興起,在國內(nèi)外開發(fā)者對阿里不再升級維護(hù)Dubbo的吐槽聲中,阿里終于開始重新對Dubbo的升級和維護(hù)工作。在2017年9月7日,阿里發(fā)布了Dubbo的2.5.4版本,距離上一個版本2.5.3發(fā)布已經(jīng)接近快5年時間了。在隨后的幾個月中,阿里Dubbo開發(fā)團(tuán)隊以差不多每月一版本的速度開始快速升級迭代,修補(bǔ)了Dubbo老版本多年來存在的諸多bug,并對Spring等組件的支持進(jìn)行了全面升級。
-
2018年1月8日,Dubbo創(chuàng)始人之一梁飛在Dubbo交流群里透露了Dubbo 3.0正在動工的消息。Dubbo 3.0內(nèi)核與Dubbo 2.0完全不同,但兼容Dubbo 2.0。Dubbo 3.0將以Streaming為內(nèi)核,不再是Dubbo 時代的RPC,但是RPC會在Dubbo 3.0中變成遠(yuǎn)程Streaming對接的一種可選形態(tài)。從Dubbo新版本的路線規(guī)劃上可以看出,新版本的Dubbo在原有服務(wù)治理的功能基礎(chǔ)上,將全面擁抱微服務(wù)解決方案。
-
結(jié)論:當(dāng)前由于RPC協(xié)議、注冊中心元數(shù)據(jù)不匹配等問題,在面臨微服務(wù)基礎(chǔ)框架選型時Dubbo與Spring Cloud是只能二選一,這也是為什么大家總是拿Dubbo和Spring Cloud做對比的原因之一。Dubbo之后會積極尋求適配到Spring Cloud生態(tài),比如作為Spring Cloud的二進(jìn)制通信方案來發(fā)揮Dubbo的性能優(yōu)勢,或者Dubbo通過模塊化以及對http的支持適配到Spring Cloud。
3.2、Spring Cloud
-
Spring Cloud NetFlix
基于美國Netflix公司開源的組件進(jìn)行封裝,提供了微服務(wù)一棧式的解決方案。
-
Spring Cloud alibaba
在Spring cloud netflix基礎(chǔ)上封裝了阿里巴巴的微服務(wù)解決方案。
-
Spring Cloud Spring
目前spring官方趨勢正在逐漸吸收Netflix組件的精華,并在此基礎(chǔ)進(jìn)行二次封裝優(yōu)化,打造spring專有的解決方案
4、什么是 SpringCloud
官網(wǎng): https://cloud.spring.io/spring-cloud-static/Hoxton.SR5/reference/html/
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management
, service discovery
, circuit breakers, intelligent routing, micro-proxy, control bus
). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. -------[摘自官網(wǎng)]
通俗理解
- springcloud是一個含概多個子項目的開發(fā)工具集,集合了眾多的開源框架,他利用了Spring Boot開發(fā)的便利性實(shí)現(xiàn)了很多功能,如服務(wù)注冊,服務(wù)注冊發(fā)現(xiàn),負(fù)載均衡等.SpringCloud在整合過程中主要是針對Netflix(耐非)開源組件的封裝.SpringCloud的出現(xiàn)真正的簡化了分布式架構(gòu)的開發(fā)。NetFlix 是美國的一個在線視頻網(wǎng)站,微服務(wù)業(yè)的翹楚,他是公認(rèn)的大規(guī)模生產(chǎn)級微服務(wù)的杰出實(shí)踐者,NetFlix的開源組件已經(jīng)在他大規(guī)模分布式微服務(wù)環(huán)境中經(jīng)過多年的生產(chǎn)實(shí)戰(zhàn)驗(yàn)證,因此Spring Cloud中很多組件都是基于NetFlix
核心架構(gòu)及其組件
核心組件說明
-
eurekaserver、consul、nacos
服務(wù)注冊中心組件 -
rabbion & openfeign
服務(wù)負(fù)載均衡 和 服務(wù)調(diào)用組件 -
hystrix & hystrix dashboard
服務(wù)斷路器 和 服務(wù)監(jiān)控組件 -
zuul、gateway
服務(wù)網(wǎng)關(guān)組件 -
config
統(tǒng)一配置中心組件 -
bus
消息總線組件
…
5、環(huán)境搭建
5.1、版本命名
springcloud是一個由眾多獨(dú)立子項目組成的大型綜合項目,原則每個子項目上有不同的發(fā)布節(jié)奏,都維護(hù)自己發(fā)布版本號。為了更好的管理springcloud的版本,通過一個資源清單BOM(Bill of Materials),為避免與子項目的發(fā)布號混淆,所以沒有采用版本號的方式,而是通過命名的方式。這些名字是按字母順序排列的。如倫敦地鐵站的名稱(“天使”是第一個版本,“布里斯頓”是第二個版本,"卡姆登"是第三個版本)。當(dāng)單個項目的點(diǎn)發(fā)布累積到一個臨界量,或者其中一個項目中有一個關(guān)鍵缺陷需要每個人都可以使用時,發(fā)布序列將推出名稱以“.SRX”結(jié)尾的“服務(wù)發(fā)布”,其中“X”是一個數(shù)字。
2.倫敦地鐵站名稱 [了解]
- Angel、Brixton、Camden、Dalston、Edgware、Finchley、Greenwich、Hoxton
5.2、版本選擇
5.3、環(huán)境搭建
- springboot 2.2.5.RELEASE
- springcloud Hoxton.SR6
- java8
- maven 3.3.5
- idea 2020
1.創(chuàng)建springboot項目 指定版本為 2.2.5.RELEASE版本
<!-- 繼承springboot的父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.引入springcloud的版本管理
<!-- 統(tǒng)一維護(hù)依賴的版本-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
</properties>
<!--全局管理springcloud版本,并不會引入具體依賴-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type> <!-- 其它組件小版本號的維護(hù)-->
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.完成上述操作springboot與springcloud環(huán)境搭建完成,接下來就是使用到具體的springcloud組件,在項目中引入具體的組件即可
6、服務(wù)注冊中心
什么是服務(wù)注冊中心
所謂服務(wù)注冊中心就是在整個的微服務(wù)架構(gòu)中單獨(dú)提出一個服務(wù),這個服務(wù)不完成系統(tǒng)的任何的業(yè)務(wù)功能,僅僅用來完成對整個微服務(wù)系統(tǒng)的服務(wù)注冊和服務(wù)發(fā)現(xiàn),以及對服務(wù)健康狀態(tài)的監(jiān)控和管理功能。
1.服務(wù)注冊中心
- 可以對所有的微服務(wù)的信息進(jìn)行存儲,如微服務(wù)的名稱、IP、端口等
- 可以在進(jìn)行服務(wù)調(diào)用時通過服務(wù)發(fā)現(xiàn)查詢可用的微服務(wù)列表及網(wǎng)絡(luò)地址進(jìn)行服務(wù)調(diào)用
- 可以對所有的微服務(wù)進(jìn)行心跳檢測,如發(fā)現(xiàn)某實(shí)例長時間無法訪問,就會從服務(wù)注冊表移除該實(shí)例
2.常用的注冊中心
springcloud支持的多種注冊中心Eureka、Consul(GO)、Zookeeper(java)、以及阿里巴巴推出Nacos(java)。這些注冊中心在本質(zhì)上都是用來管理服務(wù)的注冊和發(fā)現(xiàn)以及服務(wù)狀態(tài)的檢查的。
6.1、Eureka注冊中心
官網(wǎng):https://github.com/Netflix/eureka/wiki
簡介
Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個基于REST的服務(wù)。SpringCloud將它集成在其子項目spring-cloud-netflix中,以實(shí)現(xiàn)SpringCloud的服務(wù)注冊和發(fā)現(xiàn)功能。Eureka包含兩個組件:
- Eureka Server
- Eureka Client
開發(fā)Eureka Server
1.創(chuàng)建項目并引入eureka server依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入 eureka server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2.編寫配置application.yml
server:
port: 8761 # eureka 默認(rèn)的端口號
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka #指定服務(wù)注冊中心的地址
#指定服務(wù)注冊中心的名字
spring:
application:
name: EUREKASERVER #服務(wù)名稱不要使用下劃線 服務(wù)名稱不區(qū)分大小寫 推薦服務(wù)名大寫
3.開啟EurekaServer,入口類加入注解
@SpringBootApplication
@EnableEurekaServer
public class Eurekaserver8761Application {
public static void main(String[] args) {
SpringApplication.run(Eurekaserver8761Application.class, args);
}
}
4.訪問Eureka的服務(wù)注冊頁面
http://localhost:8761
5.為什么項目啟動控制臺報錯?
原因分析:
eureka組件包含 eurekaserver 和 eurekaclient。server是一個服務(wù)注冊中心,用來接受客戶端的注冊。client的特性會讓當(dāng)前啟動的服務(wù)把自己作為eureka的客戶端進(jìn)行服務(wù)中心的注冊,當(dāng)項目啟動時服務(wù)注冊中心還沒有創(chuàng)建好,所以找不到服務(wù)的客戶端組件就直接報錯了,當(dāng)服務(wù)注冊中心啟動成功后,就不再報錯啦!
解決方案:
eureka.client.register-with-eureka=false #不再將自己作為客戶端進(jìn)行注冊
eureka.client.fetch-registry=false # 不獲取注冊信息
再次啟動,控制器也不再報錯
開發(fā)Eureka Client
1.創(chuàng)建項目并引入eureka client依賴
<!--引入eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.編寫配置application.yml
server.port=8888 #服務(wù)端口號
spring.application.name=eurekaclient8888 #服務(wù)名稱唯一標(biāo)識
eureka.client.service-url.defaultZone=http://localhost:8761/eureka #eureka注冊中心地址
3.開啟eureka客戶端并加入注解
@SpringBootApplication
@EnableEurekaClient
public class Eurekaclient8888Application {
public static void main(String[] args) {
SpringApplication.run(Eurekaclient8888Application.class, args);
}
}
4.啟動服務(wù)注冊中心,然后啟動eureka客戶端服務(wù)
5.查看eureka server的服務(wù)注冊情況
Eureka自我保護(hù)機(jī)制
服務(wù)頻繁啟動時 EurekaServer出現(xiàn)錯誤
- EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
自我保護(hù)機(jī)制
官網(wǎng)地址: https://github.com/Netflix/eureka/wiki/Server-Self-Preservation-Mode
默認(rèn)情況下,如果Eureka Server在一定時間內(nèi)(默認(rèn)90秒)沒有接收到某個微服務(wù)實(shí)例的心跳,Eureka Server將會移除該實(shí)例。但是當(dāng)網(wǎng)絡(luò)分區(qū)故障發(fā)生時,微服務(wù)與Eureka Server之間無法正常通信,而微服務(wù)本身是正常運(yùn)行的,此時不應(yīng)該移除這個微服務(wù),所以引入了自我保護(hù)機(jī)制。
Eureka Server在運(yùn)行期間會去統(tǒng)計心跳失敗比例在 15 分鐘之內(nèi)是否低于 85%,如果低于 85%,Eureka Server 會將這些實(shí)例保護(hù)起來,讓這些實(shí)例不會過期。這種設(shè)計的哲學(xué)原理就是"寧可信其有不可信其無!"。自我保護(hù)模式正是一種針對網(wǎng)絡(luò)異常波動的安全保護(hù)措施,使用自我保護(hù)模式能使Eureka集群更加的健壯、穩(wěn)定的運(yùn)行。
在Eureka server端關(guān)閉自我保護(hù)機(jī)制
eureka.server.enable-self-preservation=false #關(guān)閉自我保護(hù)
eureka.server.eviction-interval-timer-in-ms=3000 #超時3s自動清除 默認(rèn)60*1000 1min鐘清除
----------------------------yml風(fēng)格------------------------------------------
eureka:
server:
enable-self-preservation: false # 關(guān)閉自我保護(hù)機(jī)制
eviction-interval-timer-in-ms: 3000 # 超時移除時間
微服務(wù)客戶端修改減短服務(wù)心跳的時間
eureka.instance.lease-expiration-duration-in-seconds=10 #用來修改eureka server默認(rèn)接受心跳的最大時間 默認(rèn)是90s
eureka.instance.lease-renewal-interval-in-seconds=5 #指定客戶端多久向eureka server發(fā)送一次心跳 默認(rèn)是30s
--------------------------------yml風(fēng)格--------------------------------------
eureka:
instance:
lease-expiration-duration-in-seconds: 10
lease-renewal-interval-in-seconds: 5
盡管如此關(guān)閉自我保護(hù)機(jī)制還是會出現(xiàn)警告
官方不建議關(guān)閉Eureka自我保護(hù)機(jī)制
Eureka集群的搭建
1.按照之前創(chuàng)建EurekaServer的方式創(chuàng)建多個服務(wù)器端,修改端口號和注冊中心地址
2.客戶端集群也可采用之前創(chuàng)建客戶端的方式創(chuàng)建多個客戶端,修改端口號和注冊中心地址
3.不采用以上的兩種形式也可以利用IDEA工具進(jìn)行集群的快速搭建,操作方式如下:
修改端口號:-Dserver.port=9090
復(fù)制完成后,啟動項目即可
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8788/eureka,http://127.0.0.1:8789/eureka
#客戶端
eureka:
client:
service-url:
defaultZone: http://localhost:8787/eureka,http://localhost:8788/eureka,http://localhost:8789/eureka
6.2、Consul注冊中心
官網(wǎng):https://www.consul.io
consul是一個可以提供服務(wù)發(fā)現(xiàn),健康檢查,多數(shù)據(jù)中心,Key/Value存儲等功能的分布式服務(wù)框架,用于實(shí)現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置。與其他分布式服務(wù)注冊與發(fā)現(xiàn)的方案,使用起來也較為簡單。Consul用Golang實(shí)現(xiàn),因此具有天然可移植性(支持Linux、Windows和Mac OS X);安裝包僅包含一個可執(zhí)行文件,方便部署。
1.下載consul
- https://www.consul.io/downloads
2.安裝consul
- 官方安裝視頻地址: https://learn.hashicorp.com/consul/getting-started/install.html
- 解壓之后發(fā)現(xiàn)consul只有一個腳本文件
3.根據(jù)解壓縮目錄配置環(huán)境變量
4.查看consul環(huán)境變量是否配置成功,執(zhí)行命令出現(xiàn)如下信息代表成功
5.訪問consul的web服務(wù)端口
http://localhost:8500
指定數(shù)據(jù)中心啟動 consul agent -dev -datacenter mosin
6.開發(fā)consul 客戶端即微服務(wù)
- 1.創(chuàng)建項目并引入consul客戶端依賴
<!--引入consul依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
- 編寫yml配置
server.port=8889
spring.application.name=consulclient8889
spring.cloud.consul.host=localhost #注冊consul服務(wù)的主機(jī)
spring.cloud.consul.port=8500 #注冊consul服務(wù)的端口號
#指定注冊的服務(wù)名稱 默認(rèn)就是應(yīng)用名
spring.cloud.consul.discovery.service-name=${spring.application.name}
- 啟動服務(wù)查看consul界面服務(wù)信息
- consul 開啟健康監(jiān)控檢查
開啟consul健康監(jiān)控
默認(rèn)情況consul監(jiān)控健康是開啟的,但是必須依賴健康監(jiān)控依賴才能正確監(jiān)控健康狀態(tài)所以直接啟動會顯示錯誤,引入健康監(jiān)控依賴之后服務(wù)正常
<!-- 這個包是用做健康度監(jiān)控的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
關(guān)閉consul的健康檢查(不推薦)
spring.cloud.consul.discovery.register-health-check=false
不同注冊中心區(qū)別
1.CAP定理
CAP定理:CAP定理又稱CAP原則,指的是在一個分布式系統(tǒng)中,一致性(Consistency)、可用性(Availability)、分區(qū)容錯性(Partition tolerance)。CAP 原則指的是,這三個要素最多只能同時實(shí)現(xiàn)兩點(diǎn),不可能三者兼顧。
-
一致性(C):
在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時刻是否同樣的值。(等同于所有節(jié)點(diǎn)訪問同一份最新的數(shù)據(jù)副本) -
可用性(A):
在集群中一部分節(jié)點(diǎn)故障后,集群整體是否還能響應(yīng)客戶端的讀寫請求。(對數(shù)據(jù)更新具備高可用性) -
分區(qū)容忍性(P):
就是高可用性,一個節(jié)點(diǎn)崩了,并不影響其它的節(jié)點(diǎn)(100個節(jié)點(diǎn),掛了幾個,不影響服務(wù),越多機(jī)器越好)
2.Eureka特點(diǎn)
- Eureka中沒有使用任何的數(shù)據(jù)強(qiáng)一致性算法保證不同集群間的Server的數(shù)據(jù)一致,僅通過數(shù)據(jù)拷貝的方式爭取注冊中心數(shù)據(jù)的最終一致性,雖然放棄數(shù)據(jù)強(qiáng)一致性但是換來了Server的可用性,降低了注冊的代價,提高了集群運(yùn)行的健壯性。
3.Consul特點(diǎn)
- 基于Raft算法,Consul提供強(qiáng)一致性的注冊中心服務(wù),但是由于Leader節(jié)點(diǎn)承擔(dān)了所有的處理工作,勢必加大了注冊和發(fā)現(xiàn)的代價,降低了服務(wù)的可用性。通過Gossip協(xié)議,Consul可以很好地監(jiān)控Consul集群的運(yùn)行,同時可以方便通知各類事件,如Leader選擇發(fā)生、Server地址變更等。
4.zookeeper特點(diǎn)
- 基于Zab協(xié)議,Zookeeper可以用于構(gòu)建具備數(shù)據(jù)強(qiáng)一致性的服務(wù)注冊與發(fā)現(xiàn)中心,而與此相對地犧牲了服務(wù)的可用性和提高了注冊需要的時間。
??碼文不易,本篇文章就介紹到這里,如果想要學(xué)習(xí)更多Java系列知識,點(diǎn)擊關(guān)注博主,博主帶你零基礎(chǔ)學(xué)習(xí)Java知識。與此同時,對于日常生活有困擾的朋友,歡迎閱讀我的第四欄目:《國學(xué)周更—心性養(yǎng)成之路》,學(xué)習(xí)技術(shù)的同時,我們也注重了心性的養(yǎng)成。文章來源:http://www.zghlxwxcb.cn/news/detail-427831.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-427831.html
到了這里,關(guān)于SpringCloud 微服務(wù)系列——【基礎(chǔ)與服務(wù)注冊中心詳解】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!