spring cloud
Eureka
服务与服务之间依赖关系比较复杂,管理麻烦,因此需要服务治理,管理服务与服务之间的依赖关系,可以实现服务调用,负载均衡,容错,服务发现与注册
Eureka作为服务注册发现功能的服务器,他是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到EurekaServer并维持心跳链接,这样系统的维护人员就可以通过Eureka来检测系统中的微服务是否正常运行
Ribbon
是基于NetFlix Ribbon实现的一套客户端负载均衡和服务调用的工具
Lb负载均衡
简单地说就是将用户的请求平均的分配到多个服务上,从而达到高可用
Ribbon和Nginx
Nginx是是服务器负载均衡,客户端所有的请求都会交给nginx然后由nginx实现请求转发,即负载均衡是由服务端实现的
Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程调用技术
集中式LB
即在服务的消费方和提供方之间使用独立的LB(可以是硬件,如F5也可以是软件,如Nginx)设施,由该设施负责把访问请求通过某种策略转发至服务的提供方
进程式LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择一台合适的服务器
负载均衡策略
- 轮询,test接口请求次数%服务器集群总数量
- 随机
- 先按照轮询机制获取服务,如果获取失败则在指定时间内重试
- 多劳多得轮询,响应速度快实例选择得权重越大,越容易被选择
- 会先过滤掉由于多次访问故障而处于断路器跳闸得服务,然后选择一个并发量最小得服务
- 先过滤故障实例,在选择并发最小得
openFeign
服务调用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@EnableFeignClients
@FeignClient("CLOUD-PAY-SERVER")
## 超时控制 默认一秒
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
Hystrix
Hystrix是一个用于处理分布式系统得延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等等,它可以保证在一个依赖出问题的情况下不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性
服务雪崩
多个微服务之间调用得时候,假设微服务A调用BC,BC又调用其他,这是所谓的扇出,A的流量突然增大,调用链路中有一个服务无法正常响应,重试加大其他服务器增加压力,最后所有服务器瘫痪
服务降级
服务器繁忙,让服务器响应
什么时候会出现降级
- 程序运行异常
- 超时
- 服务熔断触发服务降级
- 线程池/信号量打满也会导致服务降级
服务熔断
是一种应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长会进行服务降级,进而熔断该服务的调用,快速返回错误信息的响应。当服务正常后,恢复调用链路
服务限流
防止访问量突然飙升导致宕机,一秒钟N个,限制请求
Gateway
Route路由
路由是基本的构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true,则匹配该路由
Predicate断言
开发人员可以匹配Http请求中的所有内容(请求头和请求参数),如果请求与断言相匹配则进行路由
filter过滤
指的是spring框架中GatewayFilter的实例,使用过滤器,可以在请求在北路有钱或者路由后对请求进行修改
实现GlobalFilter,Ordered
seata
一个id加三个组件
- 唯一id
- tc:事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚
- tm:事务控制器,控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或回滚的决议
- rm:资源