SpringCloud
springboot与springcloud
springcloud是一系列框架的集合
springcloud将不同的框架整合,再用springboot进项简化开发
springboot是用来快速开发spring项目的
springcloud与dubbo对比
1,springCloud和dubbo都是实现微服务的有效工具
2,dubbo只是实现服务治理,springcloud子项目分别覆盖微服务架构下的各个组件,而服务治理只是其中的一个方面
3,dubbo是基于RPC通讯协议(位于传输层,基于TCP协议,速度快,安全),springcloud是使用restful风格(位于应用层,基于HTTP协议,跨语言) dubbo速度高于spring cloud ,springcloud功能更加丰富
springcloud的核心组件
1 ,服务中心 Netflix eureka
2,客户端负载均衡工具 Netflix ribbon
3,断路器 Netflix hystrix
4,服务网关 springcloud gateway
5,分布式服务 springcloud config
Eureka 是Netflix公司公源的一个服务注册与发现的组件
eureka和其他Netflix公司的服务组件一起被springcloud设置整合为spring-Cloud-Netflix模块
eureka包含两个组件 eurekaServer(注册中心)和eurekaClient(服务提供者和服务消费者) 不过eureka目前已经停止更新
eureka的自动保护机制是什么
eureka服务器上注册了很多个微服务,如果一个微服务死机按理说eureka服务器应该把死机的这个服务器剔除,但是eureka的启动自动保护机制后,会保留这个服务。
自我保护机制是放在服务器假死或者因为网络波动照成的暂时链接失败,宁可保留也不剔除
ribbon是一个基于HTTP和TCP的客户端负载均衡工具。
ribbon的两大功能 1 简化远程调用 通过服务名称找到服务,进行自动url拼接 2,客户端负载均衡 -创建代理对象
ribbon负载均衡的策略 (7种)
1 随机 RandomRule
2 轮询 RoundRobinRule 【默认】
3 最小并发(访问最闲的,由Eureka判断):BestAvaliableRule
4 响应时间 (发一个包,判断响应快慢):WeightedResponseTimeRule
5 轮询重试 (再加一轮轮询):RetryRule
6 过滤 (过滤掉并发太高,或者坏掉的):AvailabilityFilteringRule
7、 性能可用性 (综合判断性能):ZoneAvoidanceRule
fegin
fegin是一个声明式的rest客户端,它用于 基于接口 的注解方式,很方便开发
fegin是对ribbon的封装,也可以做负载均衡,本质作用还是用来实现远程服务调用 使用fegin远程调用,不用再去拼接url fegin底层是基于HTTP协议
fegin和dubbo的区别
都依赖注册中心,负载均衡
Dubbo:
支持多传输协议(Dubbo、Rmi、http、redis等等),可以根据业务场景选择最佳的方式。rpc 远程调用 ,非常灵活。
默认的Dubbo协议:利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。
fegin:
基于Http传输协议,短连接,不适合高并发的访问。
hystrix的作用
主要用于出现级联失败 (也就是雪崩) 也就是一个失败而导致的一连串的失败
hystrix 是再微服务的外面进行保护,主要用的功能有 隔离、降级、熔断、限流
隔离 :线程池隔离(操作线程)总线程池针对一个服务,分配一定的线程数量,防止一个服务失败占用全部的线程
信号量隔离(操作变量) 针对不同的服务线程阈值,打到阈值不在给服务分配线程,防止一个服务占用全部的线程
降级 :服务失败后,调用一个降级方案,并返回降级的数据,调用方接收到降级的服务后也调用相对应的降级方法(调用方和被调用方都要配置降级方案)
熔断 : 如果服务一直失败,调用方会进行熔断,拒绝所有的调用失败服务的请求,等失败的服务恢复后,调用方会自动连接上服务
限流 : 限制请求访问频率,每次固定数量
说说Hystrix的降级机制?
作用:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
方式:
——快速失败:
表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
——安全失败:
表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。
使用Hystrix的降级机制时,如果出现超时或异常,Hystrix一定会降级吗?
不一定。Hystrix在外部接收所有请求,fegin只是内部微服务调用。
如果是在与浏览器之间的请求发生异常或超时,就会直接被Hystrix降级,显示的是Hystrix的降级消息;
如果是对外连接成功,在内部进行微服务的调用时,发生异常或超时,会被fegin(底层Ribbo)降级,显示的是fegin的降级消息。
hystrix的熔断机制
hystrix的熔断机制,是用于监控微服务的情况,当是失败请求次数打到阈值时(默认5秒20次)hystrix会自动打开断路器,拒绝所有的请求,无论是否降级。当断路器开启时间默认达到5秒时,断路器会进去半开状态,当成功的请求打到阈值时,说明请求已经恢复正常,断路器会自动关闭,否则会继续维持打开状态。
说说Gateway网关?
网关本质上就是一个服务器,封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,如:认证、鉴权、监控、缓存、负载均衡、流量管控、路由转发等。
解决以下问题:
客户端多次请求不同的微服务,增加客户端的复杂性
认证复杂,每个服务都要进行认证
http请求不同服务次数增加,性能不高:每个请求都要三次握手,四次挥手。
Gateway有哪些重点路由配置?
路由(routes)最重要的三个配置就是:id、uri、predicates (/'predɪkət/)
Id:唯一标识。默认是一个UUID;
Uri:转发路径
Predicates:条件,用于请求网关的匹配规则(比如:Path=/goods/**)
Gateway有几种过滤器?
两种:
局部过滤器:针对单个路由;
全局过滤器:针对所有路由。