Spring Cloud介绍

9edb6bb320bd4ed083146978f76d2d98.gif一、SpringCloud总体概述

 

 

 

Cloud Foundry Service Broker:通用service集成进入Cloud Foundry

 

Cluster:服务集群

 

Consul:注册中心

 

Security:安全认证

 

Stream:消息队列

 

Stream App Starters:Spring Cloud Stream Application Starters是独立的可执行应用程序,可通过Apache Kafka和RabbitMQ等消息传递中间件进行通信

 

Connectors:简化了云平台(如Cloud Foundry和Heroku)中连接服务和获取操作环境感知的过程,尤其适用于Spring应用程序

 

CLI:允许使用命令行、.yml配置文件和Groovy脚本快速自动配置和部署标准Spring Cloud服务

 

Contract:Spring Cloud Contract 为通过CDC(Customer Driven Contracts)开发基于JVM的应用提供了支持。它为TDD(测试驱动开发)提供了一种新的测试方式 - 基于接口。

 

Config:配置中心

 

Netflix:Netflix

 

Bus:消息总线

 

Cloud Foundry:云开发平台

 

Sleuth:链路追踪

 

DataFlow:针对各种数据集成和处理场景的一系列预构建流和任务/批处理启动器应用程序

 

Task:Tasks是Spring Cloud Data Flow中的一个基础项目,允许用户将几乎任何Spring Boot应用程序作为一个短期任务执行。

 

Task App Starters:Spring Cloud Task Applications可与Spring Cloud Data Flow一起使用,以创建,部署和编排短期数据微服务。

 

Starters:启动器

 

 

 

主流实现:

 

 

 

Netflix

 

阿里

 

其它

 

注册中心

 

Eureka

 

Nacos

 

Zookeeper、Consul、Etcd

 

负载均衡

 

Ribbon

 

Dubbo(未来)

 

spring-cloud-loadbalancer

 

声明式调用

 

 

 

 

 

spring-cloud-openfeign

 

服务保障(熔断器)

 

Hystrix

 

Sentinel

 

Resilience4j

 

网关

 

Zuul1

 

暂无

 

Spring Cloud Gateway

 

配置中心

 

 

 

spring-cloud-alibaba-nacos-config

 

spring-cloud-config、Apollo

 

链路追踪

 

Ribbon

 

Dubbo(未来)

 

spring-cloud-loadbalancer

 

消息队列

 

 

 

 

 

 

 

 

 

回到顶部

二、注册中心

在 Spring Cloud 中,能够使用的注册中心,还是比较多的,如下:

 

(1)spring-cloud-netflix-eureka-server和spring-cloud-netflix-eureka-client,基于 Eureka 实现。

 

(2)spring-cloud-alibaba-nacos-discovery,基于Nacos实现。

 

(3)spring-cloud-zookeeper-discovery,基于 Zookeeper 实现。

 

以上都是基于spring-cloud-commons的discovery的DiscoveryClient接口,实现统一的客户端的注册发现。

 

    注意:在分布式系统领域有个著名的CAP理论(C-数据一致性;A-服务可用性;P-服务对网络分区故障的容错性,这三个特性在任何分布式系统中不能同时满足,最多同时满足两个);zk看重CP,Eureka在意AP。例如:zk中有master和follower区别,当进入选举模式时,就无法正常对外提供服务。但Eureka中,集群是对等的,地位是相同的,虽不能保证一致性,但至少可以提供注册服务。

 

 

 

以Eureka为例说明注册中心:

 

作用:实现服务治理(服务注册与发现)

 

简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。

 

由两个组件组成:Eureka 服务端和 Eureka 客户端。Eureka 服务端,用作服务注册中心,支持集群部署。

 

Eureka 客户端,是一个 Java 客户端,用来处理服务注册与发现。

 

在应用启动时,Eureka 客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

 

原理图:

 

 

 

 

 

 

 

回到顶部

三、负载均衡

随着业务的发展,单台服务无法支撑访问的需要,于是搭建多个服务形成集群。那么随之要解决的是,每次请求,调用哪个服务,也就是需要进行负载均衡。

 

目前负载均衡有两种模式:

 

客户端模式

 

服务端模式

 

在 Spring Cloud 中,我们使用前者,即客户端模式。

 

以Ribbon为例:

 

作用:主要提供客户侧的软件负载均衡算法。

 

简介:Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。

 

 

 

 

 

 

 

 

 

 

 

Ribbon 原理,整体步骤如下:

 

首先,Ribbon 会从 Eureka Client 里获取到对应的服务列表。

 

然后,Ribbon 使用负载均衡算法获得使用的服务。

 

最后,Ribbon 调用对应的服务。

 

 

 

回到顶部

四、声明式调用

在SpringCloud中,目前使用的声明式调用组件,只有spring-cloud-openfeign,基于Feign 实现(Dubbo 的 Service API 接口,也是一种声明式调用的体现)。

 

注意:Feign 并非一定要在 Spring Cloud 下使用,单独使用也是没问题的。

 

Feign使用步骤:

 

首先,如果你对某个接口定义了@FeignClient注解,Feign 就会针对这个接口创建一个动态代理。

 

接着你要是调用那个接口,本质就是会调用 Feign 创建的动态代理,这是核心中的核心。

 

Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址。

 

最后针对这个地址,发起请求、解析响应。

 

 

 

原理图:

 

 

 

Feign 和 Ribbon 的区别:

 

Ribbon 和 Feign 都是用来调用其他服务的,不过方式不同。

 

(1)启动类用的注解不同。

 

Ribbon 使用的是@RibbonClient

 

Feign 使用的是@EnableFeignClients。

 

(2)服务的指定位置不同。

 

Ribbon 是在@RibbonClient注解上设置。

 

Feign 则是在定义声明方法的接口中用@FeignClient注解上设置。

 

(3)调使用方式不同。

 

Ribbon 需要自己构建 Http 请求,模拟 Http 请求而后用 RestTemplate 发送给其余服务,步骤相当繁琐。

 

Feign 采使用接口的方式,将需要调使用的其余服务的方法定义成声明方法就可,不需要自己构建 Http 请求。不过要注意的是声明方法的注解、方法签名要和提供服务的方法完全一致。

 

 

 

 Feign 是和 Ribbon、Eureka 整合:

 

 

 

 

 

 首先,用户调用 Feign 创建的动态代理。

 

然后,Feign 调用 Ribbon 发起调用流程。

 

首先,Ribbon 会从 Eureka Client 里获取到对应的服务列表。

 

然后,Ribbon 使用负载均衡算法获得使用的服务。

 

最后,Ribbon 调用对应的服务,(最后,Ribbon 调用 Feign )而 Feign 调用 HTTP 库最终调用使用的服务。

 

回到顶部

五、服务保障

在 Spring Cloud 中,能够使用的服务保证,如下:

 

spring-cloud-netflix-hystrix,基于 Hystrix 实现。

 

Resilience4j

 

spring-cloud-alibaba-sentinel,基于 Sentinel 实现。

 

为什么要使用服务保障

 

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC)。为了保证其高可用,单个服务又必须集群部署。由于网络原因或者自身的原因,服务并不能保证服务的 100% 可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务累积,导致服务瘫痪,甚至导致服务“雪崩”。为了解决这个问题,就出现断路器模型。

 

 

 

 

 

 通过 HystrixCircuitBreaker 实现。

 

HystrixCircuitBreaker 有三种状态 :

 

(1)CLOSED:关闭 (2)OPEN:打开 (3)HALF_OPEN:半开

 

HystrixCircuitBreaker 状态变迁如下图 :

 

 

 

 

 

 

 

红线 :初始时,断路器处于 CLOSED 状态,链路处于健康状态。当满足如下条件,断路器从 CLOSED 变成 OPEN 状态:周期( 可配,HystrixCommandProperties.default_metricsRollingStatisticalWindow = 10000 ms )内,总请求数超过一定量( 可配,HystrixCommandProperties.circuitBreakerRequestVolumeThreshold = 20 ) 。

 

错误请求占总请求数超过一定比例( 可配,HystrixCommandProperties.circuitBreakerErrorThresholdPercentage = 50% ) 。

 

绿线 :断路器处于 OPEN 状态,命令执行时,若当前时间超过断路器开启时间一定时间( HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds = 5000 ms ),断路器变成 HALF_OPEN 状态,尝试调用正常逻辑,根据执行是否成功,打开或关闭熔断器【蓝线】。

 

 

 

以Hystrix为例:

 

作用:断路器,保护系统,控制故障范围。

 

简介:Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。

 

Hystrix 原理,整体如下图:

 

 

 

 

 

 

 

回到顶部

六、网关服务

在 Spring Cloud 中,能够使用的网关服务,主要是两个,如下:

 

spring-cloud-netflix-zuul ,基于 Zuul1 实现。

 

Netflix 最新开源的网关服务是 Zuul2 ,基于响应式的网关服务。

 

spring-cloud-gateway,基于 Spring Webflux 实现。

 

网关服务,可以实现的功能:

 

动态路由

 

灰度发布

 

健康检查

 

限流

 

熔断

 

认证: 如数支持 HMAC, JWT, Basic, OAuth 2.0 等常用协议

 

鉴权: 权限控制,IP 黑白名单,同样是 OpenResty 的特性

 

可用性

 

高性能

 

作用:API 网关,路由,负载均衡等多种作用

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

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

相关文章

蓝桥杯算法基础(38)c++ STL

哈希表的常用函数 #include<iostream> #include<unordered_map> #include<string> int main(){ //创建一个unordered_map实例 std::unordered_map<std::string,int>hash_table; //插入数据 hash_table["one"]1; …

【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】

2024.4.1 Monday 目录 4.DQL查询数据&#xff08;重点&#xff01;&#xff09;4.1.Data Query Language查询数据语言4.2.SELECT4.2.1.语法4.2.2.实践4.2.2.1.查询字段 SELECT 字段/* FROM 表查询全部的某某查询指定字段 4.2.2.2.给查询结果或者查询的这个表起别名&#xff08…

socket套接字函数

Socket套接字函数是用于网络编程的一组API&#xff0c;用于在网络上进行通信。这些函数提供了一种通用的接口&#xff0c;使得程序能够通过网络连接进行数据的发送和接收。下面是对常见的几个Socket函数及其参数的解释&#xff1a; socket()函数&#xff1a; 作用&#xff1a;创…

开源代码分享(17)-基于足球队训练算法(Football Team Training Algorithm,FTTA)的组合风速预测

参考文献&#xff1a; [1]Tian Z, Gai M. Football team training algorithm: A novel sport-inspired meta-heuristic optimization algorithm for global optimization[J]. Expert Systems with Applications, 2024, 245: 123088. 1.算法基本原理 足球队训练算法&#xff0…

【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?

目录 缓存穿透 缓存穿透解决办法 缓存击穿 击穿解决办法&#xff1f; 缓存穿透和缓存击穿的区别&#xff1f; 缓存雪崩 雪崩解决办法&#xff1f; 如何确保缓存和数据库数据的一致性&#xff1f; 常见的缓存更新策略&#xff1f; 缓存穿透 定义&#xff1a;缓存穿透说…

算法| ss 二叉树

二叉树的层序遍历 102. 二叉树的层序遍历 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? null : righ…

【科普】卫星如何定位汽车

卫星定位汽车的方法&#xff0c;主要依赖于全球定位系统&#xff08;GPS&#xff09;&#xff0c;它是一种结合卫星及通讯发展的技术&#xff0c;利用导航卫星进行测时和测距。用户接收机通过接收这些卫星播发的信号&#xff0c;可以测定其到卫星的距离并确定自身位置。下面&am…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

授人以渔 选购篇二:冰箱选购要点

文章目录 系列文章容量&#xff1a;每人约需70-80升空间门体类型与尺寸制冷方式&#xff1a;风冷变频能效等级&#xff1a;一级能效品牌其他 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&#xff1a;冰箱选购要点 授人以渔 选购篇三&#xff1a;…

阿里巴巴蔡崇信:中国AI追赶神速,制造业霸主地位无可撼动!

快科技4月5日讯&#xff0c;阿里巴巴集团创始人兼董事长蔡崇信近日就AI技术领域及全球制造业形势发表看法。他认为&#xff0c;尽管中国在AI技术方面与美国有一定差距&#xff0c;但中国的追赶速度非常快。 AI-321 | 专注于AI工具分享的网站 AI工具集 | 人工智能工具箱 | 全球…

金三银四面试题(十五):Java基础问题(6)

这部分面试题多用于面试的热身运动&#xff0c;对很多找实习和准备毕业找工作的小伙伴至关重要。 HashMap与ConcurrentHashMap 都是key-value 形式的存储数据&#xff1b; HashMap 是线程不安全的&#xff0c;ConcurrentHashMap 是JUC 下的线程安全的&#xff1b; HashMap 底层…

NumPy 数组对象

NumPy 数组对象 1. Example 12. Example 2References NumPy 数组一般是同质的 (但有一种特殊的数组类型例外&#xff0c;它是异质的)&#xff0c;即数组中的所有元素类型必须是一致的。这样有一个好处&#xff1a;如果我们知道数组中的元素均为同一类型&#xff0c;该数组所需的…

2024.4.6学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p315-p328 动态绑定机制 当调用方法对象的时候&#xff0c;该方法会和该对象的内存地址/运行类型绑定 当调用对象属性时&#xff0c;没有动态绑定机制&#xff0c;哪里声明&#xff0c;哪里使用 …

2024年ERP管理系统职业技能大赛软件测试赛项-销售专员模块Bug清单

目录 一、ERP管理系统说明: 二、销售专员模块部分Bug缺陷清单: 一、ERP管理系统说明: ERP(资源协同)管理平台将采购、销售、库存、服务等活动紧密衔接在一起,提供完整供应链服务࿰

【单片机】PMS5003,PM2.5传感器数据读取处理

文章目录 传感器介绍数据处理解析pm2.5的代码帮助、问询 传感器介绍 PMS5003是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集 并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而 换算成为质量浓度,并以通用数字接口形式输出。本传感器可…

综测仪MT8862A控制方法

实现自动化控制&#xff0c;本次为大家讲解综测仪MT8862A的控制逻辑。 新建底层控制逻辑 在文件basis_contorl.py中写入仪器控制底层代码&#xff0c;代码如下&#xff1a; import tkinter.messagebox import pyvisaclass InstrumentControl(object):inst Nonedef __init__(…

Python中的scorecardpy.var_filter函数

scorecardpy是一个用于构建评分卡模型的Python库。在评分卡模型的构建过程中,变量选择是一个关键的步骤,而var_filter函数则是用于进行变量筛选的工具。本文和你一起来探索scorecardpy中的var_filter函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这…

【学习总结】Linux tmux 使用

1. 使用背景 本地连接服务器 AutoDL 训练模型时&#xff0c;使用 ssh 连接时&#xff1a; ssh -p xxxxx rootconnect.westc.gpuhub.com输入密码登录成功后 为了训练过程中本地和服务器始终连接&#xff0c;可以使用 tmux 终端复用工具开启后台训练 2. 安装 ~# sudo apt-ge…

CKA 基础操作教程(二)

Kubernetes Deployment 理论学习 Kubernetes Deployment &#xff08;部署&#xff09;是一种 Kubernetes 资源对象&#xff0c;用于定义和管理容器化应用程序的部署和更新。Deployment 提供了一种声明性的方式来定义应用程序的期望状态&#xff0c;并负责确保所需数量的 Pod…

聚簇索引与非聚簇索引b+树实现的区别

文章目录 聚簇索引非聚簇索引B树中聚簇索引的查找&#xff08;匹配&#xff09;逻辑B树中非聚簇索引的查找&#xff08;匹配&#xff09;逻辑 聚簇索引 特点&#xff1a; 索引和数据保存在同一个B树中 页内的记录是按照主键的大小顺序排成一个单向链表 。 页和页之间也是根据…