CLOUD理解
clound 解决了什么问题?为什么需要clond?他是怎么做的?
以前单体项目的时候,虽然发布快,比较简便,但是随着业务架构的复杂度提升,会出现耦合性比较高,有一个错误,整个项目就可能会出问题,随着后面分布式微服务架构得兴起,把服务进行一个拆分,需要统一得一个服务治理,服务的配置,所以就出现了,注册中心和配置中心, 在进行服务间的调用的时候,需要进行远程调用于是出现了ribbn,openFeign,以及多个服务间的调用选择需要有一个负载均衡调用,在后面需要对前端的请求进行统一的管理,所以就有了网关gateway,在这么多服务的调用链中避免不了有些会调用失败,这时候需要提高可用性,需要做一个服务的熔断和降级,于是 断路器Hystrix 出现了,它还可以起到一个监控的作用。
服务注册中心
Eureka 服务注册与发现
1.服务治理 : 服务调用,负载均衡,容错 2.服务注册
自我保护机制:当服务下线后,不会立马删掉节点的信息 (防止因为网络波动原因,进行错误判断 )
属于CAP里面的AP分支
Zookeeper 服务注册与发现
Zookeeper 是一个分布式协调工具,可以实现注册中心功能。
它的结构跟linux的有点类似。还可以用来实现分布式锁。
Consul 服务注册与发现
Consul提供了微服务系统中的治理中心,配置中心,
它的特点和优点:用GO语言开发,支持Linux,Mac,Windows ,基于raft协议,简介。。
CAP
C:一致性 Consistency
A:可用性 Availability
P:分区容错性 Partition tolerance
CAP 理论关注粒度是数据,而不是整体系统设计的策略。
Nacos 服务配置和注册中心
Nacos 名字的由来 Naming Confuguration Service
Nacos 就是注册中心 + 配置中心的组合 等价于 Eureka + Config + Bus ; Bus 就是动态刷新配置,监听变化的一个框架
注册比较
nacos重点
nacos 默认自带的是嵌入式数据库 derby 可以切换到mysql 书库
Ribbon负载均衡服务调用
Ribbon 主要功能是提供客户端的软件负载均衡算法和服务调用。
未来替换方案 spring cloud starter loadbalancer
LB(负载均衡) lod balancer
负载均衡就是将用户的请求平摊到多个服务上,从而达到一个高可用。常见的有 Nginx ,LVS ,硬件F5等
Ribbon 本地负载均衡和 Nginx服务端负载均衡的区别
服务端是对所有的客户端请求做一个负载均衡。本地负载均衡是服务端调用服务端的接口对这个请求做一个负载均衡。也叫做 进程内LB和集中式LB
Ribbon 就是 负载均衡 + RestTemplate 调用,就是HTTP调用。
Ribbon 核心组件 IRule
负载均衡的规则|算法 ,经典的就是轮询和随机 ,Nacos还有什么权重之类的算法。
OpenFegin 服务接口调用
Fegin是一个声明式WebService客户端。使用Fegin能让编写Web Service 。
其实就是简化了 Java Http 请求
它的使用方法是定义一个服务接口,然后在上面添加注解。
Fegin 集成了Ribbon 负载均衡,
Fegin 还有超时控制,
Hystrix 断路器
解决了什么问题?分布式系统复杂的依赖关系,调用接口时难免会失败。失败后会导致服务的雪崩失败。
怎么解决的?失败后返回一个可预期的,可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常。
可以用来干啥?服务降级,服务熔断,监控...
现在都用 Sentienl 做服务降级和熔断。
Gateway 路由器
API网关服务,基于 Spring5,Spring Boot2,Project Reactor 等技术。 netty
Spring Cloud Gateway 使用的 Webflux 中的 reactor-netty 响应式编程组件,底层使用了Netty 通讯框架。
可以用来干啥?反向代理,鉴权,流量控制,熔断,日志监控。
三大核心概念
Routte(路由) :它是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true 则匹配该路由。
Predicate(断言):开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。
Filter(过滤):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
总体:断言 -> 路由 -> 过滤
Filter 的使用,鉴权和日志。
SpringCloud config 分布式配置中心
解决了什么问题? 微服务将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,每个服务都有自己的一些配置。
能干什么?
- 集中式管理配置文件
- 不同环境不同配置,动态化的配置更新,分环境部署
- 运行期间动态调整配置,不再需要每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置信息
- 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
- 将配置信息以REST接口的形式暴露
特点:使用Git来存储配置文件。
缺点:只能手动式的动态刷新配置。
SpringCloud Bus 消息总线
解决了什么问题?配合 SpringCloud config 实现配置的自动动态刷新。
能干什么?它整合了Java的事件处理机制和消息中间件的功能。目前支持RabbitMQ 和 Kafka。
怎么做的?在微服务体系中,每个服务都去监听Bus的消息,由于它会被所有实习监听和消费,所以被称作为消息总线(Bus 公交车)。
当一个服务刷新数据的时候,它会把这个信息放入到Topic中,所有的实例就能得到通知,然后去更新自身的配置。
SpringCloud Stream 消息驱动
官方定义 Spring Cloud Stream 是一个构建消息驱动微服务的程序。
看不太懂直接上图简单理解一下。
SpringCloud Sleuth 分布式请求链路追踪
解决了什么问题?在微服务框架中,一个由客户端发起的请求往往会经过多个不同的服务节点调用来协调处理,每一个请求都会形成复杂的分布式服务调用链路,链路中的任何一环出现高延迟或者错误都会引起整个请求最后的失败。
SpringCloud Alibaba Sentinel 实现熔断与限流
跟Hystrix 一样的作用 -> 服务雪崩,服务降级,服务熔断,服务限流。
流控规则:
直接:api达到限流条件时,直接限流
关联:当关联的资源达到阈值时,就限流自己
链路:只记录链路上的流量(指定某一段A->B的流量,对其进行限制,API级别的针对来源)
流控效果:
快速失败:直接失败,抛异常
Warm Up:根据codeFactor (冷加载因子,默认3)的值,从阈值/codeFactor ,经过预热时长,才达到设置的QPS阈值。
排队等待:均匀排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效。
...
SpringCloud Alibaba Seata 处理分布式事务
Seata 分布式事务的执行流程 :
TM开启分布式事务(TM向TC注册全局事务记录)
换业务场景,编排数据库,服务等事务内资源(RM向TC汇报资源准别状态)
TM结束分布式事务,事务一阶段结束(TM通知TC提交|回滚分布式事务)
TC汇总事务信息,决定分布式事务是提交还是回滚。
TC通知所有RM提交|回滚资源,事务二阶段结束。