精华内容
下载资源
问答
  • SpringCloud 之熔断监控 Hystrix Dashboard SpringCloud 之监控数据聚合 Turbine 配置中心 SpringCloud 之配置中心 Config(Git 版) SpringCloud 之配置中心 Config(高可用) SpringCloud 之配置中心 ...
  • 首先本机先要安装以下环境,建议先学习了解springboot和springcloud基础知识。 git java8 maven 开发环境搭建 linux和mac下可在项目根目录下执行 ./install.sh 快速搭建开发环境。如要了解具体的步骤,请看如下...
  • Spring Cloud面试

    万次阅读 多人点赞 2019-06-03 21:09:53
    前言,随着分布式的时代到来,现在微服务越来越火了,Spring Cloud已经成为一个面试必问的考点,下面我们就Cloud这一些列的组件来一个入门到面试的过程。开篇前,先让大家看几个常见的Spring Cloud面试题,看完我这...

    前言,随着分布式的时代到来,现在微服务越来越火了,Spring Cloud已经成为一个面试必问的考点,下面我们就Cloud这一些列的组件来一个入门到面试的过程。开篇前,先让大家看几个常见的Spring Cloud面试题,看完我这个博客后,你再回来看这些问题,我相信你肯定能够对答如流的哦。如果下面的面试题你能说出来,你不用看我这篇博客,如果很多不清楚,看完我这篇博客后,我相信你会对这些问题有一个深刻的认识的。

    1.微服务概述

    1.1是什么

    1.2微服务与微服务架构

    1.3微服务的优缺点

    2.Eureka的服务注册与发现

    2.1是什么

    2.2原理讲解

    2.3构建步骤

    2.4集群配置

    2.5和zookeeper的对比

    3.Ribbon

    3.1是什么

    4.feign

    4.1是什么

    4.2能干什么

    5.hystrix

    5.1服务雪崩

    5.2是什么

    5.3什么是服务熔断

    5.4服务的降级

    6.zuul路由网关

    7.SpringCloud config

    7.1分布式的配置问题

    7.2是什么

    展开全文
  • Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。 特点: 1、约定...


    微服务面试题
    一、Spring Cloud有哪些特点?
    Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

    特点:

    1、约定优于配置。

    2、适用于各种环境。开发、部署PC Server或各种云环境如阿里云、AWS等。

    3、隐藏了组件的复杂性,并提供声明式、无xml的配置方式。

    4、开箱即用快速启动。

    5、轻量级组件。

    6、组件丰富:Eureka、ribbon、Hystrix、config、bus、zuul。

    7、选型中立,例如spring cloud支持Eureka、consul、zookeeper。

     

    二、CAP与Base理论
    CAP是一个已经经过证实的理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

     

    BASE理论是对CAP理论的延伸,思想是即使无法做到强一致性(CAP的一致性就是强一致性),但可以采用适当的采取弱一致性,即最终一致性。

    BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

     

    三、Spring cloud与Dubbo的区别
    (1)服务调用方式 dubbo是RPC springcloud Rest Api;

    (2)注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper、consul;

    (3)服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

    四、Spring Boot与 Spring cloud之间的关系
    1、SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

    2、SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。

    3、SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系。

     

    五、负载均衡的意义
    负载均衡可以改善跨计算机、计算机集群、网络连接、中央处理单元或磁盘驱动等多种计算资源的工作负载分布。负载均衡意在优化资源分配,最大化吞吐量,最小化响应时间并避免任一资源的过载。负载均衡通常会涉及专用硬件或软件,例如F5、nginx、ribbon。

     

    六、什么是Hystrix,如何做的容错
    服务隔离:如果整个系统雪崩是由于一个接口导致的,由于这一个接口响应不及时导致问题,那么我们就有必要对这个接口进行隔离,就是只允许这个接口最多能接受多少的并发,做了这样的限制后,该接口的主机就会空余线程出来接收其他的情况,不会被哪个坏了的接口占用满。Hystrix 就是一个不错的服务隔离框架。

     

    服务雪崩:雪崩是系统中的蝴蝶效应导致其发生的原因多种多样,有不合理的容量设计,或者是高并发下某一个方法响应变慢,亦或是某台机器的资源耗尽。从源头上我们无法完全杜绝雪崩源头的发生,但是雪崩的根本原因来源于服务之间的强依赖,所以我们可以提前评估。当整个微服务系统中,有一个节点出现异常情况,就有可能在高并发的情况下出现雪崩,导致调用它的上游系统出现响应延迟,响应延迟就会导致 tomcat 连接本耗尽,导致该服务节点不能正常的接收到正常的情况,这就是服务雪崩行为。

     

    Hystrix两种隔离策略:线程池隔离THREAD 、信号量SEMAPHORE隔离。

     

    熔断发生的三个必要条件:

    1、有一个统计的时间周期,滚动窗口

    相应的配置属性metrics.rollingStats.timeInMilliseconds 默认 10000 毫秒

    2、请求次数必须达到一定数量

    相应的配置属性 circuitBreaker.requestVolumeThreshold默认 20 次

    3、失败率达到默认失败率

    相应的配置属性 circuitBreaker.errorThresholdPercentage 默认 50%

     

    用到的注解:

    @EnableCircuitBreaker

    @HystrixCommand(fallbackMethod="queryOrderByIdFallback",commandKey = "queryOrderById",groupKey = "querygroup-one",commandProperties = { @HystrixProperty(name ="execution.isolation.strategy", value="THREAD")},threadPoolKey = "queryOrderByIdhystrixJackpool")

     

    Hystrix有哪几种状态:开启、关闭、半开启。

     

     

    参考文档:https://www.toutiao.com/i6805112656714793475/

     

    七、介绍一下Eureka
     

     

     

    用到的注解:

    @EnableEurekaServer // 注册服务中心

    @EnableEurekaClient // 服务提供端

     

    服务注册与续约:首先服务注册到eureka server上,注册之后服务提供者会维护一个心跳,用来告诉eureka server “我还OK”,也就是续约Renew,心跳默认三十秒检测一次。

    服务剔除:当服务实例正常下线时,服务实例会告诉eureka server “我要下线了”,将服务状态改为 down。有时服务会出现非正常下线,eureka server 在启动时会去创建一个定时任务检测服务提供者,剔除服务,检测时间默认90秒。

    自我保护:eureka server 会去将心跳在15分钟内是否低于85%,如果出现eureka会将他们保护起来,让这些实例不会过期,这样客户端就很容易拿到不存在的实例,这就需要容错机制,客户端重试、断路器等机制。

     

    zone与region:

    1、机房隔离

    2、Ribbon默认优先访问一个zone中的服务实例

     

    八、介绍一下Ribbon
    spring Cloud Ribbon 是一个客户端的负载均衡器,它提供对大量的HTTP和TCP客户端的访问控制。

    客户端负载均衡即是当浏览器向后台发出请求的时候,客户端会向 Eureka Server 读取注册到服务器的可用服务信息列表,然后根据设定的负载均衡策略(没有设置即用默认的),抉择出向哪台服务器发送请求。

     

    重要注解:@Loadbalanced 注解修饰RestTemplate

     

    负载均衡策略:线性轮询、随机、重试机制。

     

    Ribbon内部有一个chooseServer()方法用于选择服务。

     

    九、聊聊Feign
    Feign使代码变得整洁,内部封装了Ribbon的负载以及Hystrix。但是性能会比较差,建议复杂业务不要使用。

     

     

    十、为什么使用Spring Cloud Bus
    Spring Cloud Bus 提供了跨多个实例刷新配置的功能

     

    十一、什么是SpringCloudConfig?
    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

    使用:

    (1)添加pom依赖

    (2)配置文件添加相关配置

    (3)启动类添加注解@EnableConfigServer

    十二、Spring Cloud Gateway?
    Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。

    使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。
     

    1、什么是微服务?

    2、微服务之间是如何通讯的?

    3、springcloud 与dubbo有哪些区别?

    4、请谈谈对SpringBoot 和SpringCloud的理解

    5、分布式系统面临的问题

    6、什么是服务熔断,什么是服务降级

    7、微服务的优缺点分别是什么?说下你在项目开发中碰到的坑?

    8、你所知道的微服务技术栈有哪些?请列举一二

    9、什么是 Eureka服务注册与发现

    10、Eureka的基本架构是什么?

    11、作为服务注册中心,Eureka比Zookeeper好在哪里?

    12、什么是 Ribbon负载均衡

    13、Ribbon负载均衡能干嘛?

    14、什么是 Feign 负载均衡

    15、Feign 能干什么

    16、什么是 Hystrix断路器

    17、Hystrix断路器能干嘛?

    18、什么是 zuul路由网关

    19、什么是SpringCloud Config分布式配置中心

    20、分布式配置中心能干嘛?

     

    1、什么是微服务?
    微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。 

    服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。

    另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

    从技术维度来说:

    微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。

     

    2、微服务之间是如何通讯的?
    第一种:远程过程调用(Remote Procedure Invocation)

    直接通过远程过程调用来访问别的service。

    示例:REST、gRPC、Apache、Thrift

    优点:简单,常见。因为没有中间件代理,系统更简单
    缺点:只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应;降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
    第二种:消息

    使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。

    示例:Apache Kafka、RabbitMQ

     

    3、springcloud 与dubbo有哪些区别?
    相同点:SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理。

    不同点:SpringCloud是一套目前比较网站微服务框架了,整合了分布式常用解决方案遇到了问题注册中心Eureka、负载均衡器Ribbon ,客户端调用工具Rest和Feign,分布式配置中心Config,服务保护Hystrix,网关Zuul Gateway ,服务链路Zipkin,消息总线Bus等。

    优点:把客户端和服务端解耦,更松耦合 提高可用性,因为消息中间件缓存了消息,直到消费者可以消费,支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应
    缺点:消息中间件有额外的复杂性
    dubbo内部实现功能没有SpringCloud强大(全家桶),只是实现服务治理,缺少分布式配置中心、网关、链路、总线等,如果需要用到这些组件,需要整合其他框架。

    表 Spring Cloud与Dubbo功能对比

     

    4、请谈谈对SpringBoot 和SpringCloud的理解
    SpringBoot专注于快速方便的开发单个个体微服务。

    SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
    为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

    SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系.

    SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

    Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

     

    5、分布式系统面临的问题
    复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。

    服务雪崩:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.

    对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。

    一般情况对于服务依赖的保护主要有以下三种解决方案:

    熔断模式:这种模式主要是参考电路熔断,如果一条线路电压过高,保险丝会熔断,防止火灾。放到我们的系统中,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

    隔离模式:这种模式就像对系统请求按类型划分成一个个小岛的一样,当某个小岛被火少光了,不会影响到其他的小岛。例如可以对不同类型的请求使用线程池来资源隔离,每种类型的请求互不影响,如果一种类型的请求线程资源耗尽,则对后续的该类型请求直接返回,不再调用后续资源。这种模式使用场景非常多,例如将一个服务拆开,对于重要的服务使用单独服务器来部署,再或者公司最近推广的多中心。

    限流模式:上述的熔断模式和隔离模式都属于出错后的容错处理机制,而限流模式则可以称为预防模式。限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应。

     

    6、什么是服务熔断,什么是服务降级
    服务熔断:熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。

    在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

    Hystrix服务降级:其实就是线程池中单个线程障处理,防止单个线程请求时间太长,导致资源长期被占有而得不到释放,从而导致线程池被快速占用完,导致服务崩溃。

    Hystrix能解决如下问题:

    请求超时降级,线程资源不足降级,降级之后可以返回自定义数据

    线程池隔离降级,分布式服务可以针对不同的服务使用不同的线程池,从而互不影响

    自动触发降级与恢复

    实现请求缓存和请求合并

     

    7、微服务的优缺点分别是什么?说下你在项目开发中碰到的坑?
    优点

    每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求

    开发简单、开发效率提高,一个服务可能就是专一的只干一件事。

    微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。

    微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。

    微服务能使用不同的语言开发。

    易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, Hudson, bamboo 。

    微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。

    微服务允许你利用融合最新技术。

    微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。

    每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库。

    缺点

    开发人员要处理分布式系统的复杂性

    多服务运维难度,随着服务的增加,运维的压力也在增大

    系统部署依赖

    服务间通信成本

    数据一致性

    系统集成测试

    性能监控……

     

    8、你所知道的微服务技术栈有哪些?请列举一二
    服务开发
    Springboot、Spring、SpringMVC

    服务配置与管理
    Netflix公司的Archaius、阿里的Diamond等

    服务注册与发现
    Eureka、Consul、Zookeeper等

    服务调用
    Rest、RPC、gRPC

    服务熔断器
    Hystrix、Envoy等

    负载均衡
    Ribbon、Nginx等

    服务接口调用(客户端调用服务的简化工具)
    Feign等

    消息队列
    Kafka、RabbitMQ、ActiveMQ等

    服务配置中心管理
    SpringCloudConfig、Chef等

    服务路由(API网关)
    Zuul等

    服务监控
    Zabbix、Nagios、Metrics、Spectator等

    全链路追踪
    Zipkin,Brave、Dapper等

    服务部署
    Docker、OpenStack、Kubernetes等

    数据流操作开发包
    SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)

    事件消息总线
    Spring Cloud Bus

     

    9、什么是 Eureka服务注册与发现
    Eureka是Netflix的一个子模块,也是核心模块之一。

    Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。

    服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。

     

    10、Eureka的基本架构是什么?
    Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。

    Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。

    而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

    SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

    Eureka包含两个组件:Eureka Server 和 Eureka Client

    Eureka Server提供服务注册服务

    各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

    EurekaClient是一个Java客户端

    用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。

    如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

    11、作为服务注册中心,Eureka比Zookeeper好在哪里?
    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

    因此,Zookeeper 保证的是CP, Eureka 则是AP。

    Zookeeper保证CP

    当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。

    也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。

    问题在于,选举leader的时间太长,30~120s,且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。

    在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

    Eureka保证AP

    Eureka看明白了这一点,因此在设计时就优先保证可用性。

    Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。

    而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

    除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

    Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务

    Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)

    当网络稳定时,当前实例新的注册信息会被同步到其它节点中

    因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

     

    12、什么是 Ribbon负载均衡
    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。

    简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。

    Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

     

    13、Ribbon负载均衡能干嘛?
    LB(负载均衡
    LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。
    负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA。
    常见的负载均衡有软件Nginx,LVS,硬件 F5等。
    相应的在中间件,例如:dubbo和SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义。

    集中式LB
    即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;

    进程内LB
    将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。

    注意:Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

     

    14、什么是 Feign 负载均衡
    Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。

    Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

    Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,只需要创建一个接口,然后在上面添加注解即可。

     

    15、Feign 能干什么
    Feign旨在使编写Java Http客户端变得更容易。

    前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。

    但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。

    所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。

    Feign集成了Ribbon
    利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。

    而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用

    Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),该请求发送给Eureka服务器(http://MICROSERVICECLOUD-DEPT/dept/list),
    通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用。

     

    16、什么是 Hystrix断路器
    Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等, Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

    “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

     

    17、Hystrix断路器能干嘛?
    服务降级
    整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来

    服务熔断
    熔断机制是应对雪崩效应的一种微服务链路保护机制。
    当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

    服务限流

    接近实时的监控
    除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控。Spring Cloud也提供了Hystrix Dashboard的整合,对监控内容转化成可视化界面。

     

    18、什么是 zuul路由网关
    Zuul 包含了对请求的路由和过滤两个最主要的功能:

    其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,

    是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

    注意:Zuul服务最终还是会注册进Eureka

    提供=代理+路由+过滤 三大功能

     

    19、什么是SpringCloud Config分布式配置中心
    SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

     

    20、分布式配置中心能干嘛?
    集中管理配置文件
    不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release

    运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息

    当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴露
     

    展开全文
  • springcloud常见面试

    2021-01-21 01:11:34
    springcloud常见面试题 1.SpringCloud分布式开发五大组件 服务发现——Netflix Eureka 客服端负载均衡——Netflix Ribbon 断路器——Netflix Hystrix 服务网关——Netflix Zuul 分布式配置——Spring Cloud Config 2...

    springcloud常见面试题

    1.SpringCloud分布式开发五大组件

    服务发现——Netflix Eureka

    客服端负载均衡——Netflix Ribbon

    断路器——Netflix Hystrix

    服务网关——Netflix Zuul

    分布式配置——Spring Cloud Config

    2.SpringBoot和SpringCloud的区别?

    SpringBoot专注于快速方便的开发单个个体微服务。

    SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,

    为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

    SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系

    SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

    3.Spring Cloud 和dubbo区别?
    (1)服务调用方式 dubbo是RPC springcloud Rest Api

    (2)注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper

    (3)服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

    4.什么是 Hystrix(嗨死椎)断路器?它如何实现容错?
    Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。

    通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。

    现在假设由于某种原因, 公开的服务会抛出异常。我们在这种情况下使用 Hystrix 定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退方法将返回一些值。

    5.Spring Cloud断路器的作用
    当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)

    断路器有完全打开状态:一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务

    半开:短时间内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭

    关闭:当服务一直处于正常状态 能正常调用

    6.什么是Spring Cloud Config?
    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

    使用:

    (1)添加pom依赖

    (2)配置文件添加相关配置

    (3)启动类添加注解@EnableConfigServer (e na ble)

    7. 微服务之间是如何独立通讯的
    1.远程过程调用(Remote Procedure Invocation):

       也就是我们常说的服务的注册与发现
    
       直接通过远程过程调用来访问别的service。
    
       优点:
    
       简单,常见,因为没有中间件代理,系统更简单
    
       缺点:
    
       只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
    
       降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
    

    2.消息:

       使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
    
       优点:
    
       把客户端和服务端解耦,更松耦合
    
       提高可用性,因为消息中间件缓存了消息,直到消费者可以消费
    
       支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应
    
       缺点:
    
       消息中间件有额外的复杂
    

    8. 微服务的优缺点分别是什么?说下你在项目开发中碰到的坑
    优点

    每一个服务足够内聚,代码容易理解

    开发效率提高,一个服务只做一件事

    微服务能够被小团队单独开发

    微服务是松耦合的,是有功能意义的服务

    可以用不同的语言开发,面向接口编程

    易于与第三方集成

    微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界面组合

        开发中,两种开发模式
                 前后端分离
                 全栈工程师
    

    可以灵活搭配,连接公共库/连接独立库

    缺点

    分布式系统的负责性

    多服务运维难度,随着服务的增加,运维的压力也在增大

    系统部署依赖

    服务间通信成本

    数据一致性

    系统集成测试

    性能监控

    9.SpringCloud与Dubbo区别

    SpringCloud用Eureka,Dubbo用Zookeeper
    1.注册的服务的区别
    Dubbo是基于java接口及Hession2序列化的来实现传输的,Provider对外暴露接口,Consumer根据接口的规则调用。也就是Provider向Zookeeper注册的是接口信息,Consumer从Zookeeper发现的是接口的信息,通过接口的name,group,version来匹配调用。Consumer只关注接口是否匹配,而对此接口属于什么应用不关心。当然接口的注册信息里会包含应用的ip,hostname等。

    SpringCloud的服务发现是基于Http协议来实现的,Provider对外暴露的是应用信息,比如应用名称,ip地址等等,Consumer发现的是应用的信息,当调用的时候随机选择一个Provider的IP地址,应用名称,然后依据Http协议发送请求。Consumer关注的是应用名称,根据应用名称来决定调用的是哪个服务集群,然后对此名称对应的服务集群做负载均衡。Provider接受到请求后,根据内置的SpringMVC来匹配路由处理请求。

    2 . Server集群服务信息同步的区别

    Dubbo使用Zookeeper做服务发现和治理,Zookeeper是一个分布式协调框架,其有很多很实用的功能,服务发现仅仅是其中的一个。Zookeeper基于著名的CAP理论中的C(一致性),P(分区可用性)实现,它的ZAB(zookeeper atomic broadcast protocol)协议,保证了集群里状态的一致性。Client的每一个事务操作都由Leader广播给所有Follower,当超过半数的Follower都返回执行成功后,才执行事务的ack。对于因网络崩溃或者宕机等问题而执行失败的zookeeper节点,zookeeper会基于zab的崩溃恢复机制来处理,这里不再讲述。每一个操作都需要过半数的zookeeper节点执行成功才确认成功,那么当zookeeper集群过半数节点出现问题时,服务发现功能就不可用。

    SpringCloud使用Eureka做服务发现和治理,它是一个专门用于服务发现和治理的框架,其基于CAP理论中的A(可用性),P(分区可用性)实现。EurekaServer节点间的服务信息同步是基于异步Http实现的。每隔Server节点在接收Client的服务请求时,立即处理请求,然后将此次请求的信息拷贝,封装成一个Task,存入Queue中。Server初始化时会启动一个线程定期的从TaskQueue中批量提取Task,然后执行。服务同步不保证一定成功,虽然有失败重试,但超过一定时限后就放弃同步。当然其有一个特性,当服务丢失后,同步的操作返回400,404后会立即将最新的服务信息同步过去,因此即使中途同步失败,不会对后续的同步有影响。

    3 . 服务更新机制的区别

    Dubbo使用Zookeeper做服务发现和治理,订阅Zookeeper下相应的znode。当节点发生变化,比如有新的元素增加,或者旧的元素移除,Zookeeper会通知所有订阅此节点的Client,将当前的全量数据同步给各Client,Dubbo里根据最新的数据来做相应处理,移除下线的,初始化新增的。每次更新都同步全量数据。

    Eureka在启动时向Server进行一次全量拉取,获取所有的可用服务信息,之后默认情况下都是进行增量拉取。Server会将有变化的服务信息放在一个Queue里,Client每次同步时仅获取增量信息,根据信息里的操作类型,服务信息来对当前持有的服务做相应的处理,移除下线的,初始化新增的等。每次更新仅同步增量数据,也就是更新的数据。

    4 . 服务更新反馈机制的区别

    Dubbo订阅Zookeeper下相应的节点,当节点的状态发生改变时,Zookeeper会立即反馈订阅的Client,实时性很高。

    Eureka Server在接收到Client的更新操作,或者移除服务信息时,仅仅会将更新消息存放入recentlyChangedQueue中,不会主动的反馈其他Client。其他Client只有在拉取服务增量信息时才会感知到某个服务的更新,延时最大为30S,也就是拉取周期。

    5 . 服务信息回收机制的区别

    Dubbo Provider初始化时会创建一个Zookeeper Client,专门用于与Zookeeper集群交互。维持与集群间的长连接,定时发送心跳,维护Zookeeper上自身节点的存在。节点类型是临时节点,也就是当心跳超时或者长连接断开时,会立即移除Provider对应的节点。
    Dubbo Consumer初始化时也会创建一个Zookeeper Client,专门用于与Zookeeper集群交互。维持长连接,创建EvenetListener,监听Provider节点的变动情况。当Provider节点新增或者移除时,Zookeeper会广播这个事件,然后将此节点的当前值(剩下的所有接口信息)发送给那些注册了此节点监听器的Client。Consumer获取到对应Provider节点下的所有接口信息后,移除已下线的,创建新增的。
    Zookeeper对服务信息的维护实时性和一致性比较高,但也可能因为网络问题或者集群问题导致服务不可用。

    SpringCloud的服务信息回收仅基于心跳超时,与长连接无关。当心跳超时后,EurekaServer回收服务信息,然后将此动作同步给其他Server节点。当然可能一个服务信息会存在多个Server上,多次回收操作的同步具备幂等性。也就是说服务回收只需要通知一个Server节点就可以了,回收动作会通过Server节点传播开来。EurekaServer能够回收服务信息由个重要前提:上一分钟内正常发送心跳的服务的比列超过总数的85%,如果因为网络波动等原因造成大量服务的心跳超时,那么EurekaServer会触发自我保护机制,放弃回收那些心跳超时的服务信息。服务发现组件应该优先保证可用性,Consumer能够发现Provider,即使发现的是非可用的Provider,但因为Conusmer一般具备容错机制,不会对服务的正常调用有太多影响。从这点上看Eureka的服务发现机制要比Zookeeper稍微合理一点的。

    6 . 节点性质的区别

    Dubbo只有Consumer订阅Provider节点,也就是Consumer发现Provider节点信息

    Eureka不区分Consumer或者Provider,两者都统称为Client,一个Client内可能同时含有Provider,Consumer,通过服务发现组件获取的是其他所有的Client节点信息,在调用时根据应用名称来筛选节点

    7 . 使用方式的区别

    Dubbo使用Zookeeper作为服务发现和治理的组件,所以需要搭建Zookeeper集群作为依赖。

    SpringCloud使用Eureka作为服务发现和治理组件,在Spring应用中整合Eureka还是很简单的,引入依赖,加个注解,指定集群Server的serviceUrl,其他的都可以使用默认配置即可,启动应用,Eureka集群就搭建好了。同时配合SpringCloudConfg,能够统一管理Eureka的集群配置信息,可以动态的增加或减少EurekaServer的集群节点。Eurerka会每隔15分钟根据配置上的集群信息重新生成集群节点,覆盖之前的。这种机制比Zookeeper要更优秀一些,毕竟Eureka算是Spring生态里的一环,已经被整合的非常好了,能够以很多匪夷所思的方式来使用。

    作者:yhs007
    链接:https://www.jianshu.com/p/f5bf09c0ef0b
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 这篇博客也是因为一个朋友参加面试,回来后说今天面试官上来就问...SpringCloud组件介绍 这个组件我百度了一下,我看网上有些不一样的,我这里就不管那么多了。有问题欢迎各位大牛留言,谢谢。外附一个链接 链接: link.

    这篇博客也是因为一个朋友参加面试,回来后说今天面试官上来就问了微服务,为了巩固自己,也为了方便一下广大技术爱好者,我这里根据面试官向他提问的问题,对微服务做了一个简单的总结。
    由于本人也是菜鸟一枚,有些知识点也是看了网上的一些资料,并没有进行实际操作,所以整个文章中我就省略了代码和配置文件。如果有什么不对的地方,欢迎留言,不吝赐教。下面上正文吧。

    SpringCloud组件介绍

    这个组件我百度了一下,我看网上有些不一样的,我这里就不管那么多了。有问题欢迎各位大牛留言,谢谢。外附一个链接
    链接: https://blog.csdn.net/xunjiushi9717/article/details/91988479?utm_source=app.

    先介绍一下什么是SpringCloud的吧:SpringCloud通俗易懂的理解方式,就是一系列框架的集合,内部整合了很多组件。核心组件主要有:

    Eureka(注册中心)

    一个服务注册与发现的组件。Eureka的体系主要包括服务的提供者,服务的消费者,服务注册中心。服务的提供者和消费者都是Eureka的客户端,服务注册中心作为Eureka的服务端。我们在使用Eureka的时候,通过配置文件的方式,将我们的API接口注册到Eureka的注册中心上,我们的服务的消费者可以向Eureka注册中心拉取服务列表,然后根据获取的服务列表选择一个服务的提供者进行消费服务。

    听起来可能有人会觉得这跟Zookeeper差不多,Dubbo就是以Zookeeper作为注册中心的。但是这两者还是有区别的,(要不岂不是没有Eureka什么事了):

    Dubbo只是实现了服务治理,而SpringCloud的子项目分别覆盖了微服务架构的很多组件。

    Dubbo的效率略高于SpringCloud。因为Dubbo底层使用了RPC通信协议,而SpringCloud使用的RESTful完成的通信协议。大型的微服务架构项目,还是推荐使用SpringCloud。

    Eureka可以通过搭建集群实现Eureka的高可用,防止Eureka挂掉,导致Eureka的不可用。这我们需要注意搭集群的时候,要保证每个Eureka服务注册中心之间要实现相互注册,防止数据的不一致或者数据丢失。这里主要是通过配置文件的方式进行实现,不过多解释,可以查询其他资料。

    如何从EurekaServer中动态的获取服务提供方的IP和端口号

    1.注入DiscoveryClient对象,激活
    2.调用getInstances()方法

    最后提一下Eureka的自我保护机制

    Eureka的自我保护机制

    Eureka的自我保护机制:Eureka客户端会定时的向 Eureka服务端发送心跳包,默认是30S发送一次,目的是告诉 Eureka服务端当前客户端实例还处于存活状态,如果Eureka服务端在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90S),但是,如果短时间内丢失大量的实例心跳,便会触发Eureka服务端的自我保护机制的 ,默认自我保护机制处于开启状态。
    这里不多解释了,参考这条链接
    链接: https://blog.csdn.net/BruceLiu_code/article/details/104913775.
    感谢https://blog.csdn.net/BruceLiu_code.

    Ribbon(负载均衡)

    一个基于HTTP和TCP的负载均衡工具,可以简化我们的远程调用。这里有必要提一下负载均衡:
    服务端的负载均衡:负载均衡算法在服务端,由负载均衡器维护服务地址列表。在某些情况下,比如我们要搭集群,实现服务器端的高可用。我们需要配置多台服务器,每个服务器都有不同的服务请求地址。当我们的客户端向服务端发送请求的时候,不会直接去访问我们的服务器,会先经过一个负载均衡器,内部通过负载均衡算法,帮我们去访问不同的服务器。这主要是服务端的负载均衡。

    还有客户端负载均衡:我们的服务的消费者通过Eureka访问我们的服务生产者(这里我们配置了多个生产者,实现了高可用的集群环境),然后我们的服务消费者通过Eureka将服务的提供者的路径地址保存在服务消费者内部,然后通过服务消费者自己写的负载均衡算法选择不同的节点,和服务的提供者建立连接。

    这里我们提一下负载均衡的策略:随机,轮询(这也是Ribbon默认使用的负载均衡策略),最小并发,过滤,轮询重试,性能可用性等。而我们的Ribbon也可以通过配置文件的方式设置负载均衡策略。

    这里由于是配置文件的方式,不过多阐述,有兴趣的可以去查阅资料了解一下。以下文章涉及编码和配置的全部省略。

    那么Ribbon是怎么简化远程调用的呢?

    这里我就只做简述,涉及的代码后期有时间再补上

    1.我们在声明RestTemplate的时候,添加一个@LoadBalanced注解。
    2.在使用RestTemplate发送请求,定义url时,host:port可以替换为服务提供者的应用名称。

    这里就不过多阐述了,大家有时间可以去看其他的资料。

    Feign

    一个声明式的REST客户端,使用了基于注解的方式,方便了我们客户端的配置。简单总结一句话:Feign 的出现使得Eureka和Ribbon的使用更为简单,同时支持SpringMVC注解。引入feign依赖,编写Feign调用接口,启动类添加@EnableFeignClients注解,开启Feign功能。这里具体的配置和代码不做讲解了,后期有时间我会单独写一篇博客补上来。

    Hystrix(熔断器)

    这里先提一下服务雪崩:

    服务雪崩

    服务雪崩: 在分布式系统或者微服务的架构下,各个系统之间的关系错综复杂,相互依赖。如果一个服务出现问题,可能会导致整个系统出错,会造成一种雪崩的情况。所谓的雪崩就是一个服务失败了,导致整条链路的服务都失败的情形。这个时候,可以使用Hystrix(熔断器)隔离远程服务。

    Hystrix(熔断器)就是一个延迟容错库,用于隔离远程服务、第三方库,防止出现级联失败(雪崩)。

    服务隔离:
    线程池隔离:我们将线程池中的线程分别进行隔离,拆分成多个小的线程池,每个线程池中有若干线程。当一个服务挂掉以后,只会导致当前服务相对应的线程池中无可用线程。不会影响其他的服务。

    信号量隔离:限制我们的访问量,访问次数。

    服务降级:
    在进行程序开发的时候,我们要预判到我们的程序失败的情况并进行处理。当程序服务出现失败的情况后,我们采用我们的降级方案,屏蔽一下错误情况,进行一些友好提示。不管是服务的提供方还是消费方我们都需要进行降级方案的处理。防止消费方在对服务提供方调用之前就出现错误情况。

    服务熔断:
    可以监控我们微服务的调用情况,当失败的次数达到某个阈值的时候,会自动打开断路器,拒绝所有的请求,直到恢复正常。

    这里简单提一下断路器:断路器有三种状态:关闭打开半开。默认是关闭的,当我们请求失败次数达到阈值的时候,断路器会自动打开,拒绝所有的请求,打开5秒以后,会切换为半开状态,判断请求是否正确。确定是否关闭断路器。

    服务限流
    技术不够,博客来凑
    链接:http://c.biancheng.net/view/5543.html.

    zull(微服务网关)

    链接:https://blog.csdn.net/xunjiushi9717/article/details/91988479?utm_source=app.
    感谢https://blog.csdn.net/xunjiushi9717.
    Spring Cloud Zuul通过与Spring Cloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得了所有其他微服务的实例信息。对于路由规则的维护,Zuul默认会将通过以服务名作为ContextPath的方式来创建路由映射。Zuul提供了一套过滤器机制,可以支持在API网关无附上进行统一调用来对微服务接口做前置过滤,已实现对微服务接口的拦截和校验。

    Spring Cloud Config

    这个就不说了,直接看这个链接吧,我也不是特别的懂
    链接:https://www.jianshu.com/p/d696fc89a331.

    Gateway(网关)

    ​ 通过网关去配置后台微服务的地址,用户直接跟网关打交道,将请求发送给网关,网关再将请求发送给对应的微服务。旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。

    ​ 网关就是一个系统的入口,封装了程序的内部结构。一些认证、监控、权限验证、缓存等公共的逻辑可以在网关中实现。

    Gateway的静态路由: 通过Gateway进行请求转发的时候,我们配置文件中的uri地址是写死的。

    Gateway的动态路由(Gateway怎么实现动态路由):

    当我们的一个微服务的uri发生变化的时候,网关的配置就要进行更改,显然很不方便。所以我们需要配置动态路由。我们的微服务的IP端口会注册到Eureak,网关可以直接从Eureak中拉取就可以了,这里我们只需要让网关成为Eureak的一个客户端就行了。
    将我们配置文件中的uri改为:

    uri:lb://Eureak中注册的服务名称
    
    Gateway(网关)过滤器

    Gateway中可以定义多个过滤器,形成一种过滤器链,对我们的请求和相应进行拦截,然后完成一些通用的操作。

    两种过滤器方式:pre 和 post

    pre:在转发之前执行

    post:在转发之后执行

    两种类型的过滤器:

    GatewayFilter(局部过滤器,针对的单个路由):在配置文件中进行配置生效。

    GlobalFilter(全局过滤器,针对所有路由):不需要进行配置,系统初始化时加载。

    如有不妥之处,希望各位技术大牛多多指教,及时留言,个人不吝赐教。
    如有不妥之处,希望各位技术大牛多多指教,及时留言,个人不吝赐教。
    如有不妥之处,希望各位技术大牛多多指教,及时留言,个人不吝赐教。

    展开全文
  • springCloud常见面试

    2020-10-18 21:47:14
    1.什么是springCloud?...2.springCloud的核心组件及其作用? 1)Eureka: 主要用于服务注册与发现,它既包含了服务端的组件也包含了客户端的组件,服务端和客户端都是java编写,因此Eureka主要适用通过...
  • SpringCloud常见面试题总结一

    千次阅读 2020-04-19 20:13:11
    本文将总结一些常见的微服务架构SpringCloud相关的面试题。 二、面试题 【1】什么是SpringCloud? 使用SpringCloud有什么优势? SpringCloud是在SpringBoot基础上构建的,用于快速构建分布式系统的通用模式的工具集...
  • springboot是spring开源组织下的一个子项目,也是spring家族的成员,是spring组件的一站式解决方案,主要是简化使用spring难度,和繁琐的配置,提供了各种启动器,使开发者可以快速上手。 springboot有哪些优点: ...
  • 文章目录SpringCloud笔记二:springCloud核心组件注册中心微服务注册中心分布式应用知识CAP理论知识CAP面试题和注册中心的选择Eureka Server服务搭建实战服务注册和发现Eureka Client搭建商品服务实战Eureka服务注册...
  • 服务注册中心——Netflix Eureka 客服端负载均衡——Netflix Ribbon 断路器——Netflix Hystrix 服务网关——Netflix Zuul 分布式配置——Spring Cloud Config
  • springcloud面试

    2020-03-12 18:18:14
    1、什么是springcloud...3、springcloud组件有哪些? 4、springcloud和doubbl有哪些不一样的地方? 5、什么是hristrix,说一下服务熔断,服务降级 6、ribbon是什么? 7、分布式事务的实现方式? 8、feign的好处 ...
  • Spring Cloud 面试

    2020-04-20 21:36:34
    Spring Cloud 面试题 ##(1)什么是 Spring CloudSpring Cloud 基于 Spring Boot 使得整体的开发、配置、部署都非常方便,可快速搭建基于微服务的分布式应用,Spring Cloud 相当于微服务各组件的集大成者。 ...
  • 介绍一下SpringCloud SpringCloud是一系列框架的集合,提供了微服务的一些列解决方案,他将一系列优秀的框架 基于 SpringBoot进行了整合,...SpringCloud的常用组件 服务注册发现中心 Eureka / nacos 负载均衡 rib...
  • springCloud面试

    2019-08-22 11:04:24
    什么是springCloud 微服务是一种架构方式,而springCloud就是其中一种技术架构。 springCloud将其他技术整合到一起,如配置管理,服务发现,智能路由,熔断器,集群状态。 - Eureka:服务治理组件,包含服务注册...
  • SpringCloud 面试

    2019-12-04 17:30:52
    什么是 spring cloudspring cloud 断路器的作用是什么? spring cloud 的核心组件有哪些?
  • SpringCloud面试

    2021-03-22 20:06:03
    十四、SpringCloud 1.什么是Spring Cloud? Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。 Spring Cloud对微服务基础框架Netflix的多个开源组件进行了封装,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 608
精华内容 243
关键字:

springcloud组件面试

spring 订阅