從2018 年 Nacos 開源說起

2021-01-19 阿里云云棲號

2018 年夏天

國內微服務開源 領域,迎來了一位新成員。此後,在構建微服務註冊中心和配置中心的過程中,國內開發者多了一個可信賴的選項。

Nacos 是阿里巴巴開源的一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺(官方網站),它凝聚了阿里巴巴十多年來在超大規模註冊和配置上的最佳實踐,可以用在微服務場景作為服務註冊中心、配置中心等核心場景中,和阿里的其他微服務開源項目一樣,Nacos 也是始於阿里,成長於社區的典型。

為什麼要開源 Nacos ?

在大規模服務發現和服務治理領域,現有的開源解決方案並非已經非常完美,阿里巴巴從 IOE 集中式應用架構升級為網際網路分布式服務化架構的演進過程中,積累了大量有關服務註冊和服務配置的實踐經驗,而這些經驗是可以在各個行業大規模復用。除此之外,更重要的是,希望和社區開發者共同發展,讓 Nacos 可以幫助國內企業更自由的構建基於雲原生應用的動態服務發現、配置和服務管理。

相比其他服務註冊和配置中心開源方案,Nacos 的起步雖然晚了點,但除了註冊和配置中心的功能外,他還提供了動態服務發現、服務共享與管理的功能,在大規模場景下具備更優秀的性能,在易用性上更便捷,分布式部署上更靈活。例如和 Consul / Eureka / Zookeeper 相比:(內容摘自《主流微服務註冊中心淺析和對比》)

不想自己運維Nacos? 阿里雲微服務引擎MSE提供Nacos託管服務

阿里雲微服務引擎 ( MSE ) 是開源註冊、配置中心的全託管平臺,提供高可用、免運維的 ZooKeeper、Nacos 註冊中心 和 Eureka 等集群,完全兼容開源產品標準接口,無需修改代碼、開箱即用,並為客戶提供相應的監控和運維工具。產品官網:https://www.aliyun.com/product/mse那麼,MSE託管的註冊中心,和開源自建註冊中心究竟有什麼區別?可以通過下面這張表來進行對比。

從了解到實踐

Dubbo 應用如何保證業務不停機的情況下無縫遷移到MSE?

下面以基於 SpringBoot 構建的 Dubbo 應用為例介紹如何進行遷移

第一步:引入用於遷移的定製化註冊中心依賴

雖然 Dubbo 本身提供了配置多註冊中心的能力,但其存在比較大的局限性,當消費者配置多註冊中心時,Dubbo 原有的策略為優先選取第一個註冊中心的地址,若其地址為空,再讀取第二個,依次類推選取地址。理想的模型應當是多個註冊中心的地址合併後隨機選取,為此,MSE 提供了專門的註冊中心擴展,解決該問題:

<dependency><groupId>com.alibaba.edas</groupId><artifactId>edas-dubbo-migration-bom</artifactId><version>2.6.5.1</version><type>pom</type></dependency>

其中 edas-dubbo-migration-bom 有 2.6.5.1 和 2.7.5 兩個版本,分別對應 Dubbo 2.6.x 和 Dubbo 2.7.x 兩個大版本。

第二步:購買 MSE Nacos 實例,並配置對應 nacos server address

在 MSE 控制臺購買相同 VPC 內的 Nacos 實例,並在應用的 application.properties 配置文件增加:

dubbo.registry.address = edas-migration://30.5.124.15:9999?service-registry=consul://${consulAddress}:8500,nacos://${nacosAddress}:8848&reference-registry=consul://${consulAddress}:8500,nacos://${nacosAddress}:8848

說明:

edas-migration://30.5.124.15:9999

多註冊中心的頭部信息。可以不做更改,ip 和 port 可以任意填寫,主要是為了兼容 Dubbo 對 ip 和 port 的校驗。啟動時,如果日誌級別是 WARN 及以下,可能會拋一個 WARN 的日誌,可以忽略。

service-registry

服務註冊的註冊中心地址。寫入多個註冊中心地址。每個註冊中心都是標準的 Dubbo 註冊中心格式;多個用 , 分隔。

reference-registry

服務訂閱的註冊中心地址。每個註冊中心都是標準的 Dubbo 註冊中心格式;多個用,分隔。

第三步:確認雙註冊方案成功

啟動應用,並觀察到 MSE 實例的服務管理頁面中註冊上了提供者和消費者的信息。

同時在 Consul 的控制臺中也能看相應的信息:

並且確認應用可以正常訪問,到目前為止我們第一個應用遷移完畢。

第四步:依照遷移第一個應用的遷移步驟,逐步遷移全量應用

第五步 清理遷移配置

遷移完成後,刪除原註冊中心的配置和遷移過程專用的依賴 edas-dubbo-migration-bom,在業務量較小的時間分批重啟應用。edas-dubbo-migration-bom 是一個遷移專用的 starter,雖然長期使用對您業務的穩定性沒有影響,但其並不會跟隨 Dubbo 的版本進行升級,為避免今後框架升級過程中出現兼容問題,推薦您在遷移完畢後清理掉,然後在業務量較小的時間分批重啟應用。

Spring Cloud 應用如何保證業務不停機的情況下無縫遷移到MSE?

Spring Cloud 默認只支持 1 個註冊中心,所以無法完成不停機的無縫遷移,這裡對此作了增強,支持了雙註冊雙訂閱的模式,確保業務不停機進行遷移。

遷移方案:選擇最先遷移的應用,建議是從最下層 Provider 開始遷移。但如果調用鏈路太複雜,比較難分析,也可以任意選一個應用進行遷移。選擇完成後,即可參考下面的遷移步驟遷移第一個應用。

第一步:購買 MSE Nacos 實例,並配置對應 nacos server address

在 MSE 控制臺購買相同 vpc 內的 Nacos 實例,並在應用的 application.properties 配置文件增加:

spring.cloud.nacos.discovery.server-addr={MSE對應Nacos實例的域名}:8848

第二步:在應用程式中添加依賴

在 pom.xml 文件中添加 spring-cloud-starter-alibaba-nacos-discovery 依賴。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>{相應的版本}</version></dependency>

默認情況下 Spring Cloud 只支持在依賴中引入一個註冊中心,當存在多個註冊中心時:啟動會報錯。所以這裡需要添加一個依賴 edas-sc-migration-starter,使 Spring Cloud 應用支持多註冊。

<dependency><groupId>com.alibaba.edas</groupId><artifactId>edas-sc-migration-starter</artifactId><version>1.0.2</version></dependency>

Ribbon 是實現負載均衡的組件,為了使應用可以支持從多個註冊中心訂閱服務,需要修改 Ribbon 配置。在應用啟動的主類中,將 RibbonClients 默認配置為 MigrationRibbonConfiguration 。假設原有的應用主類啟動代碼如下:

@SpringBootApplicationpublicclassConsumerApplication{ publicstaticvoidmain(String[] args){ SpringApplication.run(ConsumerApplication.class, args); } }

那麼修改後的應用主類啟動代碼如下:

@SpringBootApplication@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class) publicclassConsumerApplication{ publicstaticvoidmain(String[] args){ SpringApplication.run(ConsumerApplication.class, args); } }

第三步:確認雙註冊方案成功

啟動應用,並觀察到 MSE 實例的服務管理中註冊上我們的服務。

同時在 Consul 的控制臺中也能看到我們的服務。

並且確認應用可以正常訪問,到目前為止我們第一個應用遷移完畢。

第四步:依照遷移第一個應用的遷移步驟,逐步遷移全量應用

第五步:清理遷移配置

遷移完成後,刪除原有的註冊中心的配置和遷移過程專用的依賴 edas-sc-migration-starter ,在業務量較小的時間分批重啟應用。edas-sc-migration-starter 是一個遷移專用的 starter,雖然長期使用對您業務的穩定性沒有影響,但在 Ribbon 負載均衡實現方面有一定的局限性,推薦您在遷移完畢後清理掉,然後在業務量較小的時間分批重啟應用。

關於動態調整服務註冊和訂閱方式:依賴 edas-sc-migration-starter 具備配合配置中心達到動態調整服務註冊和訂閱方式的效果,在完成遷移過程中,您可以通過修改您的配置動態變更服務註冊和訂閱方式。

動態調整服務訂閱默認的訂閱策略是從所有註冊中心訂閱,並對數據做一些簡單的聚合。

您可以通過在您的配置中心修改 spring.cloud.edas.migration.subscribes 屬性以便選擇從哪幾個註冊中心訂閱數據。

spring.cloud.edas.migration.subscribes=nacos,consul # 同時從 Consul 和 Nacos 訂閱服務spring.cloud.edas.migration.subscribes=nacos # 只從 Nacos 訂閱服務

動態變更服務註冊默認的註冊策略是註冊到所有註冊中心。您可以通過在您的配置中心的spring.cloud.edas.migration.registry.excludes 屬性來選擇關閉指定的註冊中心。

spring.cloud.edas.migration.registry.excludes= #默認值為空,註冊到所有的服務註冊中心spring.cloud.edas.migration.registry.excludes=consul #關閉 Consul 的註冊spring.cloud.edas.migration.registry.excludes=nacos,consul #關閉 Nacos 和 Consul 的註冊

阿里雲微服務引擎 MSE 重磅升級發布會即將開啟

拋開擔憂,迎接確性。

從配置中心,到微服務全面治理,MSE 正在迎接他的第一個成人禮,在原有配置中心託管的基礎上,全面升級引入微服務治理能力,並通過 Java Agent 技術使得您的應用無需修改任何代碼和配置,即可享有阿里雲提供的微服務治理能力,已經上線的功能包含服務查詢、無損下線、服務鑑權、離群實例摘除、標籤路由。

相關焦點

  • Sentinel Dashboard(基於1.8.1)流控規則持久化到Nacos——涉及...
    =127.0.0.1:8848spring.cloud.sentinel.datasource.flow.nacos.data-id=${spring.application.name}-flow-rulesspring.cloud.sentinel.datasource.flow.nacos.group-id=SENTINEL_GROUPspring.cloud.sentinel.datasource.flow.nacos.data-type
  • 開源中國 2018 新增開源軟體最受歡迎 TOP 50
    今天公布的這份榜單 —— 開源中國 2018 新增開源軟體最受歡迎 TOP 50,所挑選的軟體來自於 2018 年開源中國新收錄的非國產開源軟體。根據軟體的關注度、活躍度以及影響力,再剔除掉一些不符合要求的開源軟體,最終生成了這份榜單。
  • 2026 年全球開源數目將超 3 億!中國開源爆發進行時,關於中國開源...
    相關統計數據顯示,全球開源項目數量呈指數級增長,截至 2019 年 GitHub 託管倉庫已有 1.4 億,2019 年新增倉庫 4400 萬個,創建第一個項目的用戶比 2018 年增加 44%。SourceClear 調查報告預測,2026 年全球開源項目數量將超過 3 億。開源,正處於一片狂歡中。
  • 前海開源乾盛定開債2020年首次分紅
    中證網訊(記者 餘世鵬)2020年1月6日,前海開源乾盛定期開放債券型發起式證券投資基金(下稱「前海開源乾盛定開債」)發布公告稱,以2019
  • 微軟又失一城,細數這些年高調擁抱開源的組織機構
    法國最初擁抱開源被外界認為有「反美主義」的原因在。法國軍方和文化通訊部在2006年11月就宣布,已經全面過渡向開放資源 Linux 作業系統。從2007年3月,法國國民議會開始在1154臺辦公電腦上安裝免費的開源作業系統 Ubuntu,以及開源軟體 OpenOffice 等。2018年,法國政府向高校學生免費派發了175000份裝有開源軟體的 U 盤。
  • 前海開源乾盛定開債基金年內第三次分紅
    中證網訊(記者 餘世鵬)3月30日,前海開源乾盛定期開放債券型發起式證券投資基金(下稱「前海開源乾盛定開債基金」)發布公告稱,以3月20日為基準日
  • 而在開源軟體的使用中,資料庫是香餑餑
    「開源軟體」這個術語自1988年誕生至今已有20多年歷史,已經成為全球IT軟體的重要組成,越來越多的人選擇擁抱開源,開源社區流行著這樣一句話:「只要有足夠多的眼睛,就可以讓所有問題浮出水面。」
  • 開源:從「復興」走向「商業化」
    直到2015年,需求突然噴發,代碼貢獻量激增,才讓他們開始思考如何商業化。這是大多數團隊都會經歷的一個過程,更有意思的是,Databricks的CEO Ali和HashiCorp的Armon都認為:成功的開源項目背後能持續提供核心支持的往往只是一個精簡的團隊或一家公司,最多兩家。
  • 騰訊雲十年新風向:雲原生與開源的未來
    消除內部的技術孤島2018年930變革中,騰訊除了新成立CSIG、PCG兩大事業群之外,還有一個重要舉措是成立技術委員會,實際上承擔了騰訊內部當時一段時間裡「開源協同」和「自研上雲」兩大戰略的實施。在此之前,騰訊內部開源文化匱乏,各部門之間缺乏技術合作,代碼也互不開放。
  • 資源 | 2018 AIIDE星際爭霸AI挑戰賽亞軍CherryPi開源TorchCraftAI
    不久前,2018 AIIDE StarCraft AI 挑戰賽順利結束。
  • 軟體時代|開源,希冀還是噩夢?
    早在2014年6月,馬斯克就在其個人社交媒體帳戶上宣布將免費公開特斯拉的所有專利:「特斯拉不會對那些善意使用我們技術的人提起訴訟,特斯拉的專利都是開源的。」 特斯拉在GitHub上的官方帳號 2018年,特斯拉甚至還在GitHub上共享了Autopilot的系統鏡像以及Coreboot代碼庫。
  • 2019 年開源資料庫報告發布:MySQL 仍衛冕
    ,並想知道哪些資料庫在2019年最受歡迎?我們在上個月的Percona Live活動中找到了你需要的所有答案,並將這些見解分解為以下的趨勢報告:2019年熱門資料庫使用情況那麼,哪些資料庫在2019年最受歡迎?
  • 開源提供了成功的路線圖
    更別說2018年被IBM以340億美元的收購開源公司的鼻祖Red Hat了。這些公司如何從免費項目發展成為價值數十億美元的呢?毫無疑問,它們實施了成功的商業模式,從而熟練地在保持開發人員滿意與向公司客戶收取優質產品服務費之間走了一條成功的商業路線。
  • 騰訊雲虛擬化技術團隊:為什麼堅定不移擁抱開源
    在開源社區,以開源理念的發起者之一、Linux創始人林納斯·託瓦茲名字來命名的林納斯定律為不少開發者所共鳴。也正是這種共創共享的精神內核,讓開源自1988年發展至今,並逐步成為全球IT軟體的重要組成。根據全球最大開原始碼託管平臺 GitHub 年度報告數據顯示,截至 2019 年 GitHub 託管倉庫已有 1.4 億,2019 年新增倉庫 400 萬個,創建第一個項目的用戶比 2018 年增加44%,130 萬開發者對開源做出首次貢獻。SourceClear 調查報告指出開源項目已呈現指數級增長趨勢,2026 年預計超過 3 億。
  • 阿里開源OpenJDK 將長期支持Dragonwell
    對全球Java開發者來說,Alibaba Dragonwell的開源是一個「利好消息」。  據悉,Alibaba Dragonwell是一款免費的OpenIDK發行版。它目前支持X86-64/Linux 平臺,在數據中心大規模 Java 應用部署情況下, 可以大幅度提高穩定性、效率以及性能。
  • 騰訊開源又一裡程碑:Apache TubeMQ迎來全面升級
    「軟體正在吞噬世界,而開源正在吞噬軟體」如今正在逐漸成為現實,而騰訊就是國內最早擁抱開源的科技公司之一。據許勇介紹,騰訊自 2010 年起就確立了擁抱開放的戰略,通過內外部開源相結合的模式不斷推動騰訊開源的發展。
  • 擁抱開源:軟體時代的車企新挑戰
    早在2014年6月,馬斯克就在其個人社交媒體帳戶上宣布將免費公開特斯拉的所有專利:「特斯拉不會對那些善意使用我們技術的人提起訴訟,特斯拉的專利都是開源的。」2017年春季以後,特斯拉就開始在全球最大的軟體託管平臺GitHub上設立了官方帳號並開始逐步放開了超過40個軟體項目的權限。2018年,特斯拉甚至還在GitHub上共享了Autopilot的系統鏡像以及Coreboot代碼庫。雖然這些核心代碼庫之後被特斯拉官方大幅精簡過,但是至今特斯拉仍持續不斷地維護著GitHub帳號。
  • 華為鴻蒙 HarmonyOS 正式開源,進入開放原子開源基金會
    9 月 10 日,華為在 HDC 2020 大會上宣布正式開源鴻蒙作業系統(HarmonyOS)2.0 開源的鴻蒙項目名為 OpenHarmony。OpenHarmony 定位是一款面向全場景的開源分布式作業系統。
  • 前海開源基金子公司被責令改正 原因是…
    2016年11月29日,中國證券監督管理委員會公告〔2016〕29號公布《基金管理公司子公司管理規定》,自2016年12月15日起施行。2012年公布的《子公司管理暫行規定》予以廢止。2015年3月,前海開源資產發行了「前海開源資產錦安財富新三板資產管理計劃」項目,主要投向中科招商定增項目。然而中科招商2017年底遭退市,市值從最高峰的1300億元,跌至66億元,最後一個交易日的收盤價為0.61元/股。