定制开发【Spring】SpringCloud(Gateway、Eureka、Ribbon、Hytrix、Feign等)面试题

Gateway

定制开发过滤器和的对比

过滤器:定制开发对单个服务器的请求进定制开发行拦截控制
网关:定制开发对所有的服务器的请求定制开发进行拦截控制

和 spring cloud gateway 的对比

zuul:是 Netflix 的,基于 ,阻塞式的 api,定制开发不定制开发支持长连接。
gateway:是 springcloud 的,基于 Spring5 构建,定制开发响应式非阻塞的 ,支持长连接。

网关与 区别

相同点:定制开发都是可以实现对 api 定制开发接口的拦截,、反向代理、定制开发请求过滤等,定制开发可以实现和网关一样的效果。
不同点:
Nginx 采用 C 语言编写,Gateway 是用 Java 定制开发语言编写的,定制开发能够更好让我们使用 java 定制开发语言来实现对请求的处理。
Nginx 定制开发属于服务器端负载均衡器,Gateway 定制开发属于本地负载均衡器。

Gateway 的组成

路由:定制开发网关的基本模块,有 ID,目标 URI,定制开发一组断言和一组过滤器组成;
断言:定制开发是访问该路由的访问规则,定制开发可以用来匹配来自 http 定制开发请求的任何内容,例如 headers 或者参数;
过滤器:定制开发这个就是我们平时说的过滤器,定制开发用来过滤一些请求的,gateway定制开发有自己默认的过滤器,定制开发我们也可以自定义过滤器,定制开发要实现两个接口,Ordered 和 Globalfilter。

Gateway定制开发的过滤器都有哪些

  1. 定制开发局部过滤器GatewayFilter
    定制开发内置局部过滤器工厂:AddRequestHeader、AddRequestParameter、AddResponseHeader、Hytrix、RedirectTo、SaveSession等;
  2. 定制开发全局过滤器GlobalFilter
    内置全局过滤器:
    • LoadBalanceClientFilter:通过负载均衡客户端,根据路由的url解析转换成真实的请求url;
    • NettyRoutingFilter、NettyWriteResponseFilter:通过HttpClient转发请求真实的url,并将响应写入到当前的请求响应中;
    • WebsocketRoutingFilter:负责处理Websocket类型的请求响应信息;
    • ForwardPathFilter:解析路径,并将路径转发;
    • RouteToRequestUrlFilter:转换路由中的uri
    • WebClientHttpRoutingFilter、WebClientWriteResponseFilter:通过WebClient转发请求真是的url,并将响应写入到当前的请求响应中。

怎么用Gateway做负载均衡

在gateway的配置文件中,使用lb配置服务,而非直接使用IP:PORT

routes: 	- id: predicated_domo_route	  uri: lb://spring-cloud-one-service	  ……
  • 1
  • 2
  • 3
  • 4

Gateway配置文件说明

spring:   cloud:    gateway:      routes:         - id: demo_route          uri: lb://spring-cloud-one-service # 路由到one-service模块,要实现负载均衡,不能直接写IP和端口          predicates: # 断言,如果有多个,必须同时满足            - Path=/gateway/**            - Parameter=emailAddr          filter:             - StripPrefix=1 # 表示去除1个前缀      httpclient:        connect-timeout: 1000 # 配置连接超时        response-timeout: 5s # 配置响应超时
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

注册中心

CAP

一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)

和Zookeeper的区别

CAP

Eureka是AP的,Zookeeper是CP的。

节点宕机处理

Zookeeper会出现一种情况,就是当master节点宕掉,需要重新进行leader选举,这个时间在30~120s,期间整个zk集群都是不可用的。
而Eureka有限保证了可用性,节点平等,几个节点挂掉也不会影响其他节点的正常工作。但是查到的信息可能不是最新的,不保证强一致性。
此外,Eureka还有一种自我保护机制:如果在15分钟内超过**85%**的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

  1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务;
  2. Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用);
  3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中。

Eureka和Nacos的区别

CAP

Eureka只支持AP;
Nacos支持CP和AP两种:如果注册Nacos的client节点注册时是ephemeral=true,即为临时节点,那么Nacos集群对这个client节点就是AP,反之不是临时节点,就是CP。

Nacos支持CP和AP两种:默认是AP,设置CP有两种方式:

  1. curl -X PUT ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’;
  2. 配置修改:
#false为永久实例,true表示临时实例开启,注册为临时实例spring.cloud.nacos.discovery.ephemeral=false
  • 1
  • 2
连接方式

Eureka使用定时发送和服务进行联系,属于短连接;
Nacos使用的是Netty和服务直接进行了连接,属于长连接。

操作实例方式

Eureka仅提供了实例列表、状态、错误信息,相比于Nacos过于简单;
Nacos提供了Nacos Console可视化控制界面,可以对实例列表进行监听,对实例进行上下线、配置权重等,并且config server对服务实例提供配置中心,且可以对配置进行CRUD、版本管理。

自我保护机制
  1. 保护方式不同
    Eureka保护方式:当在短时间内,统计续约失败的比例,如果达到一定阈值,则会出发自我保护机制,在该机制下,Eureka Server不会剔除任何的微服务,等到正常后,再退出自我保护机制。自我保护开关(eureka.server.enable-self-preservation: false);
    Nacos保护方式:当域名健康实例占总服务实例的比例小于阈值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然损失了一部分流量,但保证了集群的剩余健康实例能正常工作。
  2. 范围不同
    Nacos的阈值是针对某个具体Service的,而不是针对所有服务的。但Eureka的自我保护阈值是针对所有服务的。

Nacos配置中心

spring:  application:    name: nacos-config  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848      config:        server-addr: 127.0.0.1:8848        prefix: ${spring.application.name}        file-extension: yml        namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
DataId完整规则
${prefix}-${spring.profiles.active}.${file-extension}
  • 1
多个项目配置一个共享的Nacos配置怎么实现
config:  server-addr: 127.0.0.1:8848  prefix: ${spring.application.name}  file-extension: yml  shared-dataids: shareconfig1.yml,shareconfig2.yml  refreshable-dataids: shareconfig1.yml,shareconfig2.yml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
配置多个Nacos的config
config:  server-addr: 172.26.142.83:8850    namespace: unify-passport-ci    group: UP_GROUP    file-extension: yaml    extension-configs:      - data-id: unify-passport-data.yaml        group: UP_GROUP        refresh: true      - data-id: unify-passport-common.yaml        group: UP_GROUP        refresh: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
Nacos保存数据用的什么数据库,能不能改用MySQL

默认使用derby数据库,可以改为MySQL,步骤如下:

  1. 创建一个数据库,并将nacos/conf目录下的几个sql文件执行;
  2. 打开nacos/conf下的application.properties文件,其中有一个Config Module Related Configurations配置模块,按照提示配置即可;
    #*************** Config Module Related Configurations ***************#### If use MySQL as datasource:spring.datasource.platform=mysql### Count of DB:db.num=1### Connect URL of DB:db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user.0=nacosdb.password.0=nacos
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

Consul(了解)

用于实现分布式系统的服务发现与配置。
安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。


负载均衡

Ribbon是什么

Ribbon的主要功能是提供客户端的软件负载均衡算法;

Nginx和Ribbon的区别

Nginx是同时实现,是服务端的负载均衡,Ribbon是客户端的负载均衡。

Ribbon实现原理

Ribbon使用discoveryClient从注册中心读取目标服务信息,对同一接口请求进行计数,使用%取余算法获取目标服务集群索引,返回获取到的目标服务信息。

Hytrix 断路器

为什么需要断路器

当一个服务调用另外一个服务因为网络缘由或自身缘由出现问题,调用者就会等待被调用者的响应。当更多的服务请求到这些资源致使更多的请求等待,发生连锁效应(雪崩效应)

Hystrix有四种防雪崩方式:

服务降级:接口调用失败就调用本地的方法返回一个空
服务熔断:接口调用失败就会进入调用接口提早定义好的一个熔断的方法,返回错误信息
服务隔离:隔离服务之间相互影响
服务监控:在服务发生调用时,会将每秒请求数、成功请求数等运行指标记录下来。


什么是Feign

  • Feign 是一个声明web服务客户端,这使得编写web服务客户端更容易;
  • 他将需要调用的服务方法定义成抽象方法保存在本地就能够了,不需要构建Http请求了,直接调用接口就好了。

Feign的实现原理

通过基于面向接口的动态代理方式生成实现类,将请求调用委托到动态代理的实现类。

Ribbon和Feign的不同

调用方式不同:Ribbon必须构建Http请求,而后经过RestTemplate发送请求;
而Feign是在Ribbon的基础上进行了一次改进,采用接口的形式,将需要调用的服务方法定义成抽象方法保存在本地,直接调用接口就好了。


BUS 消息总线

  • Bus就像一个分布式执行器,用于扩展的Spring Boot应用程序的配置文件,但也能够用做应用程序之间的通讯通道。
  • Bus不能单独完成通讯,须要配合MQ支持。
  • Bus通常是配合Config作配置中心的。
  • Config实时刷新也必须采用Bus消息总线。

Stream

轻量级事件驱动微服务框架,可使用简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。


Config

什么是Config

为了方便对微服务各个环境下的配置进行集中式管理。Spring Cloud Config分为Config Server和Config Client两部分。Config Server负责保存配置文件,而且暴露Http API接口,Config Client经过调用Config Server的接口来读取配置文件。

是否可以实现实时刷新

可以,配合BUS


Security

作用

  • 对Zuul代理中的负载均衡从前端到后端服务中获取SSO令牌;
  • 资源服务器之间的中继令牌;
  • 使Feign客户端表现得像OAuth2RestTemplate(获取令牌等)的拦截器;
  • 在Zuul代理中配置下游身份验证。
  • 在Spring Boot和Spring Security OAuth2的基础上,能够快速建立实现常见模式的系统,如单点登陆,令牌中继和令牌交换。

Sleuth 链路追踪 & Zipkin 跟踪系统

Sleuth功能

  • 链路追踪
  • 性能分析
  • 数据分析优化链路
  • 可视化

Zipkin说明

分布式的跟踪系统。致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。
zipkin会根据调用关系通过Zipkin UI生成依赖关系图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。
Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。

Sleuth上报数据到Zipkin

spring.zipkin.enabled=true                     # 启用spring.zipkin.base-url=http://127.0.0.1:9411/  # sleuth默认为上报为false, 现设置上报zipkin的服务地址spring.sleuth.sampler.probability = 1          # span的采样率,默认为 0.1spring.sleuth.sampler.rate = 10000
  • 1
  • 2
  • 3
  • 4

Admin

Admin是什么

Admin是基于SpringCloud微服务的开发平台,其中包含具备用户管理、资源权限管理、网关API管理等多个模块。


喜欢本文的朋友不要忘记点一个免费的赞哦,你的赞将是我最大的动力。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发