自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖解Nacos,注冊(cè)中心演變 + Nacos核心功能

開發(fā) 架構(gòu)
通過Nginx維護(hù)服務(wù)列表(upStream),如果服務(wù)較多的話,在Nginx通過upStream的方式去配置的話,Nginx配置文件會(huì)變得非常的難以維護(hù)。

大家好,我是哪吒。

一、什么是Nacos?

一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置和服務(wù)管理平臺(tái)。

圖片

Nacos的關(guān)鍵特性:

圖片

Nacos的關(guān)鍵特性

二、注冊(cè)中心演變及其設(shè)計(jì)思想

1、RestTemplate調(diào)用遠(yuǎn)程服務(wù)

如果此時(shí),服務(wù)端接口接口名或參數(shù)或請(qǐng)求方式更改了,那么就得同步修改此restTemplate方法,感覺很麻煩。

圖片

RestTemplate調(diào)用遠(yuǎn)程服務(wù)

@SpringBootTest
class Test {

@Resource
private RestTemplate restTemplate;

@Test
void testSimple() {
// 請(qǐng)求地址
String url = "http://www.nzbc.com/updateUser";

// 要發(fā)送的數(shù)據(jù)對(duì)象
User user = new User();
user.setUserId(1);
user.setName("哪吒編程");
user.setMsg("讀哪吒編程,品技術(shù)人生");

// 發(fā)送post請(qǐng)求
User result = restTemplate.postForObject(url, user, User.class);
System.out.println(result);
}
}

2、通過Nginx維護(hù)服務(wù)列表(upStream)

圖片

通過Nginx維護(hù)服務(wù)列表(upStream),如果服務(wù)較多的話,在Nginx通過upStream的方式去配置的話,Nginx配置文件會(huì)變得非常的難以維護(hù)。

3、通過Nacos實(shí)現(xiàn)注冊(cè)中心

圖片

Nacos注冊(cè)中心

這種是最簡(jiǎn)單的Nacos注冊(cè)中心,有若干個(gè)服務(wù),都注冊(cè)到Nacos注冊(cè)中心,調(diào)用之前,先到Nacos獲取對(duì)應(yīng)接口,然后進(jìn)行實(shí)際的調(diào)用。

但是,思考一個(gè)問題,如果Nacos宕機(jī)了,怎么辦?如果從Nacos獲取到接口后,調(diào)用服務(wù)2時(shí),服務(wù)2宕機(jī)了,怎么辦?

4、心跳版Nacos

圖片

心跳版Nacos

心跳版Nacos,服務(wù)1和服務(wù)2和Nacos之間維護(hù)一個(gè)心跳關(guān)系,每5秒跳一次,頻率不能太快或者太慢,否者會(huì)嗝屁的。

如果Nacos在5秒內(nèi)沒有收到心跳,則表示服務(wù)掛了,Nacos會(huì)下線此服務(wù)。

對(duì)于超過15秒沒有收到客戶端心跳的服務(wù)實(shí)例,會(huì)將它的healthy屬性置為false,客戶端無法調(diào)用healthy為false的服務(wù)。

如果超過30秒沒有收到心跳,Nacos會(huì)直接將此服務(wù)剔除。

也可以通過服務(wù)端主動(dòng)注銷的方式,停止注冊(cè)。

服務(wù)1調(diào)用服務(wù)2時(shí),服務(wù)1會(huì)通過定時(shí)任務(wù)到Nacos中獲取在線的服務(wù),保證所調(diào)用的服務(wù)一直都是健康在線的狀態(tài)。

獲取到之后,用緩存將其保存起來,然后通過負(fù)載均衡器調(diào)用服務(wù)2,此時(shí),將不再使用服務(wù)端的負(fù)載均衡Nginx了。

三、Nacos Discovery

SpringBoot中引入Nacos Discovery,實(shí)現(xiàn)與Nacos的無縫連接,Nacos Discovery可以將服務(wù)自動(dòng)注冊(cè)到Nacos服務(wù)端,并且能夠動(dòng)態(tài)感知此服務(wù),并刷新服務(wù)列表。并將服務(wù)的host、port、URL等信息注冊(cè)到Nacos。

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

Nacos 的配置項(xiàng)信息:

圖片

四、Nacos核心功能

圖片

Nacos核心功能

1、服務(wù)注冊(cè)

Nacos Client會(huì)通過發(fā)送REST請(qǐng)求向Nacos Server注冊(cè)自己的服務(wù),提供自身的元數(shù)據(jù),比如host、port、url等信息,Nacos Server在收到注冊(cè)請(qǐng)求后,會(huì)將這些數(shù)據(jù)信息存儲(chǔ)在一個(gè)雙層的內(nèi)存map中。

2、服務(wù)心跳

服務(wù)注冊(cè)后,服務(wù)消費(fèi)者和Nacos Server之間會(huì)維護(hù)一個(gè)心跳,定時(shí)通知server,此服務(wù)還活著,防止被剔除掉。

3、服務(wù)同步

Nacos Server集群之間會(huì)互相同步已注冊(cè)的服務(wù),用來保證服務(wù)列表的一致性。

4、服務(wù)發(fā)現(xiàn)

服務(wù)消費(fèi)者在調(diào)用服務(wù)提供者的服務(wù)時(shí),會(huì)發(fā)送一個(gè)REST請(qǐng)求到Nacos Server,獲取健康的服務(wù)列表,然后將其緩存到本地,同時(shí)開啟一個(gè)定時(shí)任務(wù),定時(shí)訪問Nacos Server,然后更新本地緩存。

5、服務(wù)健康檢查

Nacos Server會(huì)開啟一個(gè)定時(shí)任務(wù)用來檢查注冊(cè)服務(wù)實(shí)例的健康情況,對(duì)于超過15秒沒有收到客戶端心跳的服務(wù)實(shí)例,會(huì)將它的healthy屬性置為false,客戶端無法調(diào)用healthy為false的服務(wù),如果超過30秒沒有收到心跳,Nacos會(huì)直接將此服務(wù)剔除。

五、作為注冊(cè)中心

1、Nacos目前功能最全,用的也最多;

2、Eureka,因?yàn)橥Ω木壒剩容^新的技術(shù)都不支持了,目前很多公司都將Eureka換成Nacos了,不推薦使用;

3、Zookeeper,用的最多的地方就是和Dubbo一起使用,不支持負(fù)載均衡策略,但可以通過其它組件實(shí)現(xiàn);

4、Consul支持的也很多;

CAP,C一致性,A可用性,P分區(qū)容錯(cuò)性


Nacos

Eureka

Zookeeper

Consul

一致性協(xié)議

CP + AP

CP

AP

CP

訪問協(xié)議

HTTP/DNS

HTTP

TCP

HTTP/DNS

健康檢查

TCP/HTTP/MYSQL/Client Beat

Client Beat

Keep Live

TCP/HTT[/gRPC/Cmd

負(fù)載均衡策略

權(quán)重/metadata/Seletor

Ribbon

-

Fabio

雪崩保護(hù)

自動(dòng)注銷

支持

支持

支持

支持

監(jiān)聽

支持

支持

支持

支持

多數(shù)據(jù)中心

支持

支持

支持

不支持

跨注冊(cè)中心同步

支持

不支持

不支持

支持

Spring Cloud集成

支持

支持

支持

支持

Dubbo集成

支持

不支持

支持

支持

K8S集成

支持

不支持

支持

不支持

六、作為配置中心

1、SpringBoot集成Nacos

Nacos使用key/value形式存儲(chǔ)配置信息,為分布式系統(tǒng)中的外部化配置提供服務(wù)支持。

(1)maven文件

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

(2)配置文件

spring.application.name=nacos-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

blog.name=哪吒編程
blog.language=java

(3)主方法啟動(dòng)類

@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
String name = applicationContext.getEnvironment().getProperty("blog.name");
String language = applicationContext.getEnvironment().getProperty("blog.language");
System.err.println("公眾號(hào) :"+name+"; 擅長技術(shù): "+language);
}
}

2、支持配置的動(dòng)態(tài)更新

一秒刷新一次。

@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
while(true) {
//當(dāng)動(dòng)態(tài)配置刷新時(shí),會(huì)更新到 Enviroment中,因此這里每隔一秒中從Enviroment中獲取配置
String name = applicationContext.getEnvironment().getProperty("blog.name");
String language = applicationContext.getEnvironment().getProperty("blog.language");
System.err.println("公眾號(hào) :"+name+"; 擅長技術(shù): "+language);
TimeUnit.SECONDS.sleep(1);
}
}
}

3、可支持profile粒度的配置

4、支持自定義 namespace 的配置

開發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的資源(如配置、服務(wù))隔離等,比如dev和prod。

5、支持自定義 Group 的配置

在沒有明確指定 ${spring.cloud.nacos.config.group}配置的情況下, 默認(rèn)使用的是 DEFAULT_GROUP 。如果需要自定義自己的 Group,可以通過以下配置來實(shí)現(xiàn):

spring.cloud.nacos.config.group=DEVELOP_GROUP

6、配置優(yōu)先級(jí)

profile > 默認(rèn)配置文件 > extension-configs(下標(biāo)越大優(yōu)先級(jí)越高) > shared-configs(下標(biāo)越大優(yōu)先級(jí)越高)。

7、@RefreshScope

一般都是通過@Value的形式讀取配置文件中的信息,但是無法感知修改后的值,需要利用@RefreshScope動(dòng)態(tài)刷新。

8、Spring Cloud Config 橫向?qū)Ρ萅acos

(1) Spring Cloud Config需要結(jié)合Git使用,動(dòng)態(tài)變更需要配合Bus 消息總線來通知所有的客戶端變化。

(2)Spring Cloud Config沒有可視化界面。

(3)Nacos使用長輪詢更新配置,速度上秒殺Spring Cloud Config。

本文轉(zhuǎn)載自微信公眾號(hào)「哪吒編程」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系哪吒編程公眾號(hào)。

責(zé)任編輯:姜華 來源: 哪吒編程
相關(guān)推薦

2021-08-04 11:54:25

Nacos注冊(cè)中心設(shè)計(jì)

2023-10-30 09:35:01

注冊(cè)中心微服務(wù)

2024-01-02 22:47:47

Nacos注冊(cè)中心節(jié)點(diǎn)

2023-02-26 00:00:00

2022-08-30 22:12:19

Nacos組件服務(wù)注冊(cè)

2024-04-10 12:22:19

DubboNacos微服務(wù)

2022-02-09 07:03:01

SpringNacos服務(wù)注冊(cè)

2020-06-29 07:58:18

ZooKeeperConsul 注冊(cè)中心

2023-09-12 07:10:13

Nacos架構(gòu)

2021-07-12 08:00:21

Nacos 服務(wù)注冊(cè)源碼分析

2022-02-07 07:10:32

服務(wù)注冊(cè)功能

2021-08-09 07:58:36

Nacos 服務(wù)注冊(cè)源碼分析

2022-04-12 08:09:22

Nodejs前端面試題

2021-06-10 06:57:39

Nacos配置模塊

2023-04-26 08:19:48

Nacos高可用開發(fā)

2024-12-10 08:27:28

2009-11-18 13:11:29

PHP核心

2010-01-27 17:38:58

Windows Emb

2023-02-04 18:19:39

2023-06-13 08:25:14

注冊(cè)中心Nacos上線
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)