作者:十眠

背景

跟着 Apache Dubbo、Nacos 以及 Spring Cloud 等服务结构的盛行,越来越多的企业开始选用微服务架构来构建其使用程序。微服务架构使企业能够将其使用程序拆分红多个小型服务,这些服务能够独立布置和扩展。这种架构形式也使企业更简略完结敏捷开发和继续交给,然后提高了其事务功率和响应才能。

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

微服务四大件:注册中心、服务供给者、服务顾客、服务管理

现在,跟着服务供给者、服务顾客、服务注册中心以及服务管理等微服务几大件的呈现和成熟,使得咱们使用微服务开发,不只能够做到快速开发,更能够追求微服务的高效和稳定。

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

单体 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]%

架构如下所示:

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

介绍完 Demo 之后,咱们来逐渐演示怎么经过服务管理进行服务注册。

经过服务管理完结服务注册

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

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

  1. 咱们填写好服务名、分组名之后,能够挑选一个服务管理的使用进行注册

  2. 开启了健康检查才能后,咱们还能够挑选健康检查的协议

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

  1. 点击确认后,咱们就完结了经过服务管理方法注册使用与实例至 MSE Nacos 中

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

  1. 依据下图装备,咱们别离将 A 使用注册成 sc-A、B 使用注册成 sc-b、C 使用注册成 sc-c

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

  1. 一起咱们修正 Zuul 使用的 Nacos 地址装备,使其经过 SDK 方法注册至 MSE Nacos 中

  2. 咱们经过服务管理方法注册的服务,咱们还能够经过服务管理方法将对应的节点从 MSE Nacos 中下线

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

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

  1. 点击 MSE 服务管理中节点详情页面的服务下线,在不用重启使用 pod 的条件下,完结服务从注册中心中下线

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

到目前为止,咱们完结了经过服务管理完结服务注册。

经过服务管理完结服务订阅

  1. 咱们在需求订阅 Nacos 服务的使用中添加如下 Env

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

  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 控制台能够验证,清晰订阅联系

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

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 使用的全链路灰度

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

到目前为止,咱们默许就具有了符合如上场景的全链路灰度才能。

➜  ~ 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引擎的整合,能够进一步简化与降低研发在云上需求关注的部分,使用的客户端能够再轻量化,进一步提高研发功率。

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

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