springcloud
2021-01-27 17:14:10 40 举报
AI智能生成
springcloud的重要技术栈
作者其他创作
大纲/内容
ribbon
什么是ribbon
什么是客户端负载均衡?
ribbon
什么是服务器端的负载均衡?
ng和h5
如何使用
@LoadBalanced+RestTemplate
原理
LoadBalancerInterceptor拦截器
LoadBalancerClient 负载均衡客户端
ILoadBalancer 负责均衡器
负载均衡算法 IRule
有哪些负载均衡算法
RandomRule
随机算法
RoundRobinRule
轮训算法
RetryRule
重新算法
BestAvailableRule
选择一个最小的并发请求的Server,逐个考察Server,如果Server被tripped了,则跳过。
AvailabilityFilteringRule
过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个Server的运行状态
WeightedResponseTimeRule
加权响应时间负载均衡
ZoneAvoidanceRule
区域感知轮询负载均衡
如何修改的负载均衡算法
全局配置
@Bean
public IRule rule(){
return new RandomRule();
}
局部配置
如何自定义负载均衡算法
集成AbstractLoadBalancerRule
重新choose方法
feign
什么是feign
生命式的http客户端
如何使用
依赖
增加接口
增加注解
如何自定义
设置日志级别
NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。
HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间。
FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据。
如何使用日志级别
在代码中
yml配置
如何使用feign注解代替springmvc的注解
在代码中
yml配置
创建拦截器统一设置参数 RequestInterceptor
实现接口
重写方法
实现原理
动态代理
feignclient
FeignClientFactoryBean代理类
FeignInvocationHandler 动态代理实现类
SynchronousMethodHandler 方法处理类
LoadBalancerFeignClient 负载均衡客户端
Ribbon负载聚恒
hystrix
微服务
服务扇出
服务雪崩
服务熔断(条件)
服务降级(手段)
什么是hystrix
服务限流
服务熔断
服务降级
超时监控
请求合并
线程隔离
采用舱壁模式
Ribbon如何使用
依赖
增加注解
增加配置
Feign如何使用
常用配置
依赖
增加配置
增加注解
禁用Hystrix对feign的支持
全局禁用
单个禁用
编写一个Feign.Builder
在feignClient增加配置
如何关闭熔断
全局关闭
局部关闭
如何设置超时
全局设置
局部设置
如何关闭超时
全局关闭
局部关闭
熔断原理
Closed:关闭状态,所有请求都是正常访问
Open:打开状态,所有请求都是降级
Half-Open:半开状态,在open之后5秒后允许一个请求过去
隔离策略
线程隔离
通过线程池策略来接收请求,会消耗一定的线程,自行斟酌,不要把核心线程数列队等设置太大
线程池预估建议
Thread Size=每秒请求QPS*每个请求预计耗时s+预留空间breathing room;比如:QPS等于30,预计0.2秒也就是200毫秒一个请求,预留空间比如说4个线程,那么Size=30*0.2+4=10,得出线程数为10;队列大小设置5~10差不多
信号量
使用的是Semaphore信号量隔离,本质是计数器,不会消耗大量线程
feign、ribbon、hystrix关系
关系图
feign超时
ribbon超时
hystrix超时
结论
在Spring Cloud中使用Feign进行微服务调用分为两层:Hystrix的调用和Ribbon的调用,Feign自身的配置会被覆盖。
Ribbon和Hystrix的超时时间配置的关系具体是什么
Hystrix的超时时间=Ribbon的重试次数(包含首次) * (ribbon.ReadTimeout + ribbon.ConnectTimeout)
Ribbon的重试次数
Ribbon重试次数(包含首次)= 1 + ribbon.MaxAutoRetries + ribbon.MaxAutoRetriesNextServer + (ribbon.MaxAutoRetries * ribbon.MaxAutoRetriesNextServer)
zuul
什么是路由网关
身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求
审查与监控:在边缘位置追踪有意义的数据和统计结果,从而为我们带来精确的生产视图;
动态路由:动态地将请求路由到不同的后端集群;
为什么使用路由网关
没有使用路由网关
缺点
客户端会多次请求不同的微服务,增加了客户端的复杂性。
存在跨域请求,在一定场景下处理相对复杂
认证复杂,每个服务都需要独立认
使用路由网关
优点
易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析
易于认证。可在微服务网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证
减少了客户端与各个微服务之间的交互次数
快速上手
maven依赖
增加配置
增加注解
@EnableZuulProxy
核心配置
通过服务名称配置路由
同时指定微服务的serviceId和对应路径
通过配置path和URL
统一设置前缀路径
忽略一些特殊的访问路径
设置敏感头
核心过滤器
zuul的过滤器类型和生命周期
Pre
ServletDetectionFilter -5
Servlet30WrapperFilter -3
FormBodyWrapperFilter -1
PreDecorationFilter 5
routing
RibbonRoutingFilter 10
SimpleHostRoutingFilter:它的执行顺序为100
SendForwardFilter:它的执行顺序为500,是route阶段第三个执行的过滤器
post
LocationRewriteFilter 900
SendResponseFilter 1000
error
SendErrorFilter 0
执行顺序
先执行pre>routing>post 然后再在同类型的过滤器按照order大小执行,越小的越先被执行
如何自定义过滤器
自定义filter
配置fitler
如何禁用过滤器
zuul.<SimpleClassName>.<filterType>.disable=true
降级回退机制
实现FallbackProvider
宕机回退
超时回退
下游服务如果是400.或者500不会回退
设置跨域
zuul的全局异常处理
继承SendErrorFilter
关闭禁用系统默认的SendErrorFilter
Docker
架构
宿主机
Docker daemon守护线程
client客户端
image镜像
container容器
仓库
常用命令
镜像
docker search 查找
docker pull 下载镜像
docker images 查看镜像
docker rmi 删除镜像
容器
docker run -d -p 91:80 nginx 启动容器
docker ps 列出容器
docker stop 停止容器
docker kill 强制停止
docker start 启动已停止的容器
docker inspect查看容器所有信息
docker exec -it f0b1c8ab3633 /bin/bash进入容器
docker rm删除容器
Dockerfile
构建新的镜像步骤
1. 编写 Dockerfile 文件
2. 通过 docker build 命令生成新的镜像
3. 通过 docker run 命令运行
构建springboot项目
docker compose
1定义每个引用Dockfile
2编写docker-compose.yml
3docker-compose up
config
配置中心类型
git
svn
本地
刷新机制
重启服务刷新
手动刷新
spring-boot-starter-actuator
/refresh
自动刷新
springcloud bus
@RefreshScope
mq
hook
/bus/refresh?destination=customers:9000
自动刷新原理
基于mq的消息订阅
0 条评论
下一页