天天看點

零代碼修改,教你Spring Cloud應用輕松接入CSE

摘要:本文介紹了Sermant Agent的接入原理和如何使用Sermant Agent無修改接入CSE。

本文分享自華為雲社群《​​Spring Cloud應用零代碼修改接入華為雲微服務引擎CSE​​》,作者: 微服務小助手 。

Sermant Agent介紹

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

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

為何使用Sermant Agent接入

代碼零侵入,配置很簡單

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

支援多種治理能力

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

支援多種注冊中心

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

支援應用不停機遷移

Sermant Agent支援服務的雙注冊,可根據配置中心下發的服務訂閱政策,動态修改目前服務的訂閱政策,并基于該能力幫助線上應用在業務不中斷的前提下完成服務遷移。

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

接入原理

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

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

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

零代碼修改,教你Spring Cloud應用輕松接入CSE

Sermant Agent接入CSE的時序圖

包含以下6個步驟:

  1. 首先服務攜帶Sermant Agent啟動;
  2. 服務啟動時,針對服務執行位元組碼增強操作(基于Java Agent的位元組碼增強),主要針對注冊與配置兩塊,在步驟3-5展現;
  3. 通過位元組碼增強,動态識别原應用的注冊中心;
  4. 注入啟動配置,動态關閉原應用的注冊中心自動配置邏輯;
  5. 随後通過Spring的SpringFactory機制注入基于Spring Cloud實作的注冊CSE的自動配置類,由Spring接管;
  6. 當應用發起注冊時,會通過步驟5注入的注冊邏輯向CSE發起注冊,最終完成接入。

簡單零代碼修改,輕松接入CSE

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

虛機場景接入CSE

虛機部署的應用可通過Sermant Agent接入到CSE,點選檢視​​虛機接入CSE流程​​。

接入流程

基于ECS将應用接入CSE流程如下:

零代碼修改,教你Spring Cloud應用輕松接入CSE

容器場景接入CSE

容器部署的應用可通過Sermant Injector自動挂載Sermant Agent,進而通過Sermant Agent接入到CSE,點選檢視​​容器接入CSE流程​​。

接入流程

基于CCE将應用接入CSE流程如下:

零代碼修改,教你Spring Cloud應用輕松接入CSE

更多

支援版本

目前Sermant已支援大部分業内主流版本,相關Spring及注冊中心版本如下:

零代碼修改,教你Spring Cloud應用輕松接入CSE

開源方式接入

除了上述接入方式,還可基于開源方式接入,您可在Sermant開源社群拉取最新代碼,并自行打包,啟動步驟可參考虛機場景接入。