Nacos預研
一、前言
為什麼要做Spring Cloud Alibaba Nacos調研?
spring cloud中的幾乎所有的元件都使用Netflix公司的産品,然後在其基礎上做了一層封裝。然而Netflix的服務發現元件Eureka已經停止更新,而其他的衆多元件預計會在今年停止維護。是以急需其他的一些替代産品,也就是spring cloud alibaba,目前正處于蓬勃發展的态式。
二、Spring Cloud Alibaba簡介
Spring Cloud Alibaba 緻力于提供分布式應用服務開發的一站式解決方案。項目包含開發分布式應用服務的必需元件,友善開發者通過 Spring Cloud 程式設計模型輕松使用這些元件來開發分布式應用服務。
已包括的元件有:
Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個次元保護服務的穩定性。
Nacos:一個更易于建構雲原生應用的動态服務發現、配置管理和服務管理平台。
RocketMQ:一款開源的分布式消息系統,基于高可用分布式叢集技術,提供低延時的、高可靠的消息釋出與訂閱服務。
Dubbo:Apache Dubbo 是一款高性能 Java RPC 架構。
Seata:阿裡巴巴開源産品,一個易于使用的高性能微服務分布式事務解決方案。
Alibaba Cloud ACM:一款在分布式架構環境中對應用配置進行集中管理和推送的應用配置中心産品。
Alibaba Cloud OSS: 阿裡雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿裡雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和通路任意類型的資料。
Alibaba Cloud SchedulerX: 阿裡中間件團隊開發的一款分布式任務排程産品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務排程服務。
Alibaba Cloud SMS: 覆寫全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
三、Spring Cloud Alibaba與Spring官方提供的方案對應關系
Nacos | = | Eureka/Consule + Config + Admin |
---|---|---|
Sentinel | = | Hystrix + Dashboard + Turbine |
Dubbo | = | Ribbon + Feign |
RocketMQ | = | RabbitMQ |
Schedulerx | = | Quartz |
四、Nacos介紹
nacos的優點,為什麼要選擇它?
Nacos是阿裡的一個開源産品,它是針對微服務架構中的服務發現、配置管理、服務治理的綜合型解決方案。
Nacos主要提供以下四大功能:
- 服務發現與服務健康檢查
Nacos使服務更容易注冊,并通過DNS或HTTP接口發現其他服務,Nacos還提供服務的實時健康檢查,以防止向不健康的主機或服務執行個體發送請求。
- 動态配置管理
動态配置服務允許您在所有環境中以集中和動态的方式管理所有服務的配置。Nacos消除了在更新配置時重新部署應用程式,這使配置的更改更加高效和靈活。
- 動态DNS服務
Nacos提供基于DNS 協定的服務發現能力,旨在支援異構語言的服務發現,支援将注冊在Nacos上的服務以域名的方式暴露端點,讓三方應用友善的查閱及發現。
- 服務和中繼資料管理
Nacos 能讓您從微服務平台建設的視角管理資料中心的所有服務及中繼資料,包括管理服務的描述、生命周期、服務的靜态依賴分析、服務的健康狀态、服務的流量管理、路由及安全政策。
4.1 nacos之注冊中心,服務發現。
4.1.1 主流服務發現與配置中心對比
對比項目 | Nacos | Eureka | Consul | Zookeeper |
---|---|---|---|---|
一緻性協定 | 支援AP和CP模型 | AP模型 | CP模型 | CP模型 |
健康檢查 | TCP/HTTP/MYSQL/Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | Keep Alive |
負載均衡政策 | 權重/metadata/Selector | Ribbon | Fabio | - |
雪崩保護 | 有 | 有 | 無 | 無 |
自動登出執行個體 | 支援 | 支援 | 不支援 | 支援 |
通路協定 | HTTP/DNS | HTTP | HTTP/DNS | TCP |
監聽支援 | 支援 | 支援 | 支援 | 支援 |
多資料中心 | 支援 | 支援 | 支援 | 不支援 |
跨注冊中心同步 | 支援 | 不支援 | 支援 | 不支援 |
SpringCloud內建 | 支援 | 支援 | 支援 | 不支援 |
Dubbo內建 | 支援 | 不支援 | 不支援 | 支援 |
k8s內建 | 支援 | 不支援 | 支援 | 不支援 |
從上面對比可以了解到,Nacos作為服務發現中心,具備更多的功能支援項,且從長遠來看Nacos在以後的版本會支援SpringCLoud+Kubernetes的組合,填補 2 者的鴻溝,在兩套體系下可以采用同一套服務發現和配置管理的解決方案,這将大大的簡化使用和維護的成本。另外,Nacos 計劃實作 Service Mesh,也是未來微服務發展的趨勢。
Nacos在經過阿裡内部多年生産經驗後提煉出的資料模型,則是一種服務-叢集-執行個體的三層模型,這樣基本可以滿足服務在所有場景下的資料存儲和管理。
命名空間(Namespace)
用于進行租戶粒度的配置隔離,命名空間不僅适用于nacos的配置管理,同樣适用于服務發現。Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生産環境的資源(如配置、服務)隔離等。
服務
提供給用戶端的軟體功能,通過預定義接口網絡通路。
服務名
服務提供的辨別,通過該辨別可以唯一确定其指代的服務。
執行個體
提供一個或多個服務的具有可通路網絡位址(IP:Port)的程序,啟動一個服務,就産生了一個服務執行個體。
元資訊
Nacos資料(如配置和服務)描述資訊,如服務版本、權重、容災政策、負載均衡政策、鑒權配置、各種自定義标簽 (label),從作用範圍來看,分為服務級别的元資訊、叢集的元資訊及執行個體的元資訊。
叢集
服務執行個體的集合,服務執行個體組成一個預設叢集, 叢集可以被進一步按需求劃分,劃分的機關可以是虛拟叢集,相同叢集下的執行個體才能互相感覺。
應用通過Namespace、Service、Cluster(DEFAULT)的配置,描述了該服務向哪個環境(如開發環境)的哪個叢集注冊執行個體。
4.1.1.1 服務清單管理
服務清單幫助使用者以統一的視圖管理其所有的微服務以及服務健康狀态。整體界面布局是左上角有服務的搜尋框和搜尋按鈕,頁面中央是服務清單的展示。服務清單主要展示服務名、叢集數目、執行個體數目、健康執行個體數目和詳情按鈕五個欄目。
在服務清單頁面點選詳情,可以看到服務的詳情。可以檢視服務、叢集和執行個體的基本資訊。
4.1.1.2 服務流量權重支援及流量保護
Nacos 為使用者提供了流量權重控制的能力,同時開放了服務流量的門檻值保護,以幫助使用者更好的保護服務服務提供者叢集不被意外打垮。如下圖是以,可以點選執行個體的編輯按鈕,修改執行個體的權重。如果想增加執行個體的流量,可以将權重調大,如果不想執行個體接收流量,則可以将權重設為0。
4.1.1.3 服務中繼資料管理
Nacos提供多個次元的服務中繼資料的暴露,幫助使用者存儲自定義的資訊。這些資訊都是以K-V的資料結構存儲,在控制台上,會以k1=v1,k2=v2這樣的格式展示。類似的,編輯中繼資料可以通過相同的格式進行。例如服務的中繼資料編輯,首先點選服務詳情頁右上角的“編輯服務”按鈕,然後在中繼資料輸入框輸入:version=1.0。
4.1.1.4 服務優雅上下線
Nacos還提供服務執行個體的上下線操作,在服務詳情頁面,可以點選執行個體的“上線”或者“下線”按鈕,被下線的執行個體,将不會包含在健康的執行個體清單裡。
4.2 nacos之配置管理中心
4.2.1 主流配置中心對比
對比項目 | Spring Cloud Config | Apollo | Nacos |
---|---|---|---|
配置實時推送 | 支援(Spring Cloud Bus) | 支援(HTTP長輪詢1s内) | 支援(HTTP長輪詢1s内) |
版本管理 | 支援(Git) | 支援 | 支援 |
配置復原 | 支援(Git) | 支援 | 支援 |
灰階釋出 | 支援 | 支援 | 不支援 |
權限管理 | 支援(依賴Git) | 支援 | 不支援 |
多叢集 | 支援 | 支援 | 支援 |
多環境 | 支援 | 支援 | 支援 |
監聽查詢 | 支援 | 支援 | 支援 |
多語言 | 隻支援Java | 主流語言,提供了Open API | 主流語言,提供了Open API |
配置格式校驗 | 不支援 | 支援 | 支援 |
單機讀(QPS) | 7(限流所緻) | 9000 | 15000 |
單機寫(QPS) | 5(限流所緻) | 1100 | 1800 |
3節點讀(QPS) | 21(限流所緻) | 27000 | 45000 |
3節點寫(QPS) | 5(限流所緻) | 3300 | 5600 |
從配置中心角度來看,性能方面Nacos的讀寫性能最高,Apollo次之,Spring Cloud Config依賴Git場景不适合開放的大規模自動化運維API。功能方面Apollo最為完善,nacos具有Apollo大部配置設定置管理功能,而Spring Cloud Config不帶運維管理界面,需要自行開發。Nacos的一大優勢是整合了注冊中心、配置中心功能,部署和操作相比Apollo都要直覺簡單,是以它簡化了架構複雜度,并減輕運維及部署工作。綜合來看,Nacos的特點和優勢還是比較明顯的。
對于Nacos配置管理,通過Namespace、group、Data ID能夠定位到一個配置集。
配置集(Data ID)
在系統中,一個配置檔案通常就是一個配置集,一個配置集可以包含了系統的各種配置資訊,例如,一個配置集可能包含了資料源、線程池、日志級别等配置項。每個配置集都可以定義一個有意義的名稱,就是配置集的ID即Data ID。
配置項
配置集中包含的一個個配置内容就是配置項。它代表一個具體的可配置的參數與其值域,通常以 key=value 的形式存在。例如我們常配置系統的日志輸出級别(logLevel=INFO|WARN|ERROR) 就是一個配置項。
配置分組(Group)
配置分組是對配置集進行分組,通過一個有意義的字元串(如 Buy 或 Trade )來表示,不同的配置分組下可以有相同的配置集(Data ID)。當您在 Nacos 上建立一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱預設采用 DEFAULT_GROUP 。配置分組的常見場景:可用于區分不同的項目或應用,例如:學生管理系統的配置集可以定義一個group為:STUDENT_GROUP。
命名空間(Namespace)
命名空間(namespace)可用于進行不同環境的配置隔離。例如可以隔離開發環境、測試環境和生産環境,因為它們的配置可能各不相同,或者是隔離不同的使用者,不同的開發人員使用同一個nacos管理各自的配置,可通過namespace隔離。不同的命名空間下,可以存在相同名稱的配置分組(Group) 或 配置集。
4.2.1.1 配置清單
點選Nacos控制台的
配置管理->配置清單
菜單,即可看到以下界面展示:
界面中展示了不同namespace下的配置集清單,可點選左上角的不同namespace進行切換。
右上角“+“号或點選某配置集後的
編輯
按鈕可進入配置集編輯器。
Nacos支援 YAML、Properties、TEXT、JSON、XML、HTML 等常見配置格式線上編輯、文法高亮、格式校驗,幫助使用者高效編輯的同時大幅降低格式錯誤帶來的風險。
Nacos支援配置标簽的能力,幫助使用者更好、更靈活的做到基于标簽的配置分類及管理。同時支援使用者對配置及其變更進行描述,方面多人或者跨團隊協作管理配置。
還有編輯DIFF、配置集導出、配置集導入、配置集克隆等功能。
4.2.1.2 曆史版本
Nacos通過提供配置版本管理及其一鍵復原能力,幫助使用者改錯配置的時候能夠快速恢複,降低微服務系統在配置管理上的可用性風險。
4.2.1.3 監聽查詢
Nacos提供配置訂閱者即監聽者查詢能力,同時提供用戶端目前配置的MD5校驗值,以便幫助使用者更好的檢查配置變更是否推送到 Client 端。
4.2.1.4 外部mysql資料庫支援
在0.7版本之前,在單機模式時nacos使用嵌入式資料庫實作資料的存儲,不友善觀察資料存儲的基本情況。0.7版本增加了支援mysql資料源能力,具體的操作步驟:
- 1.安裝資料庫,版本要求:5.6.5+
- 2.初始化mysql資料庫,資料庫初始化檔案:nacos-mysql.sql
- 3.修改conf/application.properties檔案,增加支援mysql資料源配置(目前隻支援mysql),添加mysql資料源的url、使用者名和密碼。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/cbs_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
4.3 使用者、角色、權限管理
Nacos提供登入使用者建立修改删除管理,配置設定角色,配置設定權限管理。可以根據角色給不同資源配置設定讀寫權限。
五、Nacos相對于eureka+spring cloud config的優勢
1、引入簡單,spring cloud alibaba的目标是适應springcloud生态而不是取代它。是以它能很好地和spring cloud、spring boot很好地相容,針對不同的spring cloud、spring boot版本有與之相容的版本。
2、采用eureka+spring cloud config,我們的服務發現和配置中心需要分開維護,而springcloud config并沒有可視化的維護界面,需要自行開發,而nacos服務發現和配置管理使用者角色資源管理都是支援可視化操作,更易于我們維護,降低了運維成本。
3、eureka遇到性能瓶頸,官方停止了維護更新,而nacos正處于蓬勃發展的态勢。# 雲廣播架構之Nacos