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 网关,路由,负载均衡等多种作用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 客户端

Redis 客户端 客户端-服务器结构 Redis 同 Mysql 一样,也是一个客户端-服务器结构的程序,结构如下图: 注:Redis 客户端和服务器可以在同一个主机上,也可以在不同主机上 Redis 客户端的多种形态 自带的命令行客户端&…

【Qt 学习笔记】详解Qt中的信号和槽

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 详解Qt中的信号与槽 文章编号:Qt 学习笔记 / 12 文章目录…

【Node.js】短链接

原文链接:Nodejs 第六十二章(短链接) - 掘金 (juejin.cn) 短链接是一种缩短长网址的方法,将原始的长网址转换为更短的形式。短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些平台对字符数量有限制,长网址可…

旋转花键有哪些优缺点?

旋转花键是在花键外筒的外径上装上专用的轴承外套,使之运转动作,适用于水平多关节机械手臂(SCARA)、产业用机器人、自动装载机、镭射加工机、搬送装置、机械加工中心的ATC装置等各项设备。 目前,旋转花键的应用越来越普…

redis 哨兵

文章目录 前言主从复制的问题怎么人工恢复故障主节点 Redis Setinel 架构使用 docker 来配置哨兵结构安装 docker编排 redis 主从节点编排 redis 哨兵节点 观察哨兵模式的作用主从切换的具体流程小结 前言 redis 主从复制模式下, 一旦主节点出现故障, 不能提供服务的时候, 就需…

刷题之Leetcode283题(超级详细)

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nu…

第十讲 Query Execution Part 1

1 处理模型【Processing Model】 DBMS 的处理模型【Processing Model】定义了系统如何执行【execute】查询计划【Query Plan】。 针对不同的工作负载进行不同的权衡。 方法1:迭代器模型【Iterator Model】 方法2:物化模型【Materialization Model】 方…

创建和启动线程

概述 Java语言的JVM允许程序运行多个线程,使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。 Thread类的特性 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,因此把run()方法体称为线程执行体。…

数据结构之堆底层实现的循序渐进

题外话 把没写的都补回来! 正题 堆 概念 堆是一棵完全二叉树,因此可以层序的规则采用顺序的方式来高效存储, 大根堆:指根结点比左右孩子都大的堆 小根堆:指根结点比左右孩子都小的堆 性质 1.堆中某个节点的值总是不大于或不小于其父节点的值 2…

CCIE-14-MPLS_and_BGP

目录 实验条件网络拓朴 环境配置开始配置配置MPLSR1访问R6检测结果R6访问R1检测结果 实验条件 网络拓朴 环境配置 在我的资源里可以下载&#xff08;就在这篇文章的开头也可以下载&#xff09; 开始配置 R1<->R2&#xff1a;EBGP R2<->R5&#xff1a;IBGP&…

蓝桥杯备考3

P8196 [传智杯 #4 决赛] 三元组 题目描述 给定一个长度为 n 的数列 a&#xff0c;对于一个有序整数三元组 (i,j,k)&#xff0c;若其满足 1≤i≤j≤k≤n 并且&#xff0c;则我们称这个三元组是「传智的」。 现在请你计算&#xff0c;有多少有序整数三元组是传智的。 输入格式…

小米手机澎湃OS,不Root查看电池健康

首先&#xff0c;在键盘拨号界面&#xff0c;输入*#*#284#*#*&#xff0c;会调用问题反馈APP来生成当前系统的故障日志&#xff0c;如果提示你需要授权什么就点确认 稍等几分钟&#xff0c;会得到一个压缩包&#xff0c;保存在目录MIUI/debug_log下 这里为了方便&#xff0c;我…

肖恩带你学C语言·文件操作(上)

1. 为什么使用文件 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久化的保存&…

打造自然资源“一张图”管理平台,推动生态文明建设新篇章

在信息化时代的浪潮下&#xff0c;自然资源管理正面临着前所未有的挑战与机遇。传统的资源管理模式已经难以满足当前生态环境保护与经济发展的双重需求&#xff0c;我们需要一个全新的平台&#xff0c;一个集信息集成、智能分析、决策支持于一体的自然资源“一张图”管理平台。…

数据可视化-地图可视化-Python

师从黑马程序员 基础地图使用 基础地图演示 视觉映射器 具体颜色对应的代码可以在http://www.ab173.com/中查询RGB颜色查询对照表 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts#准备地图对象 mapMap() #准备数据 data[("北京",…

c语言结构体变量和结构体数组的练习(自用版)

结构体变量注释和结构体数组练习&#xff08;已注释&#xff09;代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> struct Student {char name[20];int age;char sex;float score;char addr[30]; };int main() {//练习结构体变量struct Student s…

SSL/TLS:网络安全中的基石

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

c# wpf LiveCharts 简单试验2

1.概要 1.1 说明 1.2 要点 1.2.1 添加命名控件 xmlns:lvc"clr-namespace:LiveCharts.Wpf;assemblyLiveCharts.Wpf" 1.2.2 图片控件 <lvc:CartesianChart Name"chart" LegendLocation"Right"/> 1.3 代码文件引用 using LiveCharts…

YOLOv5实战记录05 Pyside6可视化界面

个人打卡&#xff0c;慎看。 指路大佬&#xff1a;【手把手带你实战YOLOv5-入门篇】YOLOv5 Pyside6可视化界面_哔哩哔哩_bilibili 零、虚拟环境迁移路径后pip报错解决 yolov5-master文件夹我换位置后&#xff0c;无法pip install了。解决如下&#xff1a; activate.bat中修改…

刷题之Leetcode844题(超级详细)

844.比较退格的字符串 844. 比较含退格的字符串https://leetcode.cn/problems/backspace-string-compare/ 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如…