微服务

1: rpc 和 http 的区别

下面是 RPC 和 HTTP 之间的一些区别:

  1. 目的:RPC 的主要目的是在远程计算机之间进行通信,而 HTTP 的主要目的是在客户端和服务器之间传输数据。

  2. 通信方式:RPC 通常使用二进制协议进行通信,而 HTTP 使用文本协议进行通信。

  3. 响应速度:由于 RPC 使用二进制协议,所以它通常比 HTTP 更快。这是因为二进制协议传输的数据量更小,传输速度更快。

  4. 语言支持:RPC 通常支持多种编程语言,而 HTTP 的使用不受编程语言的限制。

  5. 安全性:RPC 和 HTTP 都支持安全传输协议,如 SSL 和 TLS。

总之,RPC 适合在远程计算机之间进行通信和交互,而 HTTP 更适合在客户端和服务器之间传输数据。

2:dubbo 和 springcloud feign区别

Dubbo 是一个高性能、轻量级的远程调用框架,它是阿里巴巴开源的项目,支持高并发和负载均衡,以及服务治理和监控等功能。Dubbo 适合于在企业内部进行微服务架构的构建和管理。

Spring Cloud Feign 是 Spring Cloud 中的一个轻量级的 HTTP 客户端框架,它可以帮助开发者更方便地调用 RESTful API。Feign 提供了声明式的方式来定义 REST 接口,同时也支持负载均衡和服务发现等功能。Feign 适合于基于 Spring Cloud 的微服务应用开发。

Dubbo 和 Spring Cloud Feign 都是微服务架构中常用的远程调用框架。

Dubbo 是一个高性能、轻量级的远程调用框架,它是阿里巴巴开源的项目,支持高并发和负载均衡,以及服务治理和监控等功能。Dubbo 适合于在企业内部进行微服务架构的构建和管理。

Spring Cloud Feign 是 Spring Cloud 中的一个轻量级的 HTTP 客户端框架,它可以帮助开发者更方便地调用 RESTful API。Feign 提供了声明式的方式来定义 REST 接口,同时也支持负载均衡和服务发现等功能。Feign 适合于基于 Spring Cloud 的微服务应用开发。

下面是 Dubbo 和 Spring Cloud Feign 之间的一些区别:

  1. 通信协议:Dubbo 默认使用dubbo 传输协议,而 Spring Cloud Feign 默认使用 HTTP 传输协议。

  2. 通信方式:Dubbo 支持多种通信方式,包括 RPC、HTTP 和 Hessian 等,而 Spring Cloud Feign 只支持 HTTP 协议。

  3. 服务注册和发现:Dubbo 使用 ZooKeeper、Consul 等注册中心来管理服务,而 Spring Cloud Feign 使用 Eureka 或 Consul 等服务注册和发现组件。

  4. 负载均衡:Dubbo 支持多种负载均衡策略,包括随机、轮询和一致性哈希等,而 Spring Cloud Feign 只支持 Ribbon 负载均衡。

3:什么是springcloud springcloud 和 springboot的关系是什么

Spring Cloud 是基于 Spring Boot 的分布式系统开发工具包,它提供了一系列开发分布式系统的工具,包括服务注册与发现、配置中心、负载均衡、断路器、消息总线等功能。Spring Cloud 可以帮助开发者快速构建分布式应用程序,并且可以与多种开源框架(如 Netflix OSS)集成,从而实现微服务架构的开发。

Spring Cloud 是基于 Spring Boot 的分布式系统开发工具包,它提供了一系列开发分布式系统的工具,而 Spring Boot 是构建在 Spring Framework 之上的用于构建应用程序的框架。在使用 Spring Cloud 构建分布式应用程序时,必须先使用 Spring Boot 构建应用程序。

4:微服务的优缺点

优点:

1.部署简单

2.易于扩张

3.技术异构性

4.降低耦合度

缺点:

系统复杂度增强

5:你们公司里面使用的springboot springcloud springcloudalibaba 的版本是什么

2.1 G 2.1

2.2 H 2.2

6:什么叫做服务治理,用什么组件实现服务治理的

服务治理是指对分布式系统中的服务进行管理和维护的一种方法,其目的是提供一种能够实现服务发现、负载均衡、熔断降级、服务监控等功能的解决方案,从而保证分布式系统的高可用性、可扩展性和可维护性。

常用的服务治理组件有:

  1. Eureka:Netflix 开源的一款服务治理组件,支持服务注册与发现、负载均衡、服务熔断、健康检查等功能。

  2. Consul:HashiCorp 开源的一款服务发现和配置工具,支持服务注册与发现、健康检查、KV 存储等功能。

  3. ZooKeeper:Apache 开源的一款分布式协调服务框架,支持分布式锁、命名服务、配置管理等功能。

  4. Nacos:阿里巴巴开源的一款服务发现和配置中心,支持服务注册与发现、配置管理、流量管理等功能。

7:请说一下注册中心的工作原理

注册中心是用于服务注册和发现的中心化组件,通过维护服务提供者的注册表信息和服务消费者的订阅信息,实现服务发现和负载均衡的功能。服务提供者在启动时向注册中心注册自己的服务信息,服务消费者在启动时向注册中心订阅所需的服务信息,注册中心返回符合订阅条件的服务提供者的信息列表给服务消费者。在服务调用过程中,注册中心定期检查服务提供者的可用性,并根据负载均衡算法将请求转发到合适的服务提供者。

8: 解释一下什么叫做cap定律 他指导了什么

CAP 定律是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)三者不可同时满足,最多只能同时满足其中两项。这是因为在分布式系统中,节点之间的通信会存在网络分区、延迟等问题,这些问题可能导致节点之间的数据不一致,因此需要权衡三者之间的关系。

9:zookeeper 和 eureka 作为注册中心的区别

  1. 一致性算法不同:Zookeeper使用了ZAB(Zookeeper Atomic Broadcast)协议,Eureka使用了AP(Availability and Partition Tolerance)模型。

  2. 数据同步方式不同:Zookeeper采用主从节点数据同步,Eureka采用对等节点数据同步。

  3. 部署方式不同:Zookeeper需要在每个服务节点上安装Zookeeper客户端,而Eureka不需要在每个服务节点上安装Eureka客户端。

  4. 功能差异:Zookeeper可以提供分布式锁、分布式协调等功能,而Eureka则专注于服务注册和发现功能。

  5. 性能差异:Zookeeper在高并发、大规模分布式场景下表现更优,而Eureka适用于小型分布式系统。

10:zookeeper 和 eureka 和 nacos作为注册中心的区别

Zookeeper、Eureka和Nacos都是流行的开源服务注册中心。它们有以下区别:

  1. 一致性算法不同:Zookeeper使用了ZAB(Zookeeper Atomic Broadcast)协议,Eureka使用了AP(Availability and Partition Tolerance)模型,Nacos使用了Raft算法。

  2. 数据同步方式不同:Zookeeper采用主从节点数据同步,Eureka采用对等节点数据同步,Nacos采用对等节点数据同步,同时支持多数据中心。

  3. 功能差异:Zookeeper可以提供分布式锁、分布式协调等功能;Eureka专注于服务注册和发现功能,并提供了负载均衡和故障转移的能力;Nacos除了服务注册和发现功能外,还支持配置管理和动态DNS服务。

  4. 部署方式不同:Zookeeper需要在每个服务节点上安装Zookeeper客户端,Eureka不需要在每个服务节点上安装Eureka客户端,Nacos需要在每个服务节点上安装Nacos客户端。

  5. 性能差异:Zookeeper在高并发、大规模分布式场景下表现更优,Eureka适用于小型分布式系统,Nacos具有高性能和可扩展性。

11:什么是ribbon,ribbon 内置的负载均衡规则有哪些,我们怎样自定义一个ribbon的负载均衡规则

Ribbon是Netflix开源的一款客户端负载均衡器,主要用于在服务消费者中实现客户端负载均衡。

  1. RoundRobinRule:轮询方式,按顺序依次选择可用实例。

  2. RandomRule:随机方式,从可用实例中随机选择一个。

  3. WeightedResponseTimeRule:响应时间权重方式,根据平均响应时间和权重计算得出每个实例的权重,再按权重从可用实例中选择一个。

  4. RetryRule:重试方式,先按照RoundRobinRule选择一个实例,如果该实例请求失败,则在指定时间内重试,直到成功。

  5. BestAvailableRule:最佳可用实例方式,先选择可用实例中的一个最佳实例(即并发量最小的实例),如果该实例请求失败,则重试其他可用实例。

如果需要自定义一个Ribbon的负载均衡规则,可以继承IRule接口并实现自定义规则,然后将该规则注册到Ribbon中。

12:说出ribbon 配置中 以下配置的意思?

  1. ribbon.eureka.enabled:是否开启Eureka Server,true表示开启,false表示关闭。

  2. ribbon.NFLoadBalancerRuleClassName:指定Ribbon负载均衡算法的类名,默认为com.netflix.loadbalancer.RoundRobinRule,可以通过指定不同的类名实现不同的负载均衡算法。

  3. ribbon.ServerListRefreshInterval:服务实例列表刷新的时间间隔,单位为毫秒,默认为30秒。

  4. ribbon.ReadTimeout:请求超时时间,单位为毫秒,默认为1秒。

  5. ribbon.ConnectTimeout:连接超时时间,单位为毫秒,默认为1秒。

  6. ribbon.MaxAutoRetries:最大重试次数,默认为0,表示不重试。

  7. ribbon.MaxAutoRetriesNextServer:切换到下一个服务实例的最大重试次数,默认为1。

  8. ribbon.OkToRetryOnAllOperations:是否在所有操作上都开启重试机制,true表示开启,false表示关闭,默认为false。

13:使用ribbon 调用远程服务的接口 怎样防止接口被重复调用

  1. 重试机制:Ribbon内置了重试机制,可以通过配置项来开启或关闭。当发生网络异常或超时等问题时,Ribbon会自动重试请求,直到达到最大重试次数或请求成功为止。可以通过配置ribbon.MaxAutoRetries和ribbon.MaxAutoRetriesNextServer来设置最大重试次数。

  2. 幂等接口设计:将接口设计成幂等的可以避免接口被重复调用所带来的影响。幂等的接口是指无论调用多少次,结果都是相同的,不会对系统造成影响。例如,查询操作就是幂等的,因为多次查询的结果应该是相同的。而添加操作则不是幂等的,因为多次添加会导致系统出现重复数据。

  3. 请求去重:可以通过在客户端进行请求去重来避免接口被重复调用。在发起一个请求前,客户端可以先检查请求的参数是否与之前的请求相同,如果相同,则直接返回之前请求的结果,避免重复调用。可以使用缓存、数据库或者分布式锁等方式来实现请求去重。

  4. 限流措施:可以通过限流来避免接口被过度调用。可以使用限流算法,如令牌桶、漏桶等,来限制接口的调用频率。当接口的调用次数达到限流阈值时,可以直接返回错误码或者等待一定时间后再进行调用。

14:ribbon 的工作原理是什么

工作原理如下:

  1. 获取可用的服务列表:Ribbon通过服务发现框架获取可用的服务列表,例如,通过Eureka可以获取注册在Eureka上的所有可用服务。

  2. 选择一台服务进行请求:Ribbon维护了一个可用服务列表,并根据负载均衡算法选择一台服务进行请求。Ribbon内置了多种负载均衡算法,如轮询、随机、加权轮询、加权随机等。

  3. 发起请求:当选择一台服务后,Ribbon会向该服务发起请求。如果请求失败,Ribbon会尝试选择另一台服务进行请求,直到请求成功或超过最大重试次数。

  4. 完成请求并返回结果:服务端处理完请求后,将结果返回给Ribbon,Ribbon再将结果返回给客户端。

15:什么是客户端负载均衡 什么是 服务器端负载均衡

客户端负载均衡是指在客户端进行负载均衡的方式。客户端通过从注册中心或服务提供者获取可用服务列表,并根据一定的负载均衡算法选择一台服务进行请求。客户端负载均衡的优点是可以减轻服务端的负载,避免单点故障,并可以灵活地选择不同的负载均衡算法。常见的客户端负载均衡框架有Ribbon、Feign等。

服务器端负载均衡是指在服务器端进行负载均衡的方式。一般来说,负载均衡器会将请求转发给多台服务提供者,根据一定的负载均衡算法选择一台服务提供者进行请求。服务器端负载均衡的优点是可以集中管理和调度服务提供者,并可以通过负载均衡器实现高可用和负载均衡等功能。常见的服务器端负载均衡软件有Nginx、HAProxy等。

16:如果注册中心挂了,服务之间还能相互调用吗

16.1:如果本地缓存了地址列表 那么还能相互调用

17:Base 理论 在cap 的基础上 完全指导分布式事务

CAP理论和BASE理论是两个不同的理论框架,CAP理论指导了分布式系统的可用性、一致性和分区容错性问题,而BASE理论则是针对分布式系统的数据一致性问题提出的一种解决方案。CAP理论和BASE理论相辅相成,可以共同指导分布式系统的设计和实现。

18:sentinel 中 抛出和容错相关的异常 怎么处理的

 

19:hystrix 中断路器的3个状态是什么

关闭:一直走正常逻辑

打开:达到降级了就会把断路器打开 断路器一打开以后每次都走备用逻辑

半开:当断路器达到半开状态 再来一个请求还是会发给正常的逻辑,如果这一次还是抛异常或者还是超时 那么断路器马上又打开,否则就会断路器关闭

20:什么是feign feign 的工作原理是

总的来讲:feign 是一个伪客户端 让调用远程服务跟调用本地服务一样,他集成了rabbon + UrlConnnetion

21: 什么叫做服务雪崩

服务雪崩指的是在一个分布式系统中,由于服务之间的依赖关系和相互作用,当某个服务出现故障或者异常情况时,导致依赖于该服务的其他服务也发生故障,这种现象被称为服务雪崩。服务雪崩通常是由于多个服务之间存在相互依赖和相互作用,当一个服务出现故障时,其他服务无法正常工作,从而导致整个系统的崩溃。为了避免服务雪崩,分布式系统需要采取一系列的容错和备份措施,例如限流、熔断、降级等,以保证系统的稳定性和可靠性。

22:常见的容错策略有哪些

  1. 限流:限制服务的请求量或者并发量,避免系统因为请求过多而崩溃。

  2. 熔断:当服务出现异常或者响应时间过长时,关闭服务,避免请求继续发送,以免造成雪崩效应。

  3. 降级:当系统出现异常或者负载过高时,降低服务的质量或者功能,保证系统能够继续运行。

  4. 超时控制:限制服务的响应时间,避免因为服务响应时间过长而阻塞请求。

  5. 隔离

23:什么叫做 QPS RT

QPS和RT是常见的性能指标,用于评估系统的性能和稳定性。

QPS(Queries Per Second)指的是每秒钟处理的请求数量,通常用于评估系统的吞吐量和处理能力。例如,一个系统的QPS为1000,表示该系统能够处理每秒1000个请求。

RT(Response Time)指的是请求响应的时间,通常用于评估系统的性能和稳定性。例如,一个系统的平均响应时间为100ms,表示该系统能够在100ms内响应一个请求。

23.1:什么叫做峰值qps,峰值qps的计算公式是什么,横向扩展需要多少台机器的计算公式是

峰值QPS是指系统在某个时间段内能够达到的最高请求数量,通常用于评估系统的最大处理能力和扩展性。

峰值QPS的计算公式为:

峰值QPS = (每秒钟请求的数量 ÷ 平均请求处理时间) × 峰值倍数

其中,峰值倍数是指在正常业务量的基础上,预留一定的缓冲区,以防止突发流量导致系统崩溃。通常峰值倍数会根据系统的稳定性和扩展性需求进行调整,一般情况下会设置为1.5 ~ 2倍。

横向扩展需要多少台机器的计算公式为:

扩展后QPS = 单台机器QPS × 机器数量

23.2:常见服务器性能指标有哪些

QPS、TPS、RT、Load、PV、UV、带宽

24:springcloud中的hystrix的熔断和降级的区别和作用

熔段:一次抛出异常或者超时了 会调用备用逻辑

降级: 在n次的超时的比例 或者 异常的比例达到一个阈值 就会降级 在降级的时间窗口内 会一直调用备用方法 不会走正常的逻辑

25:sentinel 中 抛出和容错相关的异常 怎么处理的

  1. 定义异常处理函数:可以通过定义异常处理函数来处理抛出的异常。在Sentinel中,可以通过定义BlockException类的子类来处理特定类型的异常。当一个资源被限流或者降级时,Sentinel会抛出BlockException异常,开发者可以通过定义BlockException子类来处理这些异常。例如,可以在异常处理函数中记录日志、发送告警或者返回特定的错误码等。

  2. 配置fallback函数:fallback函数是指当资源被限流或者降级时,返回的默认结果或者执行的默认操作。在Sentinel中,可以通过配置@SentinelResource注解中的fallback属性来设置fallback函数。当一个资源被限流或者降级时,Sentinel会调用fallback函数来返回默认结果或者执行默认操作。fallback函数可以在应用程序中提供自定义的实现,也可以使用Sentinel提供的默认实现。

26:hystrix 中断路器的3个状态是什么

  1. 关闭状态(Closed):初始状态为关闭状态,此时服务正常运行,请求可以正常处理。在这个状态下,Hystrix不会对请求进行限流或者降级。

  2. 开启状态(Open):当服务出现故障时,断路器会从关闭状态转变为开启状态,此时断路器会拒绝所有请求,直接执行fallback逻辑。在这个状态下,Hystrix会限制请求流量,防止服务雪崩。

  3. 半开状态(Half-Open):在一定时间后,断路器会从开启状态转变为半开状态,此时断路器会尝试处理一些请求。如果请求处理成功,则断路器会回到关闭状态;如果处理失败,则断路器会重新回到开启状态。在这个状态下,Hystrix会逐渐恢复请求流量,以检查服务是否已经恢复正常。

27:什么是api 网关 主要起什么作用

API网关是一个位于应用程序和后端服务之间的中间层,用于处理和管理客户端和后端服务之间的所有请求和响应。主要作用如下:

  1. 请求路由:API网关可以根据请求的URI、方法、参数等信息,将请求路由到后端服务中的特定服务或实例上。

  2. 负载均衡:API网关可以在多个后端服务之间进行负载均衡,以提高系统的可用性和可扩展性。

  3. 认证授权:API网关可以对客户端进行认证和授权,以保护后端服务的安全性。例如,可以通过API网关实现OAuth2认证和JWT鉴权。

  4. 缓存管理:API网关可以对请求结果进行缓存,以减少后端服务的负载和提高响应速度。

  5. 日志记录:API网关可以记录所有请求和响应的日志,以便于排查问题和分析系统性能。

  6. API文档管理:API网关可以提供API文档和测试工具,方便开发者进行接口调试和测试。

28:你们项目的入口是什么

nginx(静态web服务器)、后端入口、gateway

29:springcloud gateway 中以下配置的意义是什么

id表示路由规则的名称,uri表示要路由到的服务实例的地址,predicates表示要匹配的断言列表。

30: 什么是springcloud gateway 的断言 怎样自定义一个断言

在Spring Cloud Gateway中,断言(Predicate)是用于匹配请求的一种方式。每个断言都会在处理请求之前进行匹配,如果请求与断言匹配成功,则会将请求路由到相应的服务实例中。

31:springcloud gateway 中 的过滤器有几种类型

  1. 全局过滤器

全局过滤器是指应用于所有路由规则的过滤器。在Spring Cloud Gateway中,全局过滤器通过实现GlobalFilter接口来定义,它们会在所有路由规则中的所有过滤器之前执行。全局过滤器可以用于实现一些通用的功能,例如鉴权、请求日志记录等。

  1. 局部过滤器

局部过滤器是指应用于特定路由规则的过滤器。在Spring Cloud Gateway中,局部过滤器通过在路由规则中配置过滤器来定义。局部过滤器只会在特定的路由规则中执行。局部过滤器可以用于实现一些特定的功能,例如请求头修改、请求参数添加等。

32:怎样自定义一个 springcloud gateway 的全局过滤器

实现GlobalFilter接口或继AbstractGatewayFilterFactory类

33: zuul 的过滤器有几种类型

Zuul的过滤器可以分为四种类型:

  1. 前置过滤器(Pre Filters):在请求被路由到目标服务之前执行,通常用于实现身份验证、参数校验、请求限流等功能。

  2. 路由过滤器(Route Filters):用于将请求转发到目标服务,可以在此处实现负载均衡、服务发现等功能。

  3. 后置过滤器(Post Filters):在请求被路由到目标服务后执行,通常用于实现响应头处理、响应内容转换、日志记录等功能。

  4. 错误过滤器(Error Filters):在请求处理过程中发生错误时执行,通常用于实现异常处理、错误日志记录等功能。

34:zuul 过滤器执行的顺序

在每个阶段内,不同的过滤器按照filterOrder()方法返回的顺序执行,filterOrder()返回的值越小,优先级越高。

35:什么叫做增量部署 什么叫做全量部署

36:怎样让客户没感觉到就升级了

蓝绿部署、滚动部署、灰度部署

37:常见限流算法

1.固定窗口算法

该算法是最简单的限流算法之一。它将时间划分为固定大小的时间窗口,并在每个时间窗口内限制请求的数量。例如,将1秒钟分成10个时间窗口,每个时间窗口限制请求的数量为10,则每秒钟最多只能处理100个请求。

2.滑动窗口算法

与固定窗口算法类似,滑动窗口算法也将时间划分为固定大小的时间窗口。不同之处在于,滑动窗口算法使用一个大小固定的窗口来记录最近一段时间的请求情况,并根据窗口中的请求数量来决定是否进行限流。

3.令牌桶算法

令牌桶算法是一个比较常用的限流算法,它会按照一定的速率往令牌桶中放入令牌,每次请求需要先从令牌桶中获取令牌,如果获取不到令牌则表示达到了限流阈值。

4.漏桶算法

漏桶算法也是一种比较常用的限流算法。它将请求看作水,将限流看作一个固定容量的桶,请求会以恒定的速率流入漏桶中,如果桶满了则会拒绝请求,否则会根据桶中剩余容量来决定是否通过请求。

5.计数器算法

计数器算法是一种比较简单的限流算法,它将请求计数器与限流阈值进行比较,如果请求计数器达到了限流阈值则拒绝请求,否则通过请求并将计数器+1。需要注意的是,计数器算法通常用于限制总请求数量,而不是限制每秒请求数量。

38:什么叫做增量部署 什么叫做全量部署

增量部署是指只部署新的或修改过的部分代码,而不是全部代码。通常,增量部署可以将新版本的代码与现有的代码进行比较,只部署那些被修改或新增的部分,从而减少了部署所需的时间和风险。增量部署适用于大型系统或需要频繁部署的场景。(灰度部署)

全量部署是指将所有代码和资源全部部署。通常情况下,全量部署需要更多的时间和资源,因为需要复制和传输所有的代码和资源。但是,全量部署可以确保新的版本与旧版本之间的兼容性,因此在某些场景下,如小型系统或对稳定性要求较高的场景中使用。(蓝绿部署)

posted @ 2023-03-14 08:14  Peter_tang  阅读(115)  评论(0)    收藏  举报