摘要:本文介紹了Sermant Agent的接入原理和如何使用Sermant Agent無修改接入CSE。
本文分享自華為云社區(qū)《【技術(shù)干貨】Spring Cloud應(yīng)用零代碼修改接入華為云微服務(wù)引擎CSE-云社區(qū)-華為云》,作者: 微服務(wù)小助手 。
Sermant Agent介紹
塞爾芒Agent是一種基于JAVAAgent的無代理服務(wù)網(wǎng)格技術(shù)。它利用JavaAgent來檢測主機應(yīng)用程序,并具有增強的服務(wù)治理功能,以解決海量微服務(wù)架構(gòu)中的服務(wù)治理問題。
Sermant Agent處于快速發(fā)展階段,當(dāng)前已支持多種服務(wù)治理能力,包含流量治理、注冊、優(yōu)雅上下線及動態(tài)配置能力。
為何使用Sermant Agent接入代碼零侵入,配置很簡單
相較于SDK方式接入,基于Sermant Agent的接入會更加快捷高效,配置簡單,且應(yīng)用無需做任何代碼改造,僅需在服務(wù)啟動時附帶Sermant Agent即可動態(tài)接入到CSE。
支持多種治理能力
Sermant Agent默認(rèn)集成流量治理能力,當(dāng)前支持熔斷、限流、隔離倉以及重試治理能力,該能力可基于CSE配置中心進(jìn)行配置與發(fā)布。
支持多種注冊中心
Sermant Agent目前支持業(yè)內(nèi)主流的注冊中心,已經(jīng)支持了ServiceComb ServiceCenter、Naocs,Eureka、Zookeeper等正在開發(fā)中。
支持應(yīng)用不停機遷移
Sermant Agent支持服務(wù)的雙注冊,可根據(jù)配置中心下發(fā)的服務(wù)訂閱策略,動態(tài)修改當(dāng)前服務(wù)的訂閱策略,并基于該能力幫助線上應(yīng)用在業(yè)務(wù)不中斷的前提下完成服務(wù)遷移。
不僅如此,Sermant Agent提供優(yōu)雅上下線能力,在服務(wù)重啟、上下線時提供保障,在保護服務(wù)的同時,規(guī)避服務(wù)下線時可能存在的流量丟失問題。
接入原理
當(dāng)然,在說明原理之前,我們首先需要了解什么是Java Agent。
Java Agent是在JDK1.5之后引入的新特性,它支持JVM將字節(jié)碼文件讀入內(nèi)存之后,JVM使用對應(yīng)的字節(jié)流在Java堆中生成一個Class對象之前,用戶可以對其字節(jié)碼進(jìn)行修改的能力,JVM使用修改之后的字節(jié)碼進(jìn)行Class對象的創(chuàng)建,從而實現(xiàn)Java應(yīng)用的非代碼侵入的業(yè)務(wù)邏輯修改和替換。
Sermant Agent正是基于動態(tài)修改字節(jié)碼的技術(shù),在服務(wù)啟動時,動態(tài)增強原服務(wù)的注冊邏輯。那Sermant Agent是如何在不修改代碼的前提下接入CSE呢?主要流程如下:
Sermant Agent接入CSE的時序圖
包含以下6個步驟:
- 首先服務(wù)攜帶Sermant Agent啟動;
- 服務(wù)啟動時,針對服務(wù)執(zhí)行字節(jié)碼增強操作(基于Java Agent的字節(jié)碼增強),主要針對注冊與配置兩塊,在步驟3-5體現(xiàn);
- 通過字節(jié)碼增強,動態(tài)識別原應(yīng)用的注冊中心;
- 注入啟動配置,動態(tài)關(guān)閉原應(yīng)用的注冊中心自動配置邏輯;
- 隨后通過Spring的SpringFactory機制注入基于Spring Cloud實現(xiàn)的注冊CSE的自動配置類,由Spring接管;
- 當(dāng)應(yīng)用發(fā)起注冊時,會通過步驟5注入的注冊邏輯向CSE發(fā)起注冊,最終完成接入。
接入場景分為虛機接入和容器接入,大家可以根據(jù)自身需求選擇合適的接入方式。
虛機場景接入CSE
虛機部署的應(yīng)用可通過Sermant Agent接入到CSE,點擊查看虛機接入CSE流程。
接入流程
基于ECS將應(yīng)用接入CSE流程如下:
容器場景接入CSE
容器部署的應(yīng)用可通過Sermant Injector自動掛載Sermant Agent,從而通過Sermant Agent接入到CSE,點擊查看容器接入CSE流程。
接入流程
基于CCE將應(yīng)用接入CSE流程如下:
支持版本
當(dāng)前Sermant已支持大部分業(yè)內(nèi)主流版本,相關(guān)Spring及注冊中心版本如下:
開源方式接入
除了上述接入方式,還可基于開源方式接入,您可在Sermant開源社區(qū)拉取最新代碼,并自行打包,啟動步驟可參考虛機場景接入。
開源項目Sermant:github.com/huaweicloud/Sermant