Spring cloud学习—概念理解

标题:Spring cloud学习—概念理解

学习内容:

1、Spring cloud总概述图
2、Eureka(服务注册)
3、Ribbon(负载均衡)
4、Feign、OpenFeign(声明式WebService客户端)
5、Hystrix(熔断器)
6、Zull、gateway(网关)
7、config(配置中心)
8、bus(消息总线)
9、SpringCloud Stream(消息驱动)
10、SpringCloud Sleuth(分布式请求链路追踪)
11、SpringCloud Alibaba入门简介
12、SpringCloud Alibaba Nacos(服务注册和配置中心)
13、SpringCloud Alibaba Sentinel(实现熔断与限流)
14、SpringCloud Alibaba Seata(处理分布式事务)


内容详情:

1、Spring cloud总概述图
在这里插入图片描述
2、Eureka(服务注册)

什么是服务治理

Spring Cloud封装了Netflix公司开发的Eureka模块来实现服务治理
在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于报务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

什么是服务注册与发现

Eureka采用了CS的设计架构,Eureka Sever作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到 Eureka Sever并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

Eureka Sever和Eureka Client

Eureka Sever:用作服务注册中心,支持集群部署。就相当于一个平台,都可以在这面注册。

Eureka Client:是一个java客户端,用来处理服务注册与发现。平台上的商家或者平台上的消费者
客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

Eureka自我保护机制

与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务剔除。
Eureka会统计服务实例最近15分钟内心跳续约比例是否低于85%,此时如果心跳续约比例高于85%,而某服务仍然不能按时续约,则剔除(如果很多都掉线了则是网络原因,如果不是的话就是服务本身原因,则剔除)

3、Ribbon(负载均衡)

Ribbon

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。

LB负载均衡(Load Balance)是什么

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。

Ribbon本地负载均衡客户端VS Nginx服务端负载均衡区别

Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

4、Feign、OpenFeign(声明式WebService客户端)

Feign

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。

Feign是Spring Cloud组件中一个轻量级Restful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用接口,就可以调用服务注册中心的服务。

在这里插入图片描述
5、Hystrix(熔断器)

Hystrix

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等.
Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

"断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

在这里插入图片描述
服务降级

服务器忙,请稍候再试,不让客户端等待并立刻返回一个友好提示,fallback

服务熔断

类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示,当检测到该节点微服务调用响应正常后,恢复调用链路。

服务的降级->进而熔断->恢复调用链路

服务限流

秒杀高并发等操作,严禁一窝蜂的过来拥挤,大家排队,一秒钟N个,有序进行

6、Zull、gateway(网关)

网关

是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上

网关的作用:

统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。
鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。
动态路由:动态的将请求路由到不同的后端集群中。
减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。

gateway特性

动态路由:能够匹配任何请求属性;
可以对路由指定Predicate(断言)和Filter (过滤器);
集成Hystrix的断路器功能;
集成 Spring Cloud服务发现功能;
易于编写的 Predicate(断言)和Filter (过滤器);
请求限流功能;
支持路径重写。

Route(路由)

路由是构建网关的基本模块,它由ID,目标uri,一系列的断言和过滤器组成,如果断言为true则匹配该路由

Predicate(断言)

开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由

Filter(过滤)

使用过滤器,可以在请求被路由前或者之后对请求进行修改。

web请求,通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制。
predicate就是我们的匹配条件;
而flter,就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就可以实现一个具体的路由了

7、config(配置中心)

SpringCloud Config

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以—套集中式的、动态的配置管理设施是必不可少的。

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

SpringCloud Config分为服务端和客户端两部分。
服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容

在这里插入图片描述

8、bus(消息总线)

Spring Cloud Bus

Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。
用在广播状态的变化(例如配置变化)或者其他的消息指令
Spring Cloud Bus目前支持RabbitMQ和Kafka。

通常会使用消息代理来构建一个主题,然后把微服务架构中的所有服务都连接到这个主题上去,当我们向该主题发送消息时,所有订阅该主题的服务都会收到消息并进行消费。
使用 Spring Cloud Bus 可以方便地构建起这套机制,所以 Spring Cloud Bus 又被称为消息总线。

Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。

在这里插入图片描述

提交代码触发post给客户端A发送bus/refresh
客户端A接收到请求从Server端更新配置并且发送给Spring Cloud Bus
Spring Cloud Bus接到消息并通知给其它客户端
其它客户端接收到通知,请求Server端获取最新配置
全部客户端均获取到最新的配置

9、SpringCloud Stream(消息驱动)

为了解决系统中不同中间件的适配问题,出现了cloud stream,采用适配绑定的方式,自动给不同的MQ之间进行切换。

在这里插入图片描述

应用程序通过inputs(消费者)或者outputs(生产者)来与Spring Cloud
Stream中binder对象交互。通过我们配置来绑定,而Spring Cloud Stream的binder对象负责与消息中间件交互。

官方版本目前仅仅支持RabbitMQ和Kafka。

10、SpringCloud Sleuth(分布式请求链路追踪)

完成一个外部请求需要多个应用之间相互协作,形成复杂的调用链路。而一旦出现问题,更是难以定位问题,也难以直观地获取到各个服务之间的依赖关系。Spring Cloud Sleuth的出现正是为了实现分布式系统的链路追踪。在微服务中我们可以采用服务跟踪sleuth和可视化跟踪工具Zipkin搭配使用。

11、SpringCloud Alibaba入门简介

在这里插入图片描述

服务限流降级:默认支持Servlet、Feign、RestTemplate、Dubbo和RocketM限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics 监控。
服务注册与发现:适配 Spring Cloud服务注册与发现标准,默认集成了Ribbon的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力:基于Spring Cloud Stream为微服务应用构建消息驱动能力。
阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker (schedulerx-client)上执行。

12、SpringCloud Alibaba Nacos(服务注册和配置中心)

Nacos就是注册中心+配置中心的组合
Nacos = Eureka+Config+Bus

13、SpringCloud Alibaba Sentinel(实现熔断与限流)

在这里插入图片描述

14、SpringCloud Alibaba Seata(处理分布式事务)

单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。

Seata是一款开源的分布式事务解决方案,致力于在微服务架构在提供高性能和简单易用的分布式事务服务。

Transaction ID XID:全局唯一的事务ID

Transaction Coordinator(TC) :维护全局和分支事务的状态,驱动全局事务提交或回滚。

Transaction Manager(.TM) :定义全局事务的范围:开始全局事务、提交或回滚全局事务。

Resource Manager(RM) :管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

在这里插入图片描述

TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的
XID XID在微服务调用链路的上下文中传播
RM向TC注册分支事务,将其纳入XID对应全局事务的管辖
TM向TC发起针对XID的全局提交或回滚决议
TC调度XID下管辖的全部分支事务完成提交或回滚请求

TM 班主任 TC 语文老师 RM 同学 XID 班级号
班主任要语文老师上课,班级号是357
同学们都要去357上课
同学们向语文老师报到
班主任说老师可以上课了
语文老师上完课了,说下课。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值