0停機遷移Nacos?Java位元組碼技術來幫忙

華為雲開發者聯盟發表於2022-12-12
摘要:本文介紹如何將Spring Cloud應用從開源Consul無縫遷移至華為雲Nacos。

本文分享自華為雲社群《0停機遷移Nacos?Java位元組碼技術來幫忙》,作者:華為雲PaaS服務小智。

1.市場遷移雲環境痛點

市場微服務遷移雲環境難主要有以下幾點場景:

• 微服務規模小,使用微服務引擎CSE成本太高。

• dubbo/Nacos微服務架構改造dubbo-servicecomb接入CSE需要投入的成本高,且社群dubbo-servicecomb未投入人力維護,可能遇到很多適配問題。

• 僅想使用CSE的治理能力,配置中心仍然使用Nacos,或者後期微服務整改後使用CSE,但是目前想使用Nacos過渡情況。

• 傾向使用Nacos作為配置中心使用,其它使用華為雲的其它元件,如CCE、中介軟體等。

• 使用Nacos或者想用Nacos的客戶,專案整改比較緊急,調整框架遷移CSE時間不夠。

• 想使用Nacos作為配置中心,但是又不想去動原有的程式碼邏輯。

2.概述

結合市場痛點,華為雲提供託管版Nacos引擎,能幫助客戶免去運維Nacos叢集的煩惱,更加聚焦業務本身的實現,同時華為雲也提供專業的Nacos專家支援。本文介紹如何將Spring Cloud應用從開源Consul無縫遷移至華為雲Nacos。

3.什麼是Sermant Agent

Sermant Agent是一種基於JavaAgent的無代理服務網格技術。它利用JavaAgent來檢測主機應用程式,並具有增強的服務治理功能,以解決海量微服務架構中的服務治理問題。

Sermant Agent處於快速發展階段,當前已支援多種服務治理能力,包含流量治理、註冊、優雅上下線及動態配置能力。

4. 為什麼使用Sermant Agent接入

4.1程式碼零侵入,配置很簡單

相較於SDK方式接入,基於Sermant Agent的接入會更加快捷高效,配置簡單,且應用無需做任何程式碼改造,僅需在服務啟動時附帶Sermant Agent即可動態接入到CSE的Nacos。

4.2支援多種治理能力

Sermant Agent預設整合流量治理能力,當前支援熔斷、限流、隔離倉以及重試治理能力,該能力可基於CSE配置中心進行配置與釋出。

4.3支援多種註冊中心

Sermant Agent目前支援業內主流的註冊中心,已經支援了ServiceComb ServiceCenter、Naocs,Eureka、Zookeeper等正在開發中。

4.4支援應用不停機遷移

Sermant Agent支援服務的雙註冊,可根據配置中心下發的服務訂閱策略,動態修改當前服務的訂閱策略,並基於該能力幫助線上應用在業務不中斷的前提下完成服務遷移。

不僅如此,Sermant Agent提供優雅上下線能力,在服務重啟、上下線時提供保障,在保護服務的同時,規避服務下線時可能存在的流量丟失問題。

5.接入原理

當然,在說明原理之前,我們首先需要了解什麼是Java Agent。

Java Agent是在JDK1.5之後引入的新特性,它支援JVM將位元組碼檔案讀入記憶體之後,JVM使用對應的位元組流在Java堆中生成一個Class物件之前,使用者可以對其位元組碼進行修改的能力,JVM使用修改之後的位元組碼進行Class物件的建立,從而實現Java應用的非程式碼侵入的業務邏輯修改和替換。

Sermant Agent正是基於動態修改位元組碼的技術,在服務啟動時,動態增強原服務的註冊邏輯。那Sermant Agent是如何在不修改程式碼的前提下接入Nacos呢?主要流程如下:

0停機遷移Nacos?Java位元組碼技術來幫忙

Sermant Agent接入Nacos的時序圖

包含以下6個步驟:

1. 首先服務攜帶Sermant Agent啟動;

2. 服務啟動時,針對服務執行位元組碼增強操作(基於Java Agent的位元組碼增強),主要針對註冊與配置兩塊,在步驟3-5體現;

3. 透過位元組碼增強,動態識別原應用的註冊中心;

4. 注入啟動配置,動態關閉原應用的註冊中心自動配置邏輯;

5. 隨後透過Spring的SpringFactory機制注入基於Spring Cloud實現的註冊Nacos的自動配置類,由Spring接管;

6. 當應用發起註冊時,會透過步驟5注入的註冊邏輯向CSE的Nacos發起註冊,最終完成接入。

6.簡單零程式碼修改,輕鬆接入CSE的Nacos

接入場景分為虛機接入和容器接入,大家可以根據自身需求選擇合適的接入方式。

6.1虛機場景接入CSE的Nacos

虛機部署的應用可透過Sermant Agent接入到CSE的Nacos。

基於ECS將應用接入CSE的Nacos流程如下:

0停機遷移Nacos?Java位元組碼技術來幫忙

6.2容器場景接入CSE的Nacos

容器部署的應用可透過Sermant Injector自動掛載Sermant Agent,從而透過Sermant Agent接入到CSE的Nacos。

基於CCE將應用接入CSE的Nacos流程如下:

0停機遷移Nacos?Java位元組碼技術來幫忙

7.更多版本支援

0停機遷移Nacos?Java位元組碼技術來幫忙

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章