當前位置: 妍妍網 > 碼農

工作5年,沒用過Nacos,正常嗎?

2024-06-04碼農

嗨,你好呀,我是哪咤。

公司想招聘一個5年開發經驗的後端程式設計師,看了很多簡歷,發現一個共性問題, 普遍都沒用過Nacos,這正常嗎?

下面是已經入職的一位小夥伴的個人技能包,乍一看,還行,也沒用過Nacos。

午休的時候,和她聊了聊,她之前在一家對日的公司。

  1. 需求是產品談好的;

  2. 系統設計、詳細設計是PM做的;

  3. 介面文件、資料庫設計書是日本公司提供的;

  4. 最誇張的是, 就連按鈕的顏色,文件中都有標註...

  5. 她需要做的,就只是照著介面文件去編碼、測試就ok了。

有的面試者工作了5年,做的都是自家產品,計畫只有兩個, 翻來覆去的改BUG,加需求,做運維 。技術棧很老,還是SSM那一套,最近在改造,終於用上了SpringBoot... 微服務、訊息中介軟體、分布式鎖根本沒用過...

還有的面試者,在XX大廠工作, 中間做了一年C#,一年Go ,一看簡歷很華麗, 精通三國語言 ,其實不然,都處於入門階段,毫無競爭力可言。

一時興起,說多了,言歸正傳,總結一篇Nacos的文章, 豐富個人簡歷,提高面試level,給自己增加一點談資,秒變面試小達人,BAT不是夢。

一、什麽是Nacos?

一個更易於構建雲原生套用的動態服務發現、服務配置和服務管理平台。

Nacos的關鍵特性:

Nacos的關鍵特性

二、註冊中心演變及其設計思想

1、RestTemplate呼叫遠端服務

如果此時,伺服端介面介面名或參數或請求方式更改了,那麽就得同步修改此restTemplate方法,感覺 很麻煩

RestTemplate呼叫遠端服務

@SpringBootTest
classTest{
@Resource
private RestTemplate restTemplate;
@Test
voidtestSimple(){
// 請求地址
String url = "http://www.nzbc.com/updateUser";
// 要發送的數據物件
User user = new User();
user.setUserId(1);
user.setName("哪咤編程");
user.setMsg("讀哪咤編程,品技術人生");
// 發送post請求
User result = restTemplate.postForObject(url, user, User. class);
System.out.println(result);
}
}


2、透過Nginx維護服務列表(upStream)

透過Nginx維護服務列表(upStream) ,如果服務較多的話,在Nginx透過upStream的方式去配置的話,Nginx配置檔會變得非常的難以維護。

3、透過Nacos實作註冊中心

Nacos註冊中心

這種是 最簡單的Nacos註冊中心 ,有若幹個服務,都註冊到Nacos註冊中心,呼叫之前,先到Nacos獲取對應介面,然後進行實際的呼叫。

但是,思考一個問題,如果Nacos宕機了,怎麽辦?如果從Nacos獲取到介面後,呼叫服務2時,服務2宕機了,怎麽辦?

4、心跳版Nacos


心跳版Nacos

心跳版Nacos ,服務1和服務2和Nacos之間維護一個心跳關系,每5秒跳一次,頻率不能太快或者太慢,否者會嗝屁的。

如果Nacos在 5秒 內沒有收到心跳,則表示服務掛了,Nacos 會下線此服務

對於超過 15秒 沒有收到客戶端心跳的服務例項,會將它的 healthy內容置為false ,客戶端無法呼叫healthy為false的服務。

如果超過 30秒 沒有收到心跳,Nacos會直接將此 服務剔除

也可以透過伺服端主動登出的方式,停止註冊。

服務1呼叫服務2時,服務1會透過定時任務到Nacos中獲取線上的服務,保證所呼叫的服務一直都是健康線上的狀態。

獲取到之後,用緩存將其保存起來,然後透過負載均衡器呼叫服務2,此時,將不再使用伺服端的負載均衡Nginx了。

三、Nacos Discovery

SpringBoot中引入Nacos Discovery,實作與Nacos的無縫連線 ,Nacos Discovery可以將服務自動註冊到Nacos伺服端,並且能夠動態感知此服務,並重新整理服務列表。並將服務的host、port、URL等資訊註冊到Nacos。

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

Nacos 的配置項資訊:

四、Nacos核心功能

Nacos核心功能

1、服務註冊

Nacos Client會透過發送REST請求向Nacos Server註冊自己的服務,提供自身的後設資料 ,比如host、port、url等資訊,Nacos Server在收到註冊請求後,會將這些數據資訊儲存在一個雙層的記憶體map中。

2、服務心跳

服務註冊後,服務消費者和Nacos Server之間會維護一個心跳,定時通知server,此服務還活著,防止被剔除掉。

3、服務同步

Nacos Server集群之間會互相同步已註冊的服務,用來保證服務列表的一致性。

4、服務發現

服務消費者在呼叫服務提供者的服務時,會發送一個REST請求到Nacos Server,獲取健康的服務列表,然後將其緩存到本地,同時開啟一個定時任務,定時存取Nacos Server,然後更新本地緩存。

5、服務健康檢查

Nacos Server會開啟一個定時任務用來檢查註冊服務例項的健康情況 ,對於超過15秒沒有收到客戶端心跳的服務例項,會將它的healthy內容置為false,客戶端無法呼叫healthy為false的服務,如果超過30秒沒有收到心跳,Nacos會直接將此服務剔除。

五、作為註冊中心

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

2、 Eureka ,因為挺更的緣故,比較新的技術都不支持了,目前很多公司都將Eureka換成Nacos了,不推薦使用;

3、 Zookeeper ,用的最多的地方就是和Dubbo一起使用,不支持負載均衡策略,但可以透過其它元件實作;

4、 Consul 支持的也很多;

CAP,C一致性,A可用性,P分區容錯性

Nacos Eureka Zookeeper Consul
一致性協定 CP + AP AP CP CP
存取協定 HTTP/DNS HTTP TCP HTTP/DNS
健康檢查 TCP/HTTP/MYSQL/Client Beat Client Beat Keep Live TCP/HTT[/gRPC/Cmd
負載均衡策略 權重/metadata/Seletor Ribbon - Fabio
雪崩保護
自動登出 支持 支持 支持 支持
監聽 支持 支持 支持 支持
多數據中心 支持 支持 支持 不支持
跨註冊中心同步 支持 不支持 不支持 支持
Spring Cloud整合 支持 支持 支持 支持
Dubbo整合 支持 不支持 支持 支持
K8S整合 支持 不支持 支持 不支持

六、作為配置中心

1、SpringBoot整合Nacos

Nacos使用key/value形式儲存配置資訊,為分布式系統中的外部化配置提供服務支持。

(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)主方法啟動類

@SpringBootApplication
public classProviderApplication{
publicstaticvoidmain(String[] args){
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication. classargs);
String name = applicationContext.getEnvironment().getProperty("blog.name");
String language = applicationContext.getEnvironment().getProperty("blog.language");
System.err.println("公眾號 :"+name+"; 擅長技術: "+language);
}
}

2、支持配置的動態更新

一秒重新整理一次。

@SpringBootApplication
public classProviderApplication{
publicstaticvoidmain(String[] args){
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication. classargs);
while(true) {
//當動態配置重新整理時,會更新到 Enviroment中,因此這裏每隔一秒中從Enviroment中獲取配置
String name = applicationContext.getEnvironment().getProperty("blog.name");
String language = applicationContext.getEnvironment().getProperty("blog.language");
System.err.println("公眾號 :"+name+"; 擅長技術: "+language);
TimeUnit.SECONDS.sleep(1);
}
}
}

3、可支持profile粒度的配置

4、支持自訂 namespace 的配置

開發測試環境和生產環境的資源(如配置、服務)隔離等,比如dev和prod。

5、支持自訂 Group 的配置

在沒有明確指定 ${spring.cloud.nacos.config.group} 配置的情況下, 預設使用的是 DEFAULT_GROUP 。如果需要自訂自己的 Group,可以透過以下配置來實作:

spring.cloud.nacos.config.group=DEVELOP_GROUP

6、配置優先級

profile > 預設配置檔 > extension-configs(下標越大優先級越高) > shared-configs(下標越大優先級越高)

7、@RefreshScope

一般都是透過@Value的形式讀取配置檔中的資訊,但是無法感知修改後的值,需要利用 @RefreshScope動態重新整理

8、Spring Cloud Config 橫向對比Nacos

(1) Spring Cloud Config需要結合Git使用,動態變更需要配合Bus 訊息匯流排來通知所有的客戶端變化;

(2)Spring Cloud Config沒有視覺化界面;

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

- EOF -

最後給大家推薦一個ChatGPT 4o國內網站,是我們團隊一直在使用的,我們對接的是OpenAI官網的帳號,給大家打造了一個一模一樣的ChatGPT,很多粉絲朋友現在也都透過我拿這種號,價格不貴,關鍵還有售後 。

一句話說明 用官方一半價格的錢,用跟官方 ChatGPT4.0 一模一樣功能的工具,而且不需要魔法,直接使用,不用擔心網路問題。

功能簡介:O penAI最新大模型GPT-4o、ChatGPT4.0知識問答、最強程式碼大模型Code Copilot、DALL-E AI繪畫、寫論文大模型Consensus、論文降重大模型(中文論文降重)、圖片自動辨識、聯網查詢、BUG解決、程式碼最佳化、上傳檔、數據分析等。

國內直接使用 ChatGPT4o

  1. 支持OpenAI最新的ChatGPT4o。

  2. 無需魔法, 同時支持 PC、手機、平板,瀏覽器直接使用

  3. 一個帳號一個專屬授權碼,保護個人私密,使用記錄長期保存。

  4. ChatGPT3.5永久免費, 提供免費共享GPT3.5授權碼 。

  5. 官方獨立帳戶規定每3小時40次 4.0提問,我們這個不限制4.0提問次數。

  6. 我們這個不會出現封號的情況,避免你因為封號多花冤枉錢。

  7. 聯系站長 18640839506 ,備註AI,直接使用ChatGPT4o,拉你進ChatGPT售後群,群公告有使用說明和註意事項,有任何問題群裏交流,群裏有專業的技術支持

ChatGPT4o

NOW 6 .3

回復gpt,獲取ChatGPT4o直接使用地址

點選閱讀原文,國內直接使用ChatGpt4o