首页 > 其他分享 >Spring Boot 单体应用一键升级成 Spring Cloud Alibaba

Spring Boot 单体应用一键升级成 Spring Cloud Alibaba

时间:2023-05-09 13:55:33浏览次数:40  
标签:10.0 服务 升级成 Spring Boot Nacos 注册 MSE 应用

作者:十眠

背景

随着 Apache Dubbo、Nacos 以及 Spring Cloud 等服务框架的流行,越来越多的企业开始采用微服务架构来构建其应用程序。微服务架构使企业能够将其应用程序拆分成多个小型服务,这些服务可以独立部署和扩展。这种架构模式也使企业更容易实现敏捷开发和持续交付,从而提高了其业务效率和响应能力。

image

微服务四大件:注册中心、服务提供者、服务消费者、服务治理

如今,随着服务提供者、服务消费者、服务注册中心以及服务治理等微服务几大件的出现和成熟,使得我们使用微服务开发,不仅可以做到快速开发,更能够追求微服务的高效和稳定。

image.png

单体 or 微服务?

从上图我们可以看到,随着业务规模的增大,选择单体架构与微服务架构的选择趋势,他们之间存在一个交点。在交点之后,选择微服务架构,业务规模越大越可以享受到微服务架构带来的效率的提升。我们可以观察到,这个交点在持续地向左移动。数字化进程的快速发展普遍让企业的 IT 系统更复杂,开源以及云计算推进的技术标准化,正在大幅度地降低微服务架构的技术门槛,在云上小公司也可以很好地玩转微服务。随着这个趋势的到来,还在使用单体架构的企业也逐渐考虑向微服务转型。我们发现在云上大部分 Java 应用仍然是基于 SpringBoot 的,Spring Boot 应用由于其架构实现的简单性,客户端只需通过 http 和域名就能实现服务调用。因此,许多中小型公司仍然采用该方式进行应用开发。从技术角度上看,我们如何升级 SpringBoot 应用至微服务架构,享受到微服务治理带来的技术红利,我们需要增加 SpringCloud 的 maven 依赖?需要业务进行代码改造?本文可以回答你,不需要一行代码改动。

本方案可以通过 MSE 无侵入实现 Java 应用的注册、发现与治理能力。

  1. 当前 MSE 提供的注册中心产品能力主要集中在非持久化服务发现,即服务的状态维护在 client,需要业务方依赖 SDK 主动注册服务,并维持心跳;本方案提供了一种的持久化服务发现能力。
  2. 解决跨平台服务发现问题,如跨 K8s 服务发现、非 K8s 服务和 K8s 服务互相发现等。
  3. 无侵入实现基于 Spring Boot 应用的服务治理能力,如全链路灰度、限流降级、安全可信等。

方案实践与探索

为了验证该场景,我们提供了一个稍微比较复杂的Demo,通过该 Demo 来分别演示如何通过 MSE 无侵入实现 Spring Boot 应用的服务注册与服务治理。Demo 是根据 K8s Service 进行服务发现并且通过简单的 HttpClient 进行请求调用,详细请求如下:

➜  ~ curl http://47.97.117.48/A/spring_boot                                   
A[10.0.3.238] -> B[10.0.3.227] -> C[10.0.3.230]%

架构如下所示:

image

介绍完 Demo 之后,我们来逐步演示如何通过服务治理进行服务注册。

通过服务治理完成服务注册

  1. 进入到对应的 MSE Nacos 实例页面,选择创建服务

image.png

  1. 我们填写好服务名、分组名之后,可以选择一个服务治理的应用进行注册

  2. 开启了健康检查能力后,我们还可以选择健康检查的协议

image.png

  1. 点击确定后,我们就实现了通过服务治理方式注册应用与实例至 MSE Nacos 中

image

  1. 根据下图配置,我们分别将 A 应用注册成 sc-A、B 应用注册成 sc-b、C 应用注册成 sc-c

image

  1. 同时我们修改 Zuul 应用的 Nacos 地址配置,使其通过 SDK 方式注册至 MSE Nacos 中

  2. 我们通过服务治理方式注册的服务,我们还可以通过服务治理方式将对应的节点从 MSE Nacos 中下线

image

image.png

  1. 点击 MSE 服务治理中节点详情页面的服务下线,在不用重启应用 pod 的条件下,实现服务从注册中心中下线

image.png

到目前为止,我们完成了通过服务治理实现服务注册。

通过服务治理完成服务订阅

  1. 我们在需要订阅 Nacos 服务的应用中增加如下 Env

image.png

  1. 如何订阅对应的服务?

我们 Http 请求域名直接调用对应的服务即可,比如:

restTemplate.getForObject("http://sc-b:20002/spring_boot", String.class);

其中 sc-b 为服务名,默认的分组名可以通过 mse_nacos_group 指定,如果需要指定分组名可以调用 http://sc-b:20002/spring_boot?mse_nacos_group=xxx 即可。

  1. 验证

a.通过 MSE Nacos 控制台可以验证,明确订阅关系

image.png

b.通过端到端请求验证

➜  ~ curl http://47.97.117.48/A/spring_bootA[10.0.3.238] -> B[10.0.3.229] -> C[10.0.3.241]%

无侵入实现基于 SpringBoot 应用的全链路灰度

image

到目前为止,我们默认就具备了符合如上场景的全链路灰度能力。

➜  ~ curl http://47.97.117.48/A/spring_boot -H "x-mse-tag: gray"              
Agray[10.0.3.240] -> B[10.0.3.229] -> Cgray[10.0.3.241]%

总结

使用 Spring Boot 应用一样可以快速享受到全链路灰度能力带来的发布体验。我们通过MSE 服务治理能力与Nacos引擎的整合,可以进一步简化与降低研发在云上需要关注的部分,应用的客户端可以再轻量化,进一步提升研发效率。

image

点击此处进入微服务引擎 MSE 官网查看

标签:10.0,服务,升级成,Spring,Boot,Nacos,注册,MSE,应用
From: https://www.cnblogs.com/alisystemsoftware/p/17384644.html

相关文章

  • SpringBoot的@Configuration注解
    本文主要讲述SpringBoot的@Configuration注解。一.POJO类的声明例如有两个pojo类,分别是User和PetUser类的声明如下:publicclassUser{privateStringname;privateIntegerage;publicUser(){}publicUser(Stringname,Integer......
  • Spring注解开发报错
    今天学习Spring注解开发时,又报错了报错代码Exceptioninthread“main”org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:Line6inXMLdocumentfromclasspathresource[1.xml]isinvalid;nestedexceptionisorg.xml.sax.SAXParseExceptio......
  • Springboot 项目配置 HTTPS
    生成证书输入命令keytool-genkeypair-alias"boot"-keyalg"RSA"-keystore"boot.keystore"生成完成后会提示Warning:JKS密钥库使用专用格式。建议使用"keytool-importkeystore-srckeystoreboot.keystore-destkeystoreboot.keystore-deststoretypepkc......
  • SpringBoot项目如何打包成exe应用程序?
    前言近期做了一个前后端合并的springboot项目,但是要求打包城exe文件,提供给不懂电脑的小白安装使用,就去研究了半天,踩了很多坑,写这篇文章,是想看到这篇文章的人,按照我的步骤走,能少踩坑。准备准备工作:一个jar包,没有bug能正常启动的jar包exe4j,一个将jar转换成exe的工具,链接:h......
  • [NSSCTF 2022 Spring Recruit]easy C
    C的源代码,查个壳:一般都是64位,直接双击吧,换个界面,成天看IDA也不好:也是简单的一个异或加密,上个脚本就好了,不多说啥:Des='d`vxbQd'flag=''foriinDes:flag+=chr((ord(i)^2)-1)print(flag)拿到NSSCTF......
  • SpringCloud Hoxton——Consul服务注册与发现
    1.开篇Consul是什么?Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务......
  • Spring Boot核心原理《二》Spring Boot的核心拓展点
    文章结构1.概述2.SpringBoot的核心拓展点1.1聊SpringBoot的3大拓展接口2.1.1Spring核心拓展接口回顾2.1.2SpringBoot的3大拓展接口2.2聊SpringBoot启动流程的4大核心方法2.3聊SpringBoot引入的5种事件3.以Nacos为例子看下Nacos是如何拓展的4.......
  • 一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应
    作者:京东物流 覃玉杰1.简介GracefulResponse是一个SpringBoot体系下的优雅响应处理器,提供一站式统一返回值封装、异常处理、异常错误码等功能。使用GracefulResponse进行web接口开发不仅可以节省大量的时间,还可以提高代码质量,使代码逻辑更清晰。强烈推荐你花3分钟学会它!......
  • 使用IDEA创建第一个SpringBoot项目并进行一些基础配置的详细教程
    1.打开IDEA,新建newproject,填写项目信息。 2.如上图所示,设置serverURL为阿里云服务器为:https://start.aliyun.com/下面的Java版本选择必须和ProjectSDK版本相对应,不然不能进行下一步。3.选择springboot版本和开发会使用到的组件,最后点finish即可。 4.等待IDEA创建并......
  • 原来Spring能注入集合和Map的computeIfAbsent是这么好用!
    大家好,我是3y,今天继续来聊我的开源项目austin啊,但实际内容更新不多。这文章主是想吹下水,主要聊聊我在更新项目中学到的小技巧。今天所说的小技巧可能有很多人都会,但肯定也会有跟我一样之前没用过的。消息推送平台......