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

news2024/9/22 23:30:47

作者:十眠

背景

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

在这里插入图片描述

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

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

在这里插入图片描述

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

架构如下所示:

在这里插入图片描述

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

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述

  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 控制台可以验证,明确订阅关系

在这里插入图片描述

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

在这里插入图片描述

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

➜  ~ 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引擎的整合,可以进一步简化与降低研发在云上需要关注的部分,应用的客户端可以再轻量化,进一步提升研发效率。

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么给pdf文件添加水印

怎么给pdf文件添加水印?PDF文件的应用比较广泛,大家喜欢将各种办公资料和文档转换成PDF格式,为什么呢?因为pdf文件具有比较强的稳定性而且不利于编辑修改,所以更利于保存和转发。有时候我们会在工作中花费大量时间制作…

第1天学习Docker——Docker简介

一、Docker是什么? Docker 是一个开源的应用容器引擎,基于 Golang 语言开发,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 服务器。容器是一个沙箱机制,相互之间不会…

神经网络语言模型(NNLM)

神经网络语言模型【NNLM】 1 为什么使用神经网络模型?2 什么是神经网络模型?3. 代码实现3.1 语料库预处理代码3.2 词向量创建3.3 NNLM模型类3.4 完整代码 1 为什么使用神经网络模型? 解决独热编码无法解决词之间相似性问题 使用神经网络语言…

带稀缺注释的动物姿态估计CVPR2023

由于缺乏标记数据,动物姿态估计是一项重要但未被充分探索的任务。作者用稀缺的注释(scarce annotation)来处理动物姿态估计,其中只有一小部分标记数据和大部分未标记图像可用。并且,作者提出了ScarceNet,这…

Presto

Presto Presto基本介绍 前言 Presto是一款Facebook开源的MPP架构的OLAP查询引擎,可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎。因为工作中接触到Presto,研究它对理解SQL Parser、常见算子的实现(如SQL中table scan,join,agg…

MySQL行锁、表锁间隙锁

事务隔离级别的实现原理:锁MVCC 表级锁&行级锁 表级锁:对整张表加锁。开销小,加锁快,不会出现死锁;锁粒度大,发生锁冲突的概率高,并发度低。 行级锁:对某行记录加锁。开销大&a…

论 spring 的三级缓存

论 spring 的三级缓存 预备知识 bean的生命周期 bean 的生命周期 为何会出现循环引用 这个问题只是出现在spring 容器的机制中,其实我们代码中很简单就解决了。 假设A 对象里需要注入一个B属性,B 对象里面需要注入一个A 属性。根据Bean 的生命周期&…

【原创】运维工程师涨薪计划,chatGPT帮你做规划

文章目录 1、运维工程师怎么涨薪呢?a)加大深度b)加大广度 2、运维工程师何处去呢?3、chatGPT告诉你3年、5年、10年运维和开发的现状;有运维经验的工程师,搞开发好吗薪资会有显著提升吗以数据证明&#xff0…

校园食堂明厨亮灶AI分析系统 yolov5

校园食堂明厨亮灶AI分析系统通过yolov5网络模型技术,校园食堂明厨亮灶监控分析模型算法针对校园餐厅后厨不按要求戴口罩、不穿厨师帽、陌生人员进入后厨、厨师不穿厨师服、上班时间玩手机、老鼠识别等行为自动识别抓拍告警。Yolo算法,其全称是You Only L…

电脑缺少msvcp140.dll怎么办,缺少msvcp140一键修复方法

电脑缺少msvcp140.dll怎么办?这个问题相信不少小伙伴都遇到过,msvcp140.dll文件是很多软件跟游戏运行必须用到的文件,如果丢失或者损坏,很多软件都会无法打开运行。其实知道知道方法,修复起来其实也不会很难&#xff0…

ModelViewSet额外路由参数 与 ADMIN事件触发

ModelViewSet额外路由参数 用了DefaultRouter,那么在URL匹配时带路径参数,只有update、delete、retrieve能带,关键是匹配pk还是写死的,我们需要对任意参数,同时还能修改方法命名。 咋搞?很简单。比如我们…

JS案例:前端Iframe及Worker通信解决思路

目录 前言 Iframe通信 Worker通信 实现思路 实现过程 MessageCenter类 IPC类 Server类 Client类 PeerToPeer 功能演示 基础功能 父子通信 兄弟通信 父子兄弟通信 其他功能 函数调用 索引标识 卸载页面 重置页面 批量执行 批量操作 总结 前言 在前端开发…

虚拟机VMware Tools安装步骤

Vmware tools是虚拟机中一款超级增强工具,可以让我们更加方便使用虚拟机,能实现主机与虚拟机之间的文件共享,这篇文章主要介绍了虚拟机VMware Tools安装步骤,需要的朋友可以参考下 本人安装VMware Tools 的需求是 在Linux虚拟机和我的Windo…

Linux学习记录——이십삼 进程信号(2)

文章目录 1、可重入函数2、volatile关键字3、如何理解编译器的优化4、SIGCHLD信号 1、可重入函数 两个执行流都执行一个函数时,这个函数就被重入了。比如同一个函数insert,在main中执行时,这个进程时间片到了,嵌入了内核&#xf…

博客系统 —— Servlet 实现(前后端分离)(详细+整体代码+效果图)

目录 一、项目效果展示 二、创建 Servlet 项目 三、编写数据库的操作代码 1、创建数据库/表结构(数据库设计)(Model) 2、封装数据库操作(Model) (1)先创建 DBUtil 封装数据库连…

Etsy总是不出单怎么办?出单后怎么操作?

如果您在Etsy上总是无法出单,可以尝试以下几个步骤: 1、检查您的商品列表是否符合Etsy的要求,包括商品描述、价格、运费等信息是否准确无误。 2、确认您的账户信息是否完整,包括银行账户、信用卡信息等。 3、检查您的店铺设置是否…

socket API的使用+client/server代码演示+封装socket模块

前言:本章旨在讲解常见的socket API及其使用练习,尾部有封装好的(socket相关的一些系统函数加上错误处理代码包装成新的函数)模块wrap.c 目录 一、socket模型创建流程图 1)socket函数 2)bind函数 3&am…

Altium软件中相同模块布局布线的方法

文章目录 1、原理图设计1、绘制xxx.SchDoc,并设置port。具体方法:Place→Port。2、新建顶层原理图:可以命名为xxx_TOP3、repeat 原理图,将这里从XXX_SingleDut 改为 Repeat(S,1,12)4、以总线的方式出线,如下&#xff1…

网络安全CVE 漏洞分析及复现

漏洞详情 Shiro 在路径控制的时候,未能对传入的 url 编码进行 decode 解码,导致攻击者可以绕过过滤器,访问被过滤的路径。 漏洞影响版本 Shiro 1.0.0-incubating 对应 Maven Repo 里面也有 【一一帮助安全学习,所有资源获取一一…

NetBackup 10.2 新功能介绍:PostgreSQL 和 MySQL 自动化恢复达成

NetBackup 10.2 新功能介绍:PostgreSQL 和 MySQL 自动化恢复达成 原文来自:VERITAS 中文社区 2023-04-27 在执行恢复任务时,手动提取、更新数据库和实例并将其附加到 PostgreSQL 和 MySQL 是常规操作。而在最新的 NetBackup 10.2 版本中&am…