SpringCloud使用笔记

Eureka

在这里插入图片描述

在这里插入图片描述

Register服务注册

  • Eureka Client在第一次心跳时间向Eureka Server注册
  • 注册时会提供诸多自身元数据:主机名、端口、健康指标URL等

Renew服务续约

  • Eureka Client通过发送心跳进行续约
  • 默认每30秒发送一次心跳
  • 如90秒内Eureka Server未收到续约,则提出该服务

Cancel服务下线

  • Eureka Client优雅退出时发送cancel命令
  • Eureka Server收到cancel命令时会删除该节点

获取注册表信息

  • Eureka Client会缓存由Server获取的注册表信息

  • Eureka Client会定期更新注册表信息,默认30秒

  • Eureka Client会处理注册表合并等内容

Eureka与Zookeeper

  • 分布式基础:CAP理论

    • 一致性:Consistency
    • 可用性:Availability
    • 分区容错性:Partition tolerance
  • Eureka主要保证AP

  • Zookeeper是典型的CP

Eureka注册慢问题

  • 注册慢的根本原因在于Eureka的AP特性
  • Eureka Client延迟注册,默认30秒
  • Eureka Server的响应缓存,默认30秒
  • Eureka Server的缓存刷新,默认30秒

Eureka的自我保护

  • Eureka Server会自动更新续约更新阈值
  • Eureka Server续约更新频率低于阈值时进入保护模式
  • 自我保护模式下Eureka Serve不会剔除任何注册信息

Ribbon

在这里插入图片描述

  • Ribbon客户端负载均衡器
  • Ribbon核心功能
    • 服务发现
    • 服务选择规则
    • 服务监听

哪些内容能被负载均衡:ServerList

怎么负载均衡:负载均衡算法

IPing:探测服务存活状态

Ribbon与Eureka整合

  • Ribbon天然与Eureka无缝整合
  • 通过@LoadBalanced提供负载均衡支持
  • 通过ribbon.eureka.enabled=false禁用Eureka

Ribbon核心之IRule

  • IRule通过特性算法选取要访问的服务

  • IRule常用BestAvallableRule和WeightedResponseTimeRule

IRule算法算法描述
RoundRobinRule轮询规则
RandomRule随机规则
AvailabilityFilteringRule可用过滤规则
WeightedResponseTimeRule根据平均响应时间计算所有服务的权重
RetryRule遵循RoundRobin规则处理,但是会对失败的服务进行重试
BestAvailableRule结合了可用过滤规则和响应时长规则
ZoneAvoidanceRule复合判断server所在区域性能和可用性选择服务器

Ribbon自定义规则

Ribbon核心之IPing

  • IPing是Ribbon保证服务可用的基石
  • 常见实现:NIWSDiscoveryPing、PingUrl
IPing算法算法描述
NIWSDiscoveryPing不执行Ping操作,根据Eureka Client的反馈判断存活
PingUrl使用HttpClient对服务进行Ping操作
DummyPing默认返回true
NoOpPing永远返回true
@Configuration
public class RestConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    
    @Bean
    public IRule iRule(){
        return new RoundRobinRule();
//        return new MyRule();
    }
    
    @Bean
    public IPing iPing(){
//        return new PingUrl(false,"/abc");
        return new NIWSDiscoveryPing();
    }

}

Ribbon参数配置

  • 默认参数配置:DefaultClientConfigImpl

  • Ribbon Key定义:CommonClientConfigKey

  • Ribbon参数分为全局配置和指定客户端配置

  • 参数格式:.ribbon.=

    ribbon:
    	MaxAutoRetuies:3
    hello-service-provider:
    	ribbon:
    		MaxAutoRetries:3
    

Ribbon核心之ServerList

  • ServerList是Ribbon存储的可用服务列表
  • ServerList可以手动设置
  • ServerList常见应用是从Eureka中自动获取

Hystrix

执行流程:

  1. 调用“main”方法,command、abservable command
  2. 判断有没有缓存
  3. 熔断有没有开启
  4. 限流有没有触发
  5. 业务执行有没有失败
  6. 业务执行有没有超时
  7. 所有的失败都会触发fallback
  8. 业务直接返回

在这里插入图片描述

  • Hystrix是用于处理延迟和容错的开源库

  • Hystrix主要用户避免级联故障,提高系统弹性

  • Hystrix解决了由于扇出导致的"雪崩效应"

  • Hystrix核心是“隔离术“和熔断机制

扇出&雪崩

在这里插入图片描述

在这里插入图片描述

Hystrix主要作用

  • 服务隔离和服务熔断
  • 服务降级、限流和快速失败
  • 请求合并和请求缓存
  • 自带单体和集群监控

Feign

  • Feign是一个非常好用的HTTP客户端
  • Feign很大程度上简化了HTTP调用方式
  • Feign很好的弥补了SpringCloud的HTTP调用缺陷

Feign的特性

  • Feign实现了可插拔注解支持,包括Feign和JAX-RS注解
  • Feign支持可插拔的HTTP编码器和解码器
  • Feign支持HTTP请求和响应的压缩
import feign.Param;
import feign.RequestLine;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

@FeignClient(name = "hello-service-provider",
        primary = true,
        path = "/provider",
        fallbackFactory = FallbackFactory.class
//        fallback = ProviderFallbackAPIImpl.class
//        configuration = FeignHelloConf.class,
//        url = "http://localhost:7101"
 )
public interface ProviderApi {

    @RequestMapping(value = "/sayhello",method = RequestMethod.GET)
    String invokerProviderController(@RequestParam("message") String message);

//    @RequestLine("GET /sayhello?message={message}")
//    String invokerProviderController(@Param("message") String message);

//    @RequestMapping(value = "/{providerId}/sayhello",method = RequestMethod.POST)
//    String providerPost(
//            @RequestHeader("author") String author,
//            @PathVariable("providerId")String providerId,
//            @RequestBody UserModel userModel);

}

Feign基础参数

  • name和value
  • url:手动指定Http调用地址
  • Path:接口统一前缀
  • primary:多实现制定优先级
  • configuration:自定义Feign配置
  • FallbackheFallbackfactory:降级统一处理

Feign的配置

配置类型默认配置
feignDecoderResponseEntityDecoder
feignEncoderSpringEncoder
feignLoggerSlf4jLogger
feignContractSpringMvcContract
feignBuilderHystrixFeign.Builder
feignClientLoadBalancerFeignClient/feignClient

Feign多组件集成

  • Feign可以集成Ribbon实现负载均衡

    在这里插入图片描述

  • Feign可以集成Hystrix实现命令封装

  • Feign可以集成Hystrix实现业务降级

Gateway

在这里插入图片描述

  • SpringCloud Gateway是Spring官方提供的API网关

  • Gateway是基于Spring5和SpringBoot2开发的

  • Gateway是基于Netty开发的异步调用网关

Gateway特性

  • 提供路由和限流等措施
  • 易于编写的Predicate和Filter,提供了良好的扩展性
  • 提供了Discovery和Hystrix集成

Predicate使用

  • Predicate是路由匹配规则,满足条件即可触发路由
  • Predicate可以进行自定义,满足个性化要求
  • SpringCloud Gateway预置了许多Predicate
类型作用入参
After在该日期之后发生的请求都讲被匹配日期时间
Before在该日期之前发生的请求都讲被匹配日期时间
BetweenDateTime1和DateTime2日期时间,日期时间
Cookie请求包含次cookie名称且正则表达式为真的将会被匹配cookie名称和正则表达式
Header请求包含次header名称且正则表达式为真的将会被匹配header名称和正则表达式
Host使用Ant路径匹配规则,“.“作为分隔符host name列表
Method需要匹配的HTTP请求方式HTTP Method字符串
Path判断请求路径是否满足要求Path表达式和可选标识

Filter使用

  • Filter可以对Request进行请求过滤处理
  • Gateway的Filter分为全局和局部两种
  • Filter除了过滤还可以对请求内容进行增强处理

全局Filter

类型作用
LoadBalancerClientFilter负载均衡过滤器
Netty Routing Filter默认使用netty的底层
RouteToRequestUrlFilter新的请求路由
Websocket Routing Filterwebsocket路由
Gateway Metrics Filter路由监控,配合spring-boot-ostarter-actuator

局部Filter

类型作用
AddRequestHeader添加请求header
AddRequestParameter添加请求参数
AddResponseHeader添加响应header
DedupeResponseHeader响应头去重
Hystrix GatewayFilters断路器的开关
PrefixPath路径匹配
PreserveHostHeader发送原始host
RequestRateLimiter限流
RedirectTo重定向
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值