文章目录
SpringCloud
Springcloud模块(学完得能说出来)
谨记:在以后学习的道路中,版本之间的配合极为重要。
Springcloud的技术迭代
服务注册中心
服务治理
SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。
在传统的RPC框架中,管理每个服务与服务之间依赖关系比较复杂,所以需要使用服务治理,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
Eureka
Eureka组件分为 server 和 client 两部分。
server端即注册中心,client端即生产者和消费者。先引入pom.xml,修改application.yml,然后在启动类上分别配置@EnableEurekaClient和@EnableEurekaServer。
Eureka通过key:服务名 和 value:远程访问地址,实现调用。底层使用HttpClient进行访问。
Eureka集群采取相互注册,相互守望的方式进行部署,避免单机故障,提供负载均衡和容错性。
集群健康检查,例如:http://localhost:8001/actuator/health。
CAP理论:C(数据一致性)、A(可用性)、P(分区容错性),而Eureka的自我保护机制采取的是AP。
三个注册中心异同点
三个注册中心:Eureka,zookeeper,consul
服务调用
Ribbon
Ribbon是负责本地负载均衡服务调用的组件,相较于Nginx,一个是集中式,一个是进程内。概括来讲,采用 RestTemplate+负载均衡 实现调用。
OpenFeign
面向接口编程,比如webservice接口.
-
微服务名称获得调用地址
-
通过接口+注解,获得调用服务
统一面向接口的编程套路—feign。
前面再使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成一套模板化的调用方法,但是在实际的开发中,由于对服务依赖的调用可能不止一处,往往一个接会被多处调用,所以通常会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了一些封装,由他来帮助我么定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对位服务提供方便的接口绑定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。
Feign集成了Ribbon
利用Ribbon维护了STUDY-SPRINGCLOUD-DEPT的服务列表,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅的而简单的实现了服务调用。
服务降级
**Hystrix:**Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整个服务失败,避免级联故障,以提高分布式系统的弹性。
“断路器”本身是一种开关设置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的,可处理的备选响应(FallBack),而不是长时间的等待或者抛出服务方无法处理的异常,这样就保证服务方调用线程不会被长时间、不必要的占用,从而避免故障再分布式系统中的绵延,乃至雪崩。
**服务雪崩:**多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的服务,这就是所谓的扇出。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的雪崩效应。
-
服务降级
给出一个友好提示。以下情况会导致服务降级
- 程序运行异常
- 超时
- 服务熔断出发服务降级
- 线程池/信号量打满也会导致服务降级
-
服务熔断
应对雪崩效应的一种微服务链路保护机制,快速返回错误的响应信息。直接拒绝访问,然后调用服务降级。
-
服务限流
-
接近实时的监控
服务网关
- Zuul
- Zuul2
- gateway
Gateway
三大核心概念:
- Route(路由)
- Predicate(断言)
- Filter(过滤)
功能:
- 反向代理
- 鉴权
- 流量控制
- 熔断
- 日志监控
核心逻辑:路由转发 + 执行过滤器链。
服务配置
-
Config:分布式配置中心,一处修改,处处修改。
-
Nacos