嗨,你好呀,我是哪咤。
公司想招聘一個5年開發經驗的後端程式設計師,看了很多簡歷,發現一個共性問題, 普遍都沒用過Nacos,這正常嗎?
下面是已經入職的一位小夥伴的個人技能包,乍一看,還行,也沒用過Nacos。
午休的時候,和她聊了聊,她之前在一家對日的公司。
需求是產品談好的;
系統設計、詳細設計是PM做的;
介面文件、資料庫設計書是日本公司提供的;
最誇張的是, 就連按鈕的顏色,文件中都有標註...
她需要做的,就只是照著介面文件去編碼、測試就ok了。
有的面試者工作了5年,做的都是自家產品,計畫只有兩個, 翻來覆去的改BUG,加需求,做運維 。技術棧很老,還是SSM那一套,最近在改造,終於用上了SpringBoot... 微服務、訊息中介軟體、分布式鎖根本沒用過...
還有的面試者,在XX大廠工作, 中間做了一年C#,一年Go ,一看簡歷很華麗, 精通三國語言 ,其實不然,都處於入門階段,毫無競爭力可言。
一時興起,說多了,言歸正傳,總結一篇Nacos的文章, 豐富個人簡歷,提高面試level,給自己增加一點談資,秒變面試小達人,BAT不是夢。
一、什麽是Nacos?
一個更易於構建雲原生套用的動態服務發現、服務配置和服務管理平台。
Nacos的關鍵特性:
二、註冊中心演變及其設計思想
1、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獲取到介面後,呼叫服務2時,服務2宕機了,怎麽辦?
4、心跳版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核心功能
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. class, args);
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. class, args);
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 :
支持OpenAI最新的ChatGPT4o。
無需魔法, 同時支持 PC、手機、平板,瀏覽器直接使用 。
一個帳號一個專屬授權碼,保護個人私密,使用記錄長期保存。
ChatGPT3.5永久免費, 提供免費共享GPT3.5授權碼 。
官方獨立帳戶規定每3小時40次 4.0提問,我們這個不限制4.0提問次數。
我們這個不會出現封號的情況,避免你因為封號多花冤枉錢。
聯系站長 18640839506 ,備註AI,直接使用ChatGPT4o,拉你進ChatGPT售後群,群公告有使用說明和註意事項,有任何問題群裏交流,群裏有專業的技術支持
ChatGPT4o
NOW 6 .3
回復gpt,獲取ChatGPT4o直接使用地址
點選閱讀原文,國內直接使用ChatGpt4o