javascript
Spring Cloud Alibaba搭建(二):Nacos注册中心
官方文檔地址:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
一、核心功能:
- 服務注冊:Nacos Client會通過發送REST請求的方式向Nacos Server注冊自己的服務,提供自身的元數據,比如ip地址、端口等信息。Nacos Server接收到注冊請求后,就會把這些元數據信息存儲在一個雙層的內存Map中。
- 服務心跳:在服務注冊后,Nacos Client會維護一個定時心跳來持續通知Nacos Server,說明服務一直處于可用狀態,防止被踢除,默認5s發送一次心跳。
- 服務同步:Nacos Server集群之間會互相同步服務實例,用來保證服務信息的一致性。
- 服務發現:服務消費者(Nacos Client)在調用服務提供者的服務時,會發送一個REST請求給Nacos Server,獲取上面注冊的服務清單,并且緩存在Nacos Client本地,同時會在Nacos Client本地開啟一個定時器任務定時拉取服務端最新的注冊表信息更新到本地緩存。
- 服務健康檢查:Nacos Server會開啟一個定時任務來檢查注冊服務實例的健康情況,對于超過15s沒有收到客戶端心跳的實例會將它的healthy屬性設置為false,如果某個實例超過30s沒有收到心跳,直接剔除該實例(被踢除的實例如果恢復發送心跳則會重新注冊)。
二、主流注冊中心功能對比
| 一致性協議 | CP+AP(默認AP) | AP | CP | — | CP |
| 健康檢查 | TCP/HTTP/MYSQL/Client Beat | Client Beat | TCP/HTTP/gRPC/CMD | — | Keep Alive |
| 負載均衡策略 | 權重/Metadata/Selector | Ribbon | Fabio | RoundRobin | — |
| 雪崩保護 | 有 | 有 | 無 | 無 | 無 |
| 自動注銷實例 | 支持 | 支持 | 支持 | 不支持 | 支持 |
| 訪問協議 | HTTP/DNS | HTTP | HTTP/DNS | DNS | TCP |
| 監聽支持 | 支持 | 支持 | 支持 | 不支持 | 支持 |
| 多數據中心 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
| 跨注冊中心同步 | 支持 | 不支持 | 支持 | 不支持 | 不支持 |
| Spring Cloud集成 | 支持 | 支持 | 支持 | 不支持 | 支持 |
| Dubbo集成 | 支持 | 不支持 | 支持 | 不支持 | 支持 |
| K8s集成 | 支持 | 不支持 | 支持 | 支持 | 不支持 |
CAP理論和BASE理論【引用文檔】
-
CAP定理:Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性); 這三個特性在任何分布式系統中都不能同時滿足,最多同時滿足兩個
-1-. CA:優先保證一致性和可用性,放棄分區容錯。這也意味著放棄系統的擴展性,系統不再是分布式的,有違設計的初衷。
-2-. CP:優先保證一致性和分區容錯性,放棄可用性。在數據一致性要求比較高的場合(譬如:zookeeper,Hbase)是比較常見的做法,一旦發生網絡故障或者消息丟失,就會犧牲用戶體驗,等恢復之后用戶才逐漸能訪問。
-3-. AP:優先保證可用性和分區容錯性,放棄一致性。NoSQL中的Cassandra就是這種架構。跟CP一樣,放棄一致性,不是說一致性就不保證了,而是逐漸的變得一致 -
BASE定理:Basically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的簡寫,BASE是對CAP中一致性和可用性權衡的結果,其來源于對大規模互聯網系統分布式實踐的結論,是基于CAP定理逐步演化而來的,其核心思想是即使無法做到強一致性(Strong consistency),但每個應用都可以根據自身的業務特點,采用適當的方式來使系統達到最終一致性(Eventual consistency)。
三、Nacos中AP模式源碼分析
四、Nacos版本選擇
對應版本可參考Spring Cloud Alibaba搭建(一):依賴版本選擇
由上圖可知nacos應下載1.4.2版本 ,下載地址:Nacos官方(GitHub)下載地址、Nacos碼云下載地址(更快)
tips:加速插件是“GitHub加速”,瀏覽器是edge瀏覽器;也可以復制鏈接使用迅雷下載,速度更快。
五、安裝Nacos
Nacos官方文檔:快速開始
1.預備環境準備
Nacos 依賴 Java 環境來運行。如果您是從代碼開始構建并運行Nacos,還需要為此配置 Maven環境,請確保是在以下版本環境中安裝使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。
- 64 bit JDK 1.8+;下載 & 配置。
- Maven 3.2.x+;下載 & 配置。
2.下載編譯后壓縮包方式
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz cd nacos/bin3.Nacos相關配置
4.Nacos支持三種部署模式
- 單機模式 - 用于測試和單機試用。
在0.7版本之前,在單機模式時nacos使用嵌入式數據庫實現數據的存儲,不方便觀察數據存儲的基本情況。0.7版本增加了支持mysql數據源能力,具體的操作步驟:
再以單機模式啟動nacos,nacos所有寫嵌入式數據庫的數據都寫到了mysql
- 集群模式 - 用于生產環境,確保高可用。
- 多集群模式 - 用于多數據中心場景。
Nacos支持NameServer路由請求模式,通過它您可以設計一個有用的映射規則來控制請求轉發到相應的集群,在映射規則中您可以按命名空間或租戶等分片請求…
5.啟動Nacos(nacos默認有內置存儲)
# 啟動命令(standalone代表著單機模式運行,非集群模式): startup.[sh|cmd] -m standalone 等價于將startup文件里面的export MODE="cluster" 為 export MODE="standalone "sh startup.sh -m standalone # 如果您使用的是ubuntu系統,或者運行腳本報錯提示[[符號找不到,可嘗試如下運行: bash startup.sh -m standalone# Windows startup.cmd -m standalone啟動成功:
六. 訪問:http://[IP]:[端口]/nacos/
application.properties可以更改默認的端口8848
默認的賬號和密碼都是nacos,進入后效果:
七、常見錯誤以及解決方案
-
刪除data目錄后,重新運行
-
必須配置JAVA_HOME,且需要JDK的版本為JDK8及其以上
-
更換JDK
八、注冊服務到Nacos
1.添加依賴
<!-- Nacos 注冊服務功能 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>2.啟動類配置
Spring Cloud最早是從2014年推出的,在推出的前期更新迭代速度非常快,頻繁發布新版本,目前更趨于穩定,變化稍慢一些;
Spring Cloud的版本并不是傳統的使用數字的方式標識,而是使用諸如:Angel、Brixton、Camden、Dalston、Edgware、Finchley、GreenWich、Hoxton…等倫敦的地名來命名版本
3.添加配置
spring:application:name: service-clint1 # 應用名稱(nacos會將該名稱當作服務名稱),注意:不能使用“—”(下劃線)cloud:nacos:server-addr: 127.0.0.1:8848 # Nacos 配置中心地址discovery:username: nacos # Nacos用戶名,默認為 nacospassword: nacos # Nacos密碼,默認為 nacosnamespace: public # 名稱空間,默認為 public關于 Nacos Starter 更多的配置項信息
3.啟動項目查看注冊結果
九、通過服務名調用接口
此處利用RestTemp測試調用
1.創建兩個項目(nacon_client1、nacons_client2),編寫兩個control層方法
創建兩個項目
nacon_client1項目control
nacon_client2項目control
2.直接訪問報錯,需要使用帶有負載均衡的RestTemplate
- java.net.unknownhostexception 錯誤
解決方法:改造RestTemplate,使其具有負載均衡的效果(加上@LoadBalanced注解)
@LoadBalanced注解 還報錯,還需要引用loadbalancer依賴(沒報錯就不用添加)
- java.lang.IllegalStateException: Request URI does not contain a valid hostname
解決辦法:服務名稱不能用下劃線,換成中劃線。
3.訪問成功
十、Nacos界面功能介紹
1.服務詳情
位置:服務管理 -> 服務列表 -> 服務詳情
十一、Nacos集群
文檔地址【運維指南->集權部署說明】:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
任務:使用centos部署Nacos偽集群(在一臺服務器中模擬)
前提條件:安裝jdk 1.8+ 、maven 3.0+ 、nginx、mysql(5.7+),安裝教程
1.下載Nacos 1.4.2(版本選擇看前面)
2.使用mysql數據庫,sql初始化腳本在conf目錄的nacos-mysql.sql
3.將下載的nacos解壓,并修改conf目錄下的application.properties配置,使用外置數據源
5.將conf\cluster.conf.example改為cluster.conf,添加節點配置
# 建議不要使用127.0.0.1 172.21.16.4:8849 172.21.16.4:8850 172.21.16.4:88517.如果出現內存不足:修改啟動腳本(bin\startup.sh)的jvm參數
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"8.將一份nacos拷貝三份,并修改端口(conf目錄下的application.properties文件的server.port=8848)
server.port=88489.官方推薦,nginx反向代理
upstream nacoscluster {server 172.21.16.4:8849;server 172.21.16.4:8850;server 172.21.16.4:8851; }server {listen 8848; access_log /var/log/nginx/nacos/access.log main;#配置請求規則location /nacos/{proxy_pass http://nacoscluster/nacos/;}}10.啟動三個nacos服務,并訪問
啟動成功(先判斷內存是否夠用 free -h;內存不夠會導致之前的服務掛掉,而且沒有錯誤日志信息)
使用nginx訪問
總結
以上是生活随笔為你收集整理的Spring Cloud Alibaba搭建(二):Nacos注册中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 墨画子卿第四章第3节:金光洞
- 下一篇: Docker 配置国内镜像加速器,加速下