Nacos是以服務爲主要服務對象的中間件,Nacos支持全部主流的服務發現、配置和管理。html
Nacos主要提供如下四大功能:java
服務發現與服務健康檢查mysql
Nacos使服務更容易註冊本身並經過DNS或HTTP接口發現其餘服務。Nacos還提供服務的實時健康檢查,以防止向不健康的主機或服務實例發送請求。linux
動態配置管理nginx
動態配置服務容許您在全部環境中以集中和動態的方式管理全部服務的配置。Nacos消除了在更新配置時從新部署應用程序和服務的須要,這使配置更改更加高效和靈活。git
動態DNS服務web
Nacos支持加權路由,使您能夠更輕鬆地在數據中心的生產環境中實施中間層負載平衡,靈活的路由策略,流量控制和簡單的DNS解析服務。它能夠幫助您輕鬆實現基於DNS的服務發現,並防止應用程序耦合到特定於供應商的服務發現API。算法
服務和元數據管理spring
Nacos提供易於使用的服務儀表板,可幫助您管理服務元數據,配置,kubernetes DNS,服務運行情況和指標統計。sql
image.png
對比項目\註冊中心 | Spring Cloud Nacos | Spring Cloud Eureka |
---|---|---|
CAP模型 | 支持AP和CP模型 | AP模型 |
客戶端更新服務信息 | 使用註冊+DNS-f+健康檢查模式。 DNS-F客戶端使用監聽模式push/pull拉取更新信息 | 客戶端定時輪詢服務端獲取其餘服務ip信息並對比,相比之下服務端壓力較大、延遲較大 |
伸縮性 | 使用Raft選舉算法性能、可用性、容錯性均比較好,新加入節點無需與全部節點互相廣播同步信息 | 因爲使用廣播同步信息,集羣超過1000臺機器後對eureka集羣壓力很大 |
健康檢查模式/方式 | 支持服務端/客戶端/關閉檢查模式,檢查方式有tcp、http、sql。支持本身構建健康檢查器 | 客戶端向服務端發送http心跳 |
負載均衡 | 支持 | 支持 |
手動上下線服務方式 | 經過控制檯頁面和API | 經過調用API |
跨中心同步 | 支持 | 不支持 |
k8s集成 | 支持 | 不支持 |
分組 | Nacos可用根據業務和環境進行分組管理 | 不支持 |
權重 | Nacos默認提供權重設置功能,調整承載流量壓力 | 不支持 |
廠商 | 阿里巴巴 | Netflix |
對比項目/配置中心 | apollo | nacos |
---|---|---|
開源時間 | 2016.5 | 2018.6 |
配置實時推送 | 支持(HTTP長輪詢1s內) | 支持(HTTP長輪詢1s內) |
版本管理 | 自動管理 | 自動管理 |
配置回滾 | 支持 | 支持 |
權限管理 | 支持 | 待支持 |
多集羣多環境 | 支持 | 支持 |
監聽查詢 | 支持 | 支持 |
多語言 | Go,C++,Python,Java,.net,OpenAPI | Python,Java,Nodejs,OpenAPI |
分佈式高可用最小集羣數量 | Config2+Admin3+Portal*2+Mysql=8 | Nacos*3+MySql=4 |
配置格式校驗 | 支持 | 支持 |
通訊協議 | HTTP | HTTP |
數據一致性 | 數據庫模擬消息隊列,Apollo定時讀消息 | HTTP異步通知 |
單機讀(tps) | 9000 | 15000 |
單機寫(tps) | 1100 | 1800 |
nacos具備Apollo大部分功能,最重要的是配置中心與註冊中心打通,能夠省去咱們在微服務治理方面 的一些投入(好比經過動態配置來啓停線程池等操做)。
初步結論爲:使用Nacos代替Eureka和apollo,主要理由爲: 相比與Eureka: (1)Nacos具有服務優雅上下線和流量管理(API+後臺管理頁面),而Eureka的後臺頁面僅供展現,須要使用api操做上下線且不具有流量管理功能。 (2)從部署來看,Nacos整合了註冊中心、配置中心功能,把原來兩套集羣整合成一套,簡化了部署維護 (3)從長遠來看,Eureka開源工做已中止,後續再也不有更新和維護,而Nacos在之後的版本會支持SpringCLoud+Kubernetes的組合,填補 2 者的鴻溝,在兩套體系下能夠採用同一套服務發現和配置管理的解決方案,這將大大的簡化使用和維護的成本。同時來講,Nacos 計劃實現 Service Mesh,是將來微服務的趨勢 (4)從伸縮性和擴展性來看Nacos支持跨註冊中心同步,而Eureka不支持,且在伸縮擴容方面,Nacos比Eureka更優(nacos支持大數量級的集羣)。 (5)Nacos具備分組隔離功能,一套Nacos集羣能夠支撐多項目、多環境。
相比於apollo (1) Nacos部署簡化,Nacos整合了註冊中心、配置中心功能,且部署相比apollo簡單,方便管理和監控。 (2) apollo容器化較困難,Nacos有官網的鏡像能夠直接部署,整體來講,Nacos比apollo更符合KISS原則 (3)性能方面,Nacos讀寫tps比apollo稍強一些
結論:使用Nacos代替Eureka和apollo
NacosSync是一個支持多種註冊中心的同步組件,基於Spring boot開發框架,數據層採用Spring Data JPA,遵循了標準的JPA訪問規範,支持多種數據源存儲,默認使用Hibernate實現,更加方便的支持表的自動建立更新
使用了高效的事件異步驅動模型, 支持多種自定義事件,使得同步任務處理的延時控制在3s,8C16G的單機可以支持6K的同步任務
NacosSync除了單機部署,也提供了高可用的集羣部署模式,NacosSync是無狀態設計,將任務等狀態數據遷移到了數據庫,使得集羣擴展很是方便
抽象出了Sync組件核心接口,經過註解對同步類型進行區分,使得開發者能夠很容易的根據本身需求,去擴展不一樣註冊中心,目前已支持的同步類型:
Nacos數據同步到Nacos
Zookeeper數據同步到Nacos
Nacos數據同步到Zookeeper
Eureka數據同步到Nacos
Consul數據同步到Nacos
系統模塊架構
image.png
使用場景 多個網絡互通的Region之間服務共享,打破Region之間的服務調用限制
image.png
Nacos提供DNS-F功能 DNS-F落地的技術價值
填補了內部微服務業務沒有全局動態調度能力的空白
解決了服務端棉鈴挑戰:時延大、解析不許、故障牽引慢
支持服務端多種調度須要
加速外部域名解析
服務故障牽引秒級生效
提供專線流量牽引能力
image.png
阿里巴巴、虎牙直播、中國工商銀行、愛奇藝、中國平安、平安科技、浙江農信、貝殼、豐巢、百世快遞、汽車之家等
[root@topcheer mnt]# ll 總用量 3005528 drwxr-xr-x 9 root root 160 10月 4 20:30 apache-tomcat-7.0.70 -rw-r--r-- 1 root root 8924465 10月 4 20:30 apache-tomcat-7.0.70.tar.gz -rw-r--r-- 1 root root 540 9月 21 22:14 Dockerfile drwxr-xr-x 9 es es 155 9月 21 22:58 elasticsearch-6.2.3 -rw-r--r-- 1 root root 29050159 9月 21 22:45 elasticsearch-6.2.3.tar.gz -rw-r--r-- 1 root root 128 9月 29 21:47 elasticsearch.yml -rw-r--r-- 1 root root 780598784 9月 29 21:27 es.tar -rw-r--r-- 1 root root 412774002 5月 30 2018 gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm -rw-r--r-- 1 root root 78245883 9月 30 14:25 jenkins.war drwxrwxr-x 12 wgr wgr 249 9月 21 23:34 kibana-6.2.3-linux-x86_64 -rw-r--r-- 1 root root 83426328 9月 21 22:45 kibana-6.2.3-linux-x86_64.tar.gz -rw-r--r-- 1 root root 768809984 9月 29 21:29 kibana.tar -rw-r--r-- 1 root root 17446309 9月 21 22:12 logstash-0.0.1-SNAPSHOT.jar drwxr-xr-x 12 root root 289 9月 22 12:32 logstash-6.2.3 -rw-r--r-- 1 root root 138221072 9月 21 22:45 logstash-6.2.3.tar.gz -rw-r--r-- 1 root root 677771264 9月 29 21:31 logstash.tar drwxr-xr-x 10 root root 171 10月 24 23:34 nacos -rw-r--r-- 1 root root 44275341 10月 24 23:25 nacos.tar.gz drwxr-xr-x 9 es es 186 10月 4 21:41 nginx-1.12.2 -rw-r--r-- 1 root root 981687 10月 4 20:30 nginx-1.12.2.tar.gz drwxr-xr-x 9 1169 1169 12288 10月 4 21:40 pcre-8.37 -rw-r--r-- 1 root root 2041593 10月 4 20:30 pcre-8.37.tar.gz drwxr-xr-x 11 es es 4096 10月 6 16:52 zookeeper-3.4.10 -rw-r--r-- 1 root root 35042811 10月 6 15:27 zookeeper-3.4.10.tar.gz [root@topcheer mnt]#
解壓壓縮包,須要jdk8及以上的環境,而後執行數據庫的腳本nacos-mysql.sql
[root@topcheer conf]# ll 總用量 60 -rw-r--r-- 1 501 games 1765 10月 24 23:31 application.properties -rw-r--r-- 1 501 games 408 4月 6 2019 application.properties.example -rw-r--r-- 1 501 games 58 4月 6 2019 cluster.conf.example -rw-r--r-- 1 501 games 26100 4月 10 2019 nacos-logback.xml -rw-r--r-- 1 501 games 9788 4月 9 2019 nacos-mysql.sql -rw-r--r-- 1 501 games 7196 4月 10 2019 schema.sql [root@topcheer conf]#
修改配置application.properties
db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456
啓動
nohup sh startup.sh -m standalone &
查看日誌
[root@topcheer bin]# /usr/local/jak/jdk1.8.0_181/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Djava.ext.dirs=/usr/local/jak/jdk1.8.0_181/jre/lib/ext:/usr/local/jak/jdk1.8.0_181/lib/ext:/mnt/nacos/plugins/cmdb:/mnt/nacos/plugins/mysql -Xloggc:/mnt/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dnacos.home=/mnt/nacos -jar /mnt/nacos/target/nacos-server.jar --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/mnt/nacos/conf/ --logging.config=/mnt/nacos/conf/nacos-logback.xml nacos is starting ,--. ,--.'| ,--,: : | Nacos 1.0.0 ,`--.'`| ' : ,---. Running in stand alone mode, All function modules | : : | | ' ,'\ .--.--. Port: 8848 : | \ | : ,--.--. ,---. / / | / / ' Pid: 26163 | : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.180.113:8848/nacos/index.html ' ' ;. ;.--. .-. | / / '' | |: :| : ;_ | | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io ' : | ; .' ," .--.; |' ; :__| : | `----. \ | | '`--' / / ,. |' | '.'|\ \ / / /`--' / ' : | ; : .' \ : : `----' '--'. / ; |.' | , .-./\ \ / `--'---' '---' `--`---' `----' 2019-10-25 00:01:33,057 INFO Bean 'org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration' of type [org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration$$EnhancerBySpringCGLIB$$9b21802a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-10-25 00:01:33,216 INFO Bean 'objectPostProcessor' of type [org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-10-25 00:01:33,219 INFO Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@5965d37' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-10-25 00:01:33,225 INFO Bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration' of type [org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration$$EnhancerBySpringCGLIB$$bff622dc] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-10-25 00:01:33,233 INFO Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-10-25 00:01:34,342 INFO Tomcat initialized with port(s): 8848 (http) 2019-10-25 00:01:34,575 INFO Root WebApplicationContext: initialization completed in 5344 ms 2019-10-25 00:01:39,857 INFO Initializing ExecutorService 'applicationTaskExecutor'
![](http://static.javashuo.com/static/loading.gif)
帳號密碼都是nacos 前面簡介參考:https://www.jianshu.com/p/afd7776a64c6