SpringCloud之Nacos服務發現(十七)

一 Nacos簡介

Nacos是以服務爲主要服務對象的中間件,Nacos支持全部主流的服務發現、配置和管理。html

Nacos主要提供如下四大功能:java

  1. 服務發現與服務健康檢查mysql

    Nacos使服務更容易註冊本身並經過DNS或HTTP接口發現其餘服務。Nacos還提供服務的實時健康檢查,以防止向不健康的主機或服務實例發送請求。linux

  2. 動態配置管理nginx

    動態配置服務容許您在全部環境中以集中和動態的方式管理全部服務的配置。Nacos消除了在更新配置時從新部署應用程序和服務的須要,這使配置更改更加高效和靈活。git

  3. 動態DNS服務web

Nacos支持加權路由,使您能夠更輕鬆地在數據中心的生產環境中實施中間層負載平衡,靈活的路由策略,流量控制和簡單的DNS解析服務。它能夠幫助您輕鬆實現基於DNS的服務發現,並防止應用程序耦合到特定於供應商的服務發現API。算法

  1. 服務和元數據管理spring

Nacos提供易於使用的服務儀表板,可幫助您管理服務元數據,配置,kubernetes DNS,服務運行情況和指標統計。sql

1.1 Nacos整體概況

 

img

1.2 Nacos架構

 

image.png

2、註冊中心與配置中心橫向對比

2.1 Nacos與eureka註冊中心對比

對比項目\註冊中心 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

2.2服務配置中心對比

對比項目/配置中心 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大部分功能,最重要的是配置中心與註冊中心打通,能夠省去咱們在微服務治理方面 的一些投入(好比經過動態配置來啓停線程池等操做)。

2.3 初步選型結論

初步結論爲:使用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

3、Nacos其餘特性

3.1 Nacos Sync的價值

  • 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

 

3.2 DNS - F 的技術價值

Nacos提供DNS-F功能 DNS-F落地的技術價值

  • 填補了內部微服務業務沒有全局動態調度能力的空白

  • 解決了服務端棉鈴挑戰:時延大、解析不許、故障牽引慢

  • 支持服務端多種調度須要

  • 加速外部域名解析

  • 服務故障牽引秒級生效

  • 提供專線流量牽引能力

     

    image.png

3.3 目前使用Nacos的公司

阿里巴巴、虎牙直播、中國工商銀行、愛奇藝、中國平安、平安科技、浙江農信、貝殼、豐巢、百世快遞、汽車之家等

4、安裝Nacos

[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'

 


 

帳號密碼都是nacos 前面簡介參考:https://www.jianshu.com/p/afd7776a64c6

相關文章
相關標籤/搜索