SpringCloud详解原理分析
目录
一、微服务优缺点
1.优点
2.缺点
3.微服务技术栈有哪些
二、Spring Cloud
1、核心组件
2、SpringCloud 和 SpringBoot 关系
3、Dubbo 和 SpringCloud 区别
4、运行原理流程图
5、Eureka 服务注册与发现
5-1.什么是Eureka
5-2.原理
5-3.三大角色
5-4.Eureka 和 Zookeeper 好在哪里
5-5. nacos 和 eureka 区别
6、Ribbon
6-1.负载均衡及 Ribbon
6-2.ribbon能干嘛
6-3.负载均衡简单分类:
7、Feign 负载均衡
7-1.Feign能干什么
7-2.Feign集成了Ribbon
8、Hystrix
8-1.什么是Hystrix
8-2.服务雪崩
8-3.Hystrix能干啥
8-4.Hystrix熔断机制
8-5.服务降级
什么是服务降级
服务降级需要考虑的问题
自动降级分类
服务熔断 和 服务降级 的区别
熔断,降级,限流:
8-6、Dashboard 流监控
8-7、Zuul路由网关
Zuul包含了对请求的路由和过滤两个最主要的功能 :
Zuul能干啥
一、微服务优缺点
1.优点
- 每个服务足够内聚,足够小,代码容易理解,这样能聚焦一个指定的业务功能或业务需求;
- 开发简单,开发效率提高,一个服务可能就是专一的只干一件事
- 微服务能够被小团队单独开发
- 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的
- 微服务能使用不同的语言开发
- 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如jenkins,Hudson,bamboo
- 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值
- 微服务允许你利用融合最新技术
- 微服务只是业务逻辑的代码,不会和HTML,CSS或其他界面混合
- 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库
2.缺点
- 开发人员要处理分布式系统的复杂性
- 多服务运维难度,随着服务的增加,运维的压力也在增加
- 系统部署依赖
- 服务间通信成本
- 数据一致性
- 系统集成测试
- 性能监控
3.微服务技术栈有哪些
- 服务开发 SpringBoot,Spring,SpringMvc
- 服务配置与管理 Netfix公司的Archaius、阿里的Diamond等
- 服务注册与发现 Eureka、Consul、Zookeeper等
- 服务调用 Rest、RPC、gRPC
- 服务熔断器 Hystrix、Envoydeng
- 负载均衡 Ribbon、Nginx等
- 服务接口调用(客户端调用服务的简化工具) Feign等
- 消息队列 Kafka、RabbitMQ、ActiveMQ等
- 服务配置中心管理 SpringCloudConfig、Chef等
- 服务路由(API网关) Zuul等
- 服务监控 Zabbix、Nagios、Metrics、Specatator等
- 全链路追踪 Zipkin、Brave、Dapper等
- 服务部署 Docker、OpenStack、Kubernetes等
- 数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit,Kafka等发送接受消息)
- 时间消息总线 SpringCloud Bus
二、Spring Cloud
1、核心组件
- Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里
- Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
- Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
- Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
- Zuul:如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务
2、SpringCloud 和 SpringBoot 关系
- SpringBoot专注于快速方便的开发单个个体微服务。 --jar
- SpringCloud是关注全局的微服务协调整理治理框架,它将springboot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置发现,服务发现,路由,微代理,时间总线。全局锁,决策竞选,分布式会话等等集成服务
- SpringBoot可以离开SpringCloud单独使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系
- SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架
3、Dubbo 和 SpringCloud 区别
功能 | Dubbo | SpringCloud |
服务注册中心 | Zookeeper | Eureka(主流)、Consul、zookeeper |
服务调用方式(重点) | RPC基于Dubbo协议 | REST API 基于Http协议 |
服务监控 | Dubbo-Monitor | Spring Boot Admin |
熔断器 | 不完善 | Spring Cloud Netflix Hystrix |
服务网关 | 无 | Spring Cloud Netflix Zuul、Gateway |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth+Zipkin(一般) |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
信息总线 | 无 | Spring Cloud Bus |
4、运行原理流程图
5、Eureka 服务注册与发现
5-1.什么是Eureka
- Netflix 在设计Eureka时,遵循的就是AP原则
- Eureka 是Netflix 的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper
5-2.原理
- Eureka的基本架构
- SpringCloud封装了NetFilx公司开发的Eureka模块来实现服务注册和发现(对比Dubbo中用的Zookeeper)
- Euraka采用了C-S的架构设计,EurekaServer 作为服务注册功能的服务器,他是服务注册中心
- 而系统中的其他微服务,使用Eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员就可以通过EurekaServer 来监控系统中各个微服务是否正常运行,SpringCloud的一些其他模块(比如Zuul)就可以通过EurekaServer来发现其他微服务,并执行相关的逻辑。
- Eureka包含两个组件:Eureka Server、Eureka Client
- Eureka Server :提供服务注册,各个节点启动后,会在EurekaServer中进行注册,这样Eureka Server 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到
- Eureka Client :是一个java客户端,用于简化EurekaServer的交互,客户端同时也具备一个内置的,使用轮循负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳(默认周期为30秒)。如果EurekaServer在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除掉(默认周期为90秒)
5-3.三大角色
- EurekaServer:提供服务的注册与发现 (zookeeper)
- Service Provider :将自身服务注册到Eureka中,从而使消费者方能够找到
- Service Consumer:服务消费方从Eureka中获取注册服务列表,从而找到消费服务
5-4.Eureka 和 Zookeeper 好在哪里
- 当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接收服务直接down掉不可用,也就是说,服务注册功能对可用性的要求要高于一致性。
- Zookeeper保证的是CP,降低了可用性,满足一致性,通常性能不是特别高
- Eureka保证的是AP,满足可用性,通常对一致性要求低一些。
- 因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪
开启功能
@EnableDiscoveryClient //服务发现
5-5. nacos 和 eureka 区别
1.nacos和eureka都是注册中心,都具有各自的负载均衡策略,eureka分为Eureka Server(Eureka服务)和Eureka Client(Eureka客户端),所有Eureka Server 通过Replicate进行数据同步。无论Eureka Client向哪个Eureka Server中注册信息,最终所有Eureka Server中都会存储注册的信息,这些信息都缓存到Eureka Server的本地。
2.nacos和eureka的范围不同,Nacos的阈值是针对某 个具体Service的,而不是针对所有服务的;但Eureka的 自我保护阈值是针对所有服务的nacos支 持CP和AP两种;eureka只支持P。nacos使用netty,是长连接;eureka是短连接,定时发送
6、Ribbon
6-1.负载均衡及 Ribbon
- SpringCloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具
- 简单的来说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将NetFlix的中间层服务连接在一起,Ribbon的客户端组件提供一系列完整的配置项如:连接超时、重试等等。简单的说,就是在配置文件中列出LoadBalancer(简称LB:负载均衡)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等等)去连接这些机器。我们也很容易使用Ribbon 实现自定义的负载均衡算法
6-2.ribbon能干嘛
- LB,即负载均衡,在微服务或分布式集群中经常用的一种应用
- 负载均衡简单地说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)
- 常见的负载均衡软件有Nginx,Lvs等等
- dubbo、SpringCloud 中均给我们提供了负载均衡,Springcloud的负载均衡算法可以自定义
6-3.负载均衡简单分类:
- 集中式LB:即在服务的消费方和提供方之间使用独立的LB设施,如Nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方
- 进程式LB:将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器。Ribbon就属于进程内LB ,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址
Ribbon 功能开启
@EnableEurekaClient
@SpringBootApplication
导入依赖
<!-- ribbon --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId><version>1.4.7.RELEASE</version></dependency>
<!-- eureka--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.7.RELEASE</version></dependency>
写配置
server:port: 80#Eureka配置
eureka:client:register-with-eureka: false #不向eureka注册自己(消费者不需要注册)service-url:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
7、Feign 负载均衡
feign是声明式的web service 客户端,它让微服务之间的调用变得更简单了,类似controller调用service。SpringCloud 集成了Ribbon 和 Eureka ,可在使用Feign 时提供负载均衡的http客户端
只需要创建一个接口,然后添加注解即可。
7-1.Feign能干什么
- Feign旨在使编写java http客户端变得更加容易
- 在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(类似于以前Dao接口上标注mapper注解,现在是一个微服务接口上面标注一个Feign注解即可)即可完成对服务提供方的接口绑定,简化了使用springcloud ribbon 时,自动封装服务调用客户端的开发量
首先,如果你对某个接口定义了
@FeignClient
注解,Feign就会针对这个接口创建一个动态代理接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心
Feign的动态代理会根据你在接口上的
@RequestMapping
等注解,来动态构造出你要请求的服务的地址,然后构建请求,构造参数,发送请求,接受请求,解析返回值等
7-2.Feign集成了Ribbon
- 利用Ribbon维护MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的 是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而且简单的实现了服务调用。
7-3.Feign 使用步骤
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")
在api中写 Feign 服务接口 DeptClientService.java
package com.qian.springcloud.service;import com.qian.springcloud.pojo.Dept;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;import java.util.List;@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")
public interface DeptClientService {@GetMapping("/dept/get/{id}")public Dept queryById(@PathVariable("id") Long id);@GetMapping("/dept/list")public List<Dept> queryAll();@PostMapping("/dept/add")public Boolean addDept(Dept dept);}
消费者调用 Feign 接口 DeptConsumerController.java
package com.qian.springcloud.controller;import com.qian.springcloud.pojo.Dept;
import com.qian.springcloud.service.DeptClientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.List;@RestController
public class DeptConsumerController {//消费者~ 不应该有service层,那么需要拿到service怎么办?//RestTemplate 有很多方法供我们直接调用!但是要先注入到spring中--->ConfigBean中管理Bean//(url,实体:map,Class<T> responseType)@Autowiredprivate RestTemplate restTemplate;//提供多种便捷访问远程http服务的方法,简单的restful服务模板@Autowiredprivate DeptClientService deptClientService = null;@RequestMapping("/consumer/dept/get/{id}")public Dept get(@PathVariable("id")Long id){return this.deptClientService.queryById(id);}@RequestMapping("/consumer/dept/add")public boolean addDept(Dept dept){return this.deptClientService.addDept(dept);}@RequestMapping("/consumer/dept/list")public List<Dept>list(){return this.deptClientService.queryAll();}//三个参数分别是: url ,携带的参数 , 返回类型}
启动类配置
@EnableRyFeignClients
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = KuangRule.class)
8、Hystrix
8-1.什么是Hystrix
- Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性
- “熔断器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方法返回一个服务预期的,可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方法无法处理的异常,这样就可以保证了服务调用方的线程不会被长时间、不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
- 分布式面临的问题
- 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免失败!
8-2.服务雪崩
- 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”,如果扇出的链路上某个微服务的调用响应时间过长,或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。
- 对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几十秒内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障,这些都表示需要对故障和延迟进行隔离和管理,以达到单个依赖关系的失败而不影响整个应用程序或系统运行。
8-3.Hystrix能干啥
- 服务降级
- 服务熔断
- 服务限流
- 接近实时的监控
8-4.Hystrix熔断机制
什么是hystrix的熔断?
hystrix熔断主要是指在一定的时间窗口内,当请求的次数达到一定的失败比率后,hystrix就会主动拒绝服务,采取将请求直接降级等方式,从而有效的缓解了服务雪崩的问题,通过快速错误的方式,有效的控制服务之间链路调用的响应时间,保证整个微服务的健康。
使用hystrix熔断功能的配置
开启hystrix熔断并配置hystrix的超时时间,需要注意ribbon的超时配置的影响,具体可以参考hystrix请求超时配置文章中的示例。
//超时时间
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000
//开启熔断
hystrix.command.default.execution.timeout.enabled=true
//熔断触发的最小个数,即在一定的时间窗口内请求达到一定的次数,默认20
hystrix.command.default.circuitBreaker.requestVolumeThreshold=10
//时间窗口,默认10s
hystrix.command.default.metrics.rollingStats.timeInMilliseconds=5000
//失败率达到多少百分比后熔断 默认值:50
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50
//熔断多长时间后,尝试放一次请求进来,默认5秒
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000
以上配置表示,5秒内,如果请求次数达到10次,且50%都失败了,则开启熔断功能,并在熔断功能开启5秒后,允许一次请求(即此时熔断为半开状态),如果请求访问成功则关闭熔断,恢复正常调用,否则继续熔断5秒,以此循环。
断路器的三个状态:
1、关闭状态
关闭状态时客户端的请求是可以正常到达的。
2、开启状态
开启状态时客户端的请求是不会到达服务端,直接走降级方法。
3、半开状态
当状态为开启时,一定时间后,熔断器就会由开启状态变成半开状态。
这时候是可以接收客户端的一次请求,如果请求成功则熔断器状态变为关闭,如果请求失败则熔断器的状态变为开启状态,等待下一个时间周期继续尝试服务调用。
注解方式使用熔断功能
DeptController
package com.qian.springcloud.controller;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.qian.springcloud.pojo.Dept;
import com.qian.springcloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import java.util.List;//提供restful服务
@RestController //返回json字符串,不用走视图解析器(不走页面)
public class DeptController {@Autowiredprivate DeptService deptService;@GetMapping("/dept/get/{id}")@HystrixCommand(fallbackMethod ="hystrixGet") //有异常就调用下面的备选方案public Dept get(@PathVariable("id") Long id){Dept dept = deptService.queryById(id);if (dept==null){throw new RuntimeException("id=>"+id+",不存在该用户,或者信息无法找到~");}return dept;}//备选方案public Dept hystrixGet(@PathVariable("id") Long id){return new Dept().setDeptno(id).setDeptname("id=>"+id+"没有对应的信息,null").setDb_source("no this database in mysql");}
}
启动类注解配置
@EnableEurekaClient //把服务启动后,自动注册到eureka中
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix //添加对熔断的支持
8-5.服务降级
什么是服务降级
- 服务降级是指 当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理,或换种简单的方式处理,从而释放服务器资源以保证核心业务正常运作或高效运作。说白了,就是尽可能的把系统资源让给优先级高的服务。
- 资源有限,而请求是无限的。如果在并发高峰期,不做服务降级处理,一方面肯定会影响整体服务的性能,严重的话可能会导致宕机某些重要的服务不可用。所以,一般在高峰期,为了保证核心功能服务的可用性,都要对某些服务降级处理。比如当双11活动时,把交易无关的服务统统降级,如查看蚂蚁深林,查看历史订单等等。
- 服务降级主要用于什么场景呢?当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用。
- 降级的方式可以根据业务来,可以延迟服务,比如延迟给用户增加积分,只是放到一个缓存中,等服务平稳之后再执行 ;或者在粒度范围内关闭服务,比如关闭相关文章的推荐。
服务降级需要考虑的问题
- 那些服务是核心服务,哪些服务是非核心服务
- 那些服务可以支持降级,那些服务不能支持降级,降级策略是什么
- 除服务降级之外是否存在更复杂的业务放通场景,策略是什么?
自动降级分类
- 超时降级:主要配置好超时时间和超时重试次数和机制,并使用异步机制探测回复情况
- 失败次数降级:主要是一些不稳定的api,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况
- 故障降级:比如要调用的远程服务挂掉了(网络故障、DNS故障、http服务返回错误的状态码、rpc服务抛出异常),则可以直接降级。降级后的处理方案有:默认值(比如库存服务挂了,返回默认现货)、兜底数据(比如广告挂了,返回提前准备好的一些静态页面)、缓存(之前暂存的一些缓存数据)
- 限流降级:秒杀或者抢购一些限购商品时,此时可能会因为访问量太大而导致系统崩溃,此时会使用限流来进行限制访问量,当达到限流阀值,后续请求会被降级;降级后的处理方案可以是:排队页面(将用户导流到排队页面等一会重试)、无货(直接告知用户没货了)、错误页(如活动太火爆了,稍后重试)。
服务熔断 和 服务降级 的区别
- 服务熔断—>服务端:某个服务超时或异常,引起熔断~,类似于保险丝(自我熔断)
- 服务降级—>客户端:从整体网站请求负载考虑,当某个服务熔断或者关闭之后,服务将不再被调用,此时在客户端,我们可以准备一个 FallBackFactory ,返回一个默认的值(缺省值)。会导致整体的服务下降,但是好歹能用,比直接挂掉强。
- 触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)
- 实现方式不太一样,服务降级具有代码侵入性(由控制器完成/或自动降级),熔断一般称为自我熔断。
熔断,降级,限流:
- 限流:限制并发的请求访问量,超过阈值则拒绝;
- 降级:服务分优先级,牺牲非核心服务(不可用),保证核心服务稳定;从整体负荷考虑;
- 熔断:依赖的下游服务故障触发熔断,避免引发本系统崩溃;系统自动执行和恢复
8-6、Dashboard 流监控
启动类配置
@EnableHystrixDashboard //开启监控
给springcloud-provider-dept-hystrix-8001模块下的主启动类添加如下代码,添加监控
@SpringBootApplication
@EnableEurekaClient //EnableEurekaClient 客户端的启动类,在服务启动后自动向注册中心注册服务
public class DeptProvider_8001 {public static void main(String[] args) {SpringApplication.run(DeptProvider_8001.class,args);}//增加一个 Servlet@Beanpublic ServletRegistrationBean hystrixMetricsStreamServlet(){ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());//访问该页面就是监控页面registrationBean.addUrlMappings("/actuator/hystrix.stream");return registrationBean;}
}
访问:http://localhost:9001/hystrix ,进入监控页面
8-7、Zuul路由网关
Zuul包含了对请求的路由和过滤两个最主要的功能 :
- 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问同一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的信息,也即以后的访问微服务都是通过Zuul跳转后获得。
- 注意:Zuul服务最终还是会注册金Eureka
- 提供:代理+路由+过滤 三大功能
Zuul能干啥
- 路由
- 过滤
官方文档:https://github.com/Netflix/zuul/
SpringCloud详解原理分析相关推荐
- 《Exploring in UE4》多线程机制详解[原理分析]
目录 一.概述 二."标准"多线程 三.AsyncTask系统 3.1 FQueuedThreadPool线程池 3.2 Asyntask与IQueuedWork 3.3 其他相关 ...
- JS完美运动框架详解——原理分析及demo
1.运动原理 Js运动,本质来说,就是让 web 上 DOM 元素动起来.而想要 DOM 动起来,改变其自身的位置属性,比如高宽,左边距,上边距,透明度等.还有一个很重要的前提是,运动的物体必须是绝对 ...
- x264 代码重点详解 详细分析
eg mplayer x264 代码重点详解 详细分析 分类: ffmpeg 2012-02-06 09:19 4229人阅读 评论(1) 收藏 举报 h.264codecflv优化initializ ...
- MSTP详解- 原理篇
MSTP详解-原理篇 一. MSTP产生背景 二. MSTP基本概念 三.MSTP端口角色 四.MSTP的端口状态与收敛机制 五. MSTP 拓扑计算原理 5.1 MSTP 向量优先级 5.2 CIS ...
- STP和RSTP详解-原理篇
STP和RSTP详解-原理篇 一.STP 1.1 STP基本概念 1.2 STP三个定时器 1.3 STP BPDU报文 1.3.1 配置 BPDU 1.3.2 TCN BPDU 1.3.3 BPDU ...
- 安卓通知栏管理详解及分析 NotificationListenerService
NotificationListenerService 安卓通知栏管理详解及分析 一. 方法概述 在api 18前可以通过辅助功能'AccessibilityEvent.TYPE_NOTIFICATI ...
- mysql之explain详解(分析索引最佳使用)
mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...
- Yarn是啥? 详解 原理
Yarn是啥? 详解+原理 Yarn概述 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程 ...
- LightGBM详解--原理+技巧+参数
LightGBM详解 LightGBM原理 GOSS EFB 直方图算法 问题一:如何将特征值映射到bin中? 问题二:如何构建直方图 直方图作差加速 leaf-wise分裂策略 LightGBM加速 ...
最新文章
- html 中表格长度固定
- 区块链浏览器_YOYOW正式发布更新版本区块链浏览器
- MySql noinstall-5.1.34-win32 配置
- python服务器搭建qt搭建客户端_利用PythonQT,定制服务器启动工具
- 数据库基础:MySQL必备的三个工具
- 企业中该如何防止僵尸网络的入侵?
- Vivaldi for Mac(极速浏览器)支持m1
- 推荐记录片系列:Ultimate Factories系列和MegaStructures系列
- 科学计算机怎么算别人生日,秒算任意一天是星期几的人是怎么做到的?方法居然这么简单...
- C语言度量代码质量常用指标,代码度量标准
- sqlserver查看历史死锁信息
- Android仿朋友圈照片定点放大和滑动查看(未完待续)
- mysql盲注_Mysql 布尔型盲注手工注入详解
- 最受程序员欢迎的 20 本书!
- EAS 从查询分析器导出表数据的插入语句
- Ubuntu 18.04/20.04 多线程下载工具AXEL和AIRA2
- 你可能被openURL给坑了
- Elasticsearch的节点与分片
- Hu距(Hu Moments)图像距介绍
- 计算机平面设计会学cad吗,请问学建筑与室内设计哪样好是不是都要学CAD