写点什么

0 停机迁移 Nacos?Java 字节码技术来帮忙

  • 2022-12-12
    中国香港
  • 本文字数:1644 字

    阅读完需:约 5 分钟

0停机迁移Nacos?Java字节码技术来帮忙

本文分享自华为云社区《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 呢?主要流程如下:



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 流程如下:



6.2 容器场景接入 CSE 的 Nacos


容器部署的应用可通过 Sermant Injector 自动挂载 Sermant Agent,从而通过 Sermant Agent 接入到 CSE 的 Nacos。


基于 CCE 将应用接入 CSE 的 Nacos 流程如下:


7.更多版本支持



点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
0停机迁移Nacos?Java字节码技术来帮忙_Java_华为云开发者联盟_InfoQ写作社区