Spring Cloud整体架构解析

news2024/11/18 8:52:11

Spring Cloud整体架构

本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。

Spring Cloud的中文名我们就暂且称呼它为“春云”吧,听上去是多么朴实无华的名字,不过呢一般名字起的低调的都是厉害角色,我们就看看Spring Cloud都提供了哪些靠谱功能吧。

Spring Cloud是一款微服务架构的一站式解决方案,你在微服务化过程中碰到的任何问题,都可以从Spring全家桶里找到现成的解决方案,而且方案还不止一种。我们先来看一幅Spring Cloud的全景图,再来详细解释其中的每个组件的功能。

服务治理

Spring Cloud提供了三款服务治理的组件,分别是Eureka, Consul和Nacus,从这三足鼎立的态势里我们就能猜到,在服务治理领域的背后一定有那么一段恩怨情仇。没错,这三个组件其实是由三个不同的公司或组织来研发的。

在Spring Cloud的架构中,服务治理是其中不可或缺的核心环节,它包含了服务从注册到销毁的整个生命周期的管理。用一句话来说,服务治理确保了调用方可以准确的向可用的服务节点发起调用。

负载均衡

Ribbon是Spring Cloud中负责负载均衡的组件,Ribbon的一大优势是它能够和各个Spring Cloud组件无缝集成,而且十分灵巧轻便又具备高可扩展性。

负载均衡框架是起到分散服务器压力的作用,可以这么说,没有负载均衡技术的服务器集群就不能叫做集群,只有借助负载均衡技术,集群才能够借助服务节点的规模效应发挥出优势。

消息间调用

对于原生态的HTTP调用来说,从Java代码 里发起调用并且构造消息体和Header是一件非常麻烦的事情,考虑到Spring Cloud的服务治理组件也是基于HTTP的,因此特别需要-款简化服务调用的组件。OpenFeign的出现就是为了解决这个问题,我们可以借助Feign的代理机制,像调用一个接口方法一样发起远程HTTP调用。

服务容错

Hystrix是目前Spring Cloud中应用最广泛的服务容错组件,服务容错从宏观上来解释,就是尽可能降低服务异常所带来的影响。我们经常听到两个词叫做“降级’和*熔断”,降级很好理解,现在大家都会打趣的说“消费降级”,就是说降低咱自己的消费水平,在服务容错这里其实是一个道理,降级就是退而求其次,在异常发生之后选一种备 选方案继续提供服务。而熔断则是指在异常达到某个临界值以后,直接切断服务通路,将用户请求统统导向降级逻辑中。

分布式配置中心和消息推送组件

Spring Cloud借助Config组件来集中管理集群中所有服务节点的配置,它是一个中心化的配置管理中心,可以采用包括Github、Database等多种持久化方案来保存配置信息,将你的微服务从繁重的配置工作中解脱出来。利用Config组件我们可以轻松玩转环境隔离、配置推送和配置项动态刷新。
提到配置属性的刷新,就不得不说到Spring Cloud中的另一个组件Bus,它承担了批量通知和推送配置变更的工作,而且我们可以通过扩展Bus的事件,实现“消息广播”的应用场景。

服务网关

服务网关是微服务的第一道关卡,目前Nginx是应用最广泛的反向代理技术,在各个大厂的核心业务系统中都有大量应用,不过Nginx可不是使用Java来配置的,使用和配置Nginx需要掌握它的语法树Spring Cloud则为广大的Java技术人员提供了更加“编程友好”的方式来构建网关层,那就是Gateway和Zul网关层组件。我们可以通过Java代码或者是yml配置文件的方式编写自己的路由规则,并通过内置过滤器或自定义过滤器来实现复杂的业务需求(比如在网关层做令牌验证)。Gateway本身也集成了强大的限流功能,结合使用Redis+SpEL表达式,可以对业务系统进行精准限流。

调用链路追踪

微服务的一大特点就是完成一个业务场景所需要调用的上下游链路非常长,比如说一个下单操作,后台就要调用商品、订单、营销优惠、履约、消息推送、支付等等一大家子微服务,任何一个环节出错可能都会导致下单失败。那同学们如何在一个调用链路中定位到出问题的环节呢?生产环境可不是我们的开发机器,不能为所欲为的做线上debug,那我们只能依靠日志线索。
Sleuth是Spring Cloud提供的调用链路追踪组件,它进行线上问题排查必不可少的关键环节,单就Sleuth来说,它就是在一整条调用链路中打上某个标记,将一个api请求所调用的所有上下游链路串联起来。如果从宏观的角度来说,调用链追踪还涉及到日志打标、调用链分析、日志收集、构建搜索Index等等流程,我们在本章中将通过Sleuth+Zipkin+ELK(Elasticsearch, Logstash,Kibana)这五种技术结合使用,玩转调用链路追踪。

消息驱动

Kafka和RabbitMQ是目前应用最广泛的消息中间件,很多异步调用场景底层都依赖于消息组件,比如说电商场景中的商品批量发布,或者下单成功后的邮件通知系统等等。Stream是Spring Cloud为我们提供的消息驱动组件,它代理了业务层和底层的物理中间件的交互,至于底层中间件是Kafka还是RabbitMQ,对业务层几乎是无感知的。借助Stream我们不仅可以轻松实现组播(组内单播)和广播场景,同时Stream还提供了对异常处理的丰富支持。

防流量卫兵

Sentinel是阿里巴巴开源的一款主打“流量控制”的组件,它秉承了阿里系组件十八班武艺样样精通的风格,与SpringCloud、Dubbo、甚至GRPC都可以很好的集成,在分布式流量控制(包括秒杀场景的突发流量场景)、熔断、消息驱动下的削峰填谷等各个场景下都有稳定发挥,要知道它可是在背后默默支撑双十一流控业务的顶梁柱。

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

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

相关文章

Tiktok/抖音旋转验证码识别

一、引言 在数字世界的飞速发展中,安全防护成为了一个不容忽视的课题。Tiktok/抖音,作为全球最大的短视频平台之一,每天都有数以亿计的用户活跃在其平台上。为了保护用户的账号安全,Tiktok/抖音引入了一种名为“旋转验证码”的安…

《Git学习笔记:IDEA整合Git》

在IDEA中集成Git去使用 通过Git命令可以完成Git相关操作,为了简化操作过程,我们可以在IDEA中配置Git,配置好后就可以在IDEA中通过图形化的方式来操作Git。 在IDEA开发工具中可以集成Git: 集成后在IDEA中可以看到Git相关图标&…

WeNet2.0:提高端到端ASR的生产力

摘要 最近,我们提供了 WeNet [1],这是一个面向生产(工业生产环境需求)的端到端语音识别工具包,在单个模型中,它引入了统一的两次two-pass (U2) 框架和内置运行时(built-in runtime)…

WPF 布局

了解 WPF中所有布局如下,我们一一尝试实现,本文档主要以图形化的形式展示每个布局的功能。 布局: Border、 BulletDecorator、 Canvas、 DockPanel、 Expander、 Grid、 GridView、 GridSplitter、 GroupBox、 Panel、 ResizeGrip、 Separat…

怎样制作一本旅游电子相册呢?

​随着数码技术的发展,旅游电子相册已成为越来越多旅游爱好者的必备工具。它不仅能让您随时随地欣赏自己的旅行回忆,还能分享给亲朋好友,甚至上传到社交媒体上,让更多人了解您的旅行故事。那么,如何制作一本精美的旅游…

HarmonyOS4.0系列——05、状态管理之@Prop、@Link、@Provide、@Consume,以及@Watch装饰器

状态管理 看下面这张图 Components部分的装饰器为组件级别的状态管理,Application部分为应用的状态管理。开发者可以通过StorageLink/LocalStorageLink 实现应用和组件状态的双向同步,通过StorageProp/LocalStorageProp 实现应用和组件状态的单向同步。…

智能路由器中的 dns.he.net可使用自定义域名的免费 DDNS 服务配置方法

今天介绍的这个是可以使用自定义域名同时支持使用二级域名的免费DDNS服务 dns.he.net的动态DDNS服务的配置方法, 这个服务相对还是比较稳定的, 其配置也和其他的DDNS服务有些不太一样, 首先他的主机名: 这里需要设置为登录后分配的区域域名: ipv6.he.net 然后就是 DDNS 用户…

cad二次开发autolisp(一)

文章目录 一、概述1.1 简介1.2 打开编辑器1.3 调试页面 二、数据类型三、函数3.1 用户函数 四、语句4.1 常规语句4.2 流程控制语句 五、图元操作5.1 定义5.2 图元选择5.3 图元属性列表 一、概述 1.1 简介 简介:cad 二次开发语言,后缀名*.lsp适用于编写…

tda7294引脚功能和电压_三款tda7294应用电路

tda7294引脚功能 1脚为待机端; 2脚为反相输入端; 3脚为正相输入端; 4脚接地; 5、11、12脚为空脚; 6脚为自举端; 7脚为Vs(信号处理部分); 8脚为-Vs(信号…

分布式计算平台 Hadoop 简介

Hadoop简介 Hadoop是一种分析和处理大数据的软件平台,是一个用Java语言实现的Apache的开源软件框架,在大量计算机组成的集群中实现了对海量数据的分布式计算。其主要采用MapReduce分布式计算框架,包括根据GFS原理开发的分布式文件系统HDFS、…

解锁 JavaScript 数组的强大功能:常用方法和属性详解(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

使用Qt连接scrcpy-server控制手机

Qt连接scrcpy-server 测试环境如何启动scrcpy-server1. 连接设备2. 推送scrcpy-server到手机上3. 建立Adb隧道连接4. 启动服务5. 关闭服务 使用QTcpServer与scrcpy-server建立连接建立连接并视频推流完整流程1. 开启视频推流过程2. 关闭视频推流过程 视频流的解码1. 数据包协议…

C++进阶--AVL树

AVL树 一、AVL树的概念二、AVL树节点的定义三、AVL树的插入四、AVL树的旋转4.1 左单旋4.2 右单旋4.3 左右双旋4.4 右左双旋 五、AVL树的验证六、AVL树的删除七、AVL树的性能七、完整代码7.1 AVLTree.h 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有…

命令行登录Mysql的详细讲解

目录 前言1. 本地登录2. 远程登录3. 拓展 前言 对于命令行登录Mysql一般都是用mysql -u root -p 但对于如何远程登陆,一直其他的参数还是有些盲区,对此总结科普 对于登录过程中出现的问题,可看我之前的文章: 服务器 出现ERROR …

CTF伪随机数爆破

要了解伪随机数的爆破首先你的先知道什么是PHP种子, 借用在rand()函数中,我们可以通过设置随机数种子来影响随机数的生成。例如,在rand()函数中加入了随机数种子编码后,每次运行程序将会生成同样的随机整数序列。这个就是伪随机数…

Python实现对角但非同一性协方差结构回归模型(WLS算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 WLS回归分析是一种常用的回归分析方法,通过对数据进行加权处理,可以更准确地评…

CNN:Convolutional Neural Network(上)

目录 1 为什么使用 CNN 处理图像 2 CNN 的整体结构 2.1 Convolution 2.2 Colorful image 3 Convolution v.s. Fully Connected 4 Max Pooling 5 Flatten 6 CNN in Keras 原视频:李宏毅 2020:Convolutional Neural Network 1 为什么使用…

计算机毕业设计 基于Java的国产动漫网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

HCIP 重发布

拓扑图&IP划分如下: 第一步,配置接口IP&环回地址 以R1为例,R2~R4同理 interface GigabitEthernet 0/0/0 ip address 12.1.1.1 24 interface GigabitEthernet 0/0/1 ip address 13.1.1.1 24 interface LoopBack 0 ip address 1.1.1.…

redis7部署集群

前言: redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。 Redis 主从模式&…