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

简介: 微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
+关注继续查看

背景


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


image.png

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


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

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.png

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


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

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

image.png

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


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

image.png

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

image.png

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

image.png

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


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

image.png

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

image.png

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


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

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

image.png

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


我们 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 即可。


3. 验证

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

image.png

  • b.通过端到端请求验证
➜  ~ curl http://47.97.117.48/A/spring_boot
A[10.0.3.238] -> B[10.0.3.229] -> C[10.0.3.241]%


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

image.png

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

➜  ~ 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.png



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
消息中间件 Dubbo Java
Spring Boot、Spring Cloud、Spring Cloud Alibaba 版本依赖关系
Spring Boot、Spring Cloud、Spring Cloud Alibaba 版本依赖关系
501 2
BXA
|
4月前
|
存储 负载均衡 Java
Spring Boot和Spring Cloud实现多租户架构
多租户架构是指在一个应用中支持多个租户(Tenant)同时访问,每个租户拥有独立的资源和数据,并且彼此之间完全隔离。通俗来说,多租户就是把一个应用按照客户的需求“分割”成多个独立的实例,每个实例互不干扰。
BXA
426 0
|
4月前
|
Kubernetes Cloud Native Java
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba
|
5月前
|
Kubernetes 负载均衡 Java
Spring Cloud 2021.0.1 正式发布,卷不动了~
Spring Cloud 2021.0.1 正式发布,卷不动了~
|
10月前
|
存储 缓存 负载均衡
Spring Cloud 学习 之 Spring Cloud Eureka(架构)
Spring Cloud 学习 之 Spring Cloud Eureka(架构)
70 0
Spring Cloud 学习 之 Spring Cloud Eureka(架构)
|
负载均衡 算法 Java
Spring Cloud 升级之路 - 2020.0.x - 7. 使用 Spring Cloud LoadBalancer (2)
Spring Cloud 升级之路 - 2020.0.x - 7. 使用 Spring Cloud LoadBalancer (2)
|
负载均衡 Java API
Spring Cloud 升级之路 - 2020.0.x - 6. 使用 Spring Cloud LoadBalancer (1)
Spring Cloud 升级之路 - 2020.0.x - 6. 使用 Spring Cloud LoadBalancer (1)
|
监控 Java API
Spring Cloud 2021.0.1 实践 Resilience4J
Spring Cloud CircuitBreaker 提供了跨不同断路器实现的抽象。它提供了在您的应用程序中使用的一致 API,让您(开发人员)选择最适合您的应用程序需求的断路器实现。
Spring Cloud 2021.0.1 实践 Resilience4J
|
负载均衡 监控 Java
《springcloud超级入门》Spring Cloud是什么?Spring Cloud版本介绍《二》
Spring cloud是一系列框架的有序集合。它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册、服务发现、配置中心、
115 0
《springcloud超级入门》Spring Cloud是什么?Spring Cloud版本介绍《二》
|
XML 前端开发 Java
Spring Cloud Alibaba 实战(2) - 关于Spring Boot你不可不知道的实情(上)
总结 使用Spring Initializr快速创建应用 应用组成分析 开发三部曲 Actuator 配置管理 Profile
236 0
Spring Cloud Alibaba 实战(2) - 关于Spring Boot你不可不知道的实情(上)
相关产品
云治理中心
微服务引擎
服务网格
推荐文章
更多