Spring Cloud
2020-09-04 09:26:01 0 举报
AI智能生成
SpringCloud
作者其他创作
大纲/内容
Eureka
解决的问题
服务的调用方需要存储服务提供方的IP地址和端口号信息
服务提供方的地址信息改变后,服务调用方的全部节点都需要维护,耦合性太高
作用
Eureka就是帮助我们维护所有服务的信息,以便服务之间的相互调用(简称:服务的注册与发现)
提供服务的治理功能,用来实现各个微服务示例的注册与发现
Eureka高可用
检查宕机的心跳机制
EurekaClient会通过心跳的方式去和EurekaServer进行连接
默认30sEurekaClient会发送一次心跳请求
如果超过了90s还没有发送心跳信息的话,EurekaServer就认为你宕机了,将当前EurekaClient从注册表中移除
EurekaClient会每隔30s去EurekaServer中去更新本地的注册表
自我保护机制
统计15分钟内,如果一个服务的心跳发送比例低于85%,EurekaServer就会开启自我保护机制
不会从EurekaServer中去移除长时间没有收到心跳的服务
EurekaServer还是可以正常提供服务的
网络比较稳定时,EurekaServer才会开始将自己的信息被其他节点同步过去
CAP理论
C:一致性
A:可用性
P:分区容错性
注意:我们必须容忍的就是分区容容错性,但是C和A之间要取舍
Eureka是典型的AP,Zookeeper是典型的CP
Ribbon
Ribbon是帮助我们实现服务和服务负载均衡,Ribbon属于客户端负载均衡
负载均衡分类
客户端负载均衡:customer客户模块,将2个Search模块信息全部拉取到本地的缓存,在customer中自己做一个负载均衡的策略,选中某一个服务。
服务端负载均衡:在注册中心中,直接根据你指定的负载均衡策略,帮你选中一个指定的服务信息,并返回。
负载均衡策略
RandomRule:随机策略
RoundRibbonRule:轮询策略
WeightedResponseTimeRule:默认会采用轮询的策略,后续会根据服务的响应时间,自动给你分配权重
BestAvailableRule:根据被调用方并发数最小的去分配
Feign
Feign可以帮助我们实现面向接口编程,就直接调用其他的服务,简化开发。
Feign也可以通过Fallback或FallBackFactory的降级,来解决在使用Feign去调用另外一个服务出现问题而导致的全部失效
注意事项
如果你传递的参数,比较复杂时,默认会采用POST的请求方式。
传递单个参数时,推荐使用@PathVariable,如果传递的单个参数比较多,这里也可以采用@RequestParam,不要省略value属性
传递对象信息时,统一采用json的方式,添加@RequestBody
Client接口必须采用@RequestMapping
Hystrix
Hystrix解决一个点宕机或停掉,导致服务的雪崩
服务降级
当某一个服务出现超时、资源不足、出现异常时,可执行一个降级方法,返回托底数据
通过降级快速失败,返回托底数据,避免用户的长时间等待
线程隔离
提供一个Hystrix线程池,信号量(管理tomact线程)和tomact线程池相互隔离
问题
如果使用Tomcat的线程池去接收用户的请求,使用当前线程去执行其他服务的功能,如果某一个服务出现了故障,导致tomcat的线程大量的堆积,导致Tomcat无法处理其他业务功能。
解决
Hystrix的线程池(默认),接收用户请求采用tomcat的线程池,执行业务代码,调用其他服务时,采用Hystrix的线程池。
信号量,使用的还是Tomcat的线程池,帮助我们去管理Tomcat的线程池。
熔断机制
当某一个服务的失败率达到一定的阈值时,自动触发降级
在调用指定服务时,如果说这个服务的失败率达到你输入的一个阈值,将断路器从closed状态,转变为open状态,指定服务时无法被访问的,如果你访问就直接走fallback方法,在一定的时间内,open状态会再次转变为half open状态,允许一个请求发送到我的指定服务,如果成功,转变为closed,如果失败,服务再次转变为open状态,会再次循环到half open,直到断路器回到一个closed状态。
注意事项
默认值:10秒钟内20个请求,错误率达到50%
Open状态打开直接返回托底数据
一定时间内(默认5秒钟)变成半开状态
缓存
请求缓存的功能
Zuul
介绍
客户端维护大量的ip和port信息,直接访问指定服务
认证和授权操作,需要在每一个模块中都添加认证和授权的操作
项目的迭代,服务要拆分,服务要合并,需要客户端进行大量的变化
统一的把安全性校验都放在Zuul中
Zuul是所有请求到达后台服务的统一入口
在不改变源码的情况下,动态修改客户端请求路由到服务的规则
忽略服务
基于服务名忽略服务,无法查看
自定义服务配置
自定义服务路径名
灰度发布
以平滑的方式将项目版本从旧版本过度到新版本
过滤器
PreFilter实现token校验
Zuul过滤器链的执行流程
客户端请求发送到Zuul服务上,首先通过PreFilter链,如果正常放行,会把请求再次转发给RoutingFilter,请求转发到一个指定的服务,在指定的服务响应一个结果之后,再次走一个PostFilter的过滤器链,最终再将响应信息交给客户端。
降级
只有超时才会触发zuul的降级
注意:因为Spring默认处理了异常结果,而返回了一个友好的页面,所以到了zuul组件这里,它不认为你是一个异常结果
动态路由
在不重启Zuul服务的情况下动态指定路由规则
Sidecar
在SpringCloud的项目中,需要接入一些非Java的程序,第三方接口,无法接入eureka,hystrix,feign等等组件。启动一个代理的微服务,代理微服务去和非Java的程序或第三方接口交流,通过代理的微服务去计入SpringCloud的相关组件。(Sidecar必须与第三方接口是同一个Host,简单来说就是在同一台计算机内,IP是相同的)
Stream
消息队列驱动
支持RabbitMQ和Kafka
Config
管理配置文件
Sleuth
提供服务的链路追踪和性能分析
0 条评论
下一页