文章目录
- 前言
- 一、服务注册中心eureka
- 二、负载均衡Ribbon
- 三、熔断器Hystrix
- 三、网关GateWay
- 总结
前言
spring cloud提供了一系列的微服务解决方案,后面甚至还出现了我们说的第二代SCA–spring cloud alibaba。下面我们就一起来看下其中比较重要的几个吧!
一、服务注册中心eureka
注意:注册中心本质上是为了接耦服务提供者和服务消费者。
服务注册中心一般原理:
服务注册中心对比:
目光聚焦eureka:
eureka通过心跳检测、健康检查和客户端缓存等机制,提高系统的灵活性、可伸缩性和可用性。
⚠️从图中可以看出是主动拉取模式⚠️
Eureka 包含两个组件:Eureka Server 和 Eureka Client,Eureka Client是⼀个Java客户端,⽤于简化与Eureka Server的交互;Eureka Server提供服务发现的能⼒,各个微服务启动时,会通过Eureka Client向Eureka Server 进⾏注册⾃⼰的信息(例如⽹络信息),Eureka Server会存储该服务的信息;
30s:客户端每隔30s去获取并更新数据;
60s:服务端每隔60s对客户端链接进行检查;
90s:服务端超过90s没有没有接收到客户端的心跳,会移除该实例;
15分钟80%:如果15分钟内80%客户端失效,就会启动自我保护机制;
二、负载均衡Ribbon
不需要引⼊额外的Jar坐标,因为在服务消费者中我们引⼊过eureka-client,它会引⼊Ribbon相关Jar。
怎么用?在RestTemplate上添加对应注解即可
怎么改默认策略?配置如下:
#针对的被调⽤⽅微服务名称,不加就是全局⽣效
lagou-service-resume:
ribbon:
NFLoadBalancerRuleClassName:
com.netflix.loadbalancer.RandomRule #负载策略调整
三、熔断器Hystrix
主要是为了防止雪崩效应,进行服务的熔断和降级。
Hystrix主要通过以下⼏点实现延迟和容错:
- 包裹请求:使⽤HystrixCommand包裹对依赖的调⽤逻辑。
- 跳闸机制:当某服务的错误率超过⼀定的阈值时,Hystrix可以跳闸,停⽌请求该服务⼀段时间。
- 资源隔离:Hystrix为每个依赖都维护了⼀个⼩型的线程池(舱壁模式)(或者信号量)。如果该线程池已满, 发往该依赖的请求就被⽴即拒绝,⽽不是排队等待,从⽽加速失败判定。
- 监控:Hystrix可以近乎实时地监控运⾏指标和配置的变化,例如成功、失败、超时、以及被拒绝 的请求等。
- 回退机制:当请求失败、超时、被拒绝,或当断路器打开时,执⾏回退逻辑。回退逻辑由开发⼈员 ⾃⾏提供,例如返回⼀个缺省值。
- ⾃我修复:断路器打开⼀段时间后,会⾃动进⼊“半开”状态。
三、网关GateWay
不仅提供统⼀的路由⽅式(反向代理)并且基于 Filter(定义过滤器对请求过滤,完成⼀些功能) 链的⽅式提供了⽹关基本的功能,例如:鉴权、
流量控制、熔断、路径重写、⽇志监控等。
⚠️异步⾮阻塞的,基于Reactor模型⚠️
工作流程:
客户端向Spring Cloud GateWay发出请求,然后在GateWay Handler Mapping中找到与请求相匹配的路由,将其发送到GateWay Web Handler;Handler再通过指定的过滤器链来将请求发送到我们实际的服务执⾏业务逻辑,然后返回。过滤器之间⽤虚线分开是因为过滤器可能会在发送代理请求之前(pre)或者之后(post)执⾏业务逻辑。
Filter在“pre”类型过滤器中可以做参数校验、权限校验、流量监控、⽇志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改、⽇志的输出、流量监控等。
总结
正是因为有了这些治理组件的存在,才让微服务运行过程中遇到的各种问题得以解决。