背景
随着 Apache Dubbo、Nacos 以及 Spring Cloud 等服务框架的风行,越来越多的企业开始采纳微服务架构来构建其应用程序。微服务架构使企业可能将其应用程序拆分成多个小型服务,这些服务能够独立部署和扩大。这种架构模式也使企业更容易实现麻利开发和继续交付,从而进步了其业务效率和响应能力。
微服务四大件:注册核心、服务提供者、服务消费者、服务治理
现在,随着服务提供者、服务消费者、服务注册核心以及服务治理等微服务几大件的呈现和成熟,使得咱们应用微服务开发,不仅能够做到疾速开发,更可能谋求微服务的高效和稳固。
单体 or 微服务?
从上图咱们能够看到,随着业务规模的增大,抉择单体架构与微服务架构的抉择趋势,他们之间存在一个交点。在交点之后,抉择微服务架构,业务规模越大越能够享受到微服务架构带来的效率的晋升。咱们能够察看到,这个交点在继续地向左挪动。数字化过程的疾速倒退广泛让企业的 IT 零碎更简单,开源以及云计算推动的技术标准化,正在大幅度地升高微服务架构的技术门槛,在云上小公司也能够很好地玩转微服务。随着这个趋势的到来,还在应用单体架构的企业也逐步思考向微服务转型。咱们发现在云上大部分 Java 利用依然是基于 SpringBoot 的,Spring Boot 利用因为其架构实现的简略性,客户端只需通过 http 和域名就能实现服务调用。因而,许多中小型公司依然采纳该形式进行利用开发。从技术角度上看,咱们如何降级 SpringBoot 利用至微服务架构,享受到微服务治理带来的技术红利,咱们须要减少 SpringCloud 的 maven 依赖?须要业务进行代码革新?本文能够答复你,不须要一行代码改变。
本计划能够通过 MSE 无侵入实现 Java 利用的注册、发现与治理能力。
- 以后 MSE 提供的注册核心产品能力次要集中在非长久化服务发现,即服务的状态保护在 client,须要业务方依赖 SDK 被动注册服务,并维持心跳;本计划提供了一种的长久化服务发现能力。
- 解决跨平台服务发现问题,如跨 K8s 服务发现、非 K8s 服务和 K8s 服务相互发现等。
- 无侵入实现基于 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]%
架构如下所示:
介绍完 Demo 之后,咱们来逐渐演示如何通过服务治理进行服务注册。
通过服务治理实现服务注册
- 进入到对应的 MSE Nacos 实例页面,抉择创立服务
- 咱们填写好服务名、分组名之后,能够抉择一个服务治理的利用进行注册
- 开启了健康检查能力后,咱们还能够抉择健康检查的协定
- 点击确定后,咱们就实现了通过服务治理形式注册利用与实例至 MSE Nacos 中
- 依据下图配置,咱们别离将 A 利用注册成 sc-A、B 利用注册成 sc-b、C 利用注册成 sc-c
- 同时咱们批改 Zuul 利用的 Nacos 地址配置,使其通过 SDK 形式注册至 MSE Nacos 中
- 咱们通过服务治理形式注册的服务,咱们还能够通过服务治理形式将对应的节点从 MSE Nacos 中下线
8. 点击 MSE 服务治理中节点详情页面的服务下线,在不必重启利用 pod 的条件下,实现服务从注册核心中下线
到目前为止,咱们实现了通过服务治理实现服务注册。
通过服务治理实现服务订阅
- 咱们在须要订阅 Nacos 服务的利用中减少如下 Env
- 如何订阅对应的服务?
咱们 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 即可。
- 验证
a. 通过 MSE Nacos 控制台能够验证,明确订阅关系
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 利用的全链路灰度
到目前为止,咱们默认就具备了合乎如上场景的全链路灰度能力。
➜ ~ 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 引擎的整合,能够进一步简化与升高研发在云上须要关注的局部,利用的客户端能够再轻量化,进一步晋升研发效率。
作者:十眠
原文链接
本文为阿里云原创内容,未经容许不得转载。