Spring Cloud 有哪些注册中心?回答重点Eureka:是由 Netflix 开源的服务注册与发现框架,属于 Spring Cloud 生态的一部分。
特点:
采用 AP 原则,即强调系统的可用性和分区容忍性,允许短暂的一致性延迟。
易于与 Spring Cloud 集成,提供良好的服务发现能力。
支持 服务注册、心跳检测、服务下线 和 服务剔除。
自我保护机制,在网络出现短暂问题...
Seata 的事务回滚是怎么实现的?回答重点Seata 一共有四种事务模式,不同模式下回滚策略是不一样的。
AT 模式的回滚机制:在 AT 模式中,Seata 的回滚机制依赖于数据库中的 undo_log 表。每当执行数据库操作(如 INSERT、UPDATE、DELETE)时,Seata 的 RM 会在数据库中记录操作前的数据快照,并存储在 undo_log 中。这个过程在业务操作的本地事...
Eureka 的实现原理说一下?回答重点Eureka的实现原理,大概可以从这几个方面来看:
1)服务注册与服务发现:当一个服务实例启动之后,它会向 Eureka Server 发送服务注册请求,将自己的服务信息注册到注册中心中,Eureka Server 收到这些注册信息之后,会将其保存到内存中,提供 Rest 接口供其他服务查询。服务消费者可以通过查询服务实例列表来获取可用的服务作为服务实...
什么是 Eureka?回答重点Eureka 是一个 Spring Cloud Netflix 的一款老牌注册中心,设计用于实现云端部署微服务架构中的服务注册与发现功能。这个名字来源于古希腊语,意为“我找到了它”,灵感来源于阿基米德的著名发现故事。
在技术领域,特别是分布式系统中,Eureka 作为一个基于 RESTFul 的服务,主要职责包括:
服务注册:允许服务实例向 Eureka Se...
Spring Cloud 如何实现服务注册?回答重点SpringCloud 服务注册和发现需要依赖其它注册中心。
项目在启动时,会自动将本身服务的服务名、IP、端口信息通过引入的注册中心依赖注册到服务注册中心的服务端。
扩展知识说到服务注册,我们得先从注册中心讲起。
对于任何注册中心来说,都有客户端和服务端的概念
服务端需要单独部署,用来保存服务实例数据的
客户端就是用来跟服务端通信的SD...
Consul 是什么?回答重点Consul 是 HasiCorp 公司用 Golang 开发的一款开源的服务注册中心以及配置中心,提供了服务注册与发现、健康检查、KV 存储、多数据中心支持、DNS 和 HTTP API 接口等功能,而且提供了可视化控制台用于操作。
Consul 的优点有很多:
基于 Raft 协议,比较简洁
支持简单检查,同时支持 HTTP 和 DNS 协议
支持跨...
Nacos 中的 Namespace 是什么?回答重点Namespace 是 Nacos 提供的一个虚拟隔离区域,用于将不同的服务和配置进行逻辑分组。不同的 Namespace 之间是完全隔离的,即一个 Namespace 中的服务或配置不会影响到另一个 Namespace 中的内容。
作用:
环境隔离:可以用于将开发、测试、生产等不同环境的服务和配置进行隔离管理,防止不同环境的服务相互影...
Eureka、Zookeeper、Nacos、Consul 的区别?回答重点它们在一致性模型、核心功能与定位、使用场景等方面存在差异。
一致性模型:
AP 模型:Eureka
CP 模型:Zookeeper、Consul
AP 或 CP 模型:Nacos
核心功能与定位:
Eureka:服务注册与发现。它是 Spring Cloud Netflix 生态的一部分,与 Spring Clou...
为什么需要负载均衡?回答重点负载均衡主要用于将网络请求和流量分发到多台服务器或服务实例上,从而提高系统的高可用性和性能。它能够确保系统在高并发访问下保持稳定,避免单个服务器因负载过高而导致性能下降或宕机。
扩展知识负载均衡优势提升系统的高可用性:
负载均衡通过将请求分发到多个服务器实例,实现服务实例的冗余和容错。即使某台服务器发生故障,负载均衡器可以自动将流量转发到其他健康的实例上,确保服...
负载均衡的实现方式有哪些?回答重点负载均衡实现方式常见的有:软件负载均衡、硬件负载均衡、DNS负载均衡。
软件负载均衡:通过在普通服务器上安装负载均衡软件来实现流量分发。常见的软件负载均衡器包括 Nginx、HAProxy、Envoy、Apache Traffic Server 等
硬件负载均衡:使用专用的负载均衡设备(如 F5、A10 Networks)来实现流量分发。硬件设备通常具备高...
负载均衡算法有哪些?回答重点负载均衡有很多种策略,这里主要介绍的是一些核心的负载均衡算法,常见的大致如下:
1) 轮询算法(Round Robin):轮询应该是最简单的负载均衡算法了,其主要就是按照顺序将请求分配给后端服务器,不过一般适用于后端服务器的请求能力差不多的情况下,如果后端服务器之间处理请求的能力差得比较多的话,这种的缺点就非常明显了。
2)加权轮询算法(Weighted Roun...
HTTP 与 RPC 之间的区别?回答重点严格上讲,HTTP 和 RPC 不是一个层面的东西:
HTTP 是一种应用层的协议,主要强调的是网络通信;
RPC,其是一种分布式系统之间通信的方式,强调的是服务之间的远程调用。
有一些 RPC 框架底层使用的是 HTTP 协议实现通信,比如 gRPC,其底层使用的就是 HTTP/2, 然后还有 Dubbo,其现在也兼容 gRPC 了,...
Feign 和 OpenFeign 的区别?回答重点Feign 和 OpenFeign 都是用于简化服务之间的 HTTP 调用的工具,让我们可以更加方便地实现服务间的通信。
Feign 最初是由 Netflix 开发的一个声明式 REST 客户端框架,它的目标是让微服务之间的调用像调用本地方法一样容易。
如果我们想调用其它服务的接口,可以创建一个接口,然后通过注解声明所需要调用服务的方法和路...
Feign 是如何实现负载均衡的?回答重点Feign是一个声明式的Http客户端调用工具,它使得开发者可以更加方便地调用远程服务。
开发者只需要定义一个接口,并不需要写关于如何发送Http请求的代码。
Feign 本身并没有负载均衡的能力,它负载均衡的能力需要依赖其它的框架。
目前在 SpringCloud 体系下,主要有两个框架可以配合 Feign 实现负载均衡:
Ribbon
load...
为什么 Feign 第一次调用耗时很长?回答重点这个主要是由于 Feign 内置的负载均衡组件 Ribbon 的懒加载机制。
当第一次进行服务调用的时候,Feign 才会触发 Ribbon 的加载流程,然后从服务注册中心拉取服务列表,建立起对应的连接池,这个过程会增加第一次调用的耗时。
解决方案:
主动预热:只需要在应用启动的时候进行服务预热,先自动执行一次随便的调用,提前加载 Ribbo...
什么是 Feign?回答重点Feign 是一个声明式的Web服务客户端。
所谓的声明式就是指不需要编写复杂的关于 Http 请求的东西。
只需要声明一个一个接口,然后在这个接口上添加一些注解,这些注解包括了请求的方法(如GET和POST)、请求的URL等信息
Feign 在运行时通过注解和接口上定义的内容来动态构造和发送 Http 请求。
所以使用 Feign,开发者只需要定义服务接口并通过...
什么是熔断器?为什么需要熔断器?回答重点在微服务架构中,服务之间的调用关系会形成调用链路,链路中的任何一个服务都可能出现超时或者宕机的情况,而在微服务系统中,如果调用失败的话可能会引起大面积的服务瘫痪,即形成 “服务雪崩” 的情况,这样的话对于服务的影响是巨大的。
熔断器就是为了来解决这个问题,避免服务雪崩情况的发生。
熔断器的基本原理如下:
正常情况下,熔断器处于关闭状态,服务消费者正常...
什么是 Hystrix?回答重点Hystrix 是由 Netflix 开源的一个熔断器框架。它的核心思想是通过隔离、熔断、降级等机制,防止服务调用的雪崩效应,保证服务在出现异常时能够快速恢复。
核心功能与作用熔断机制:
定义:当下游服务在一段时间内持续失败达到设定阈值时,Hystrix 会触发熔断,从而阻断对该服务的调用,直接返回预设的降级响应或错误信息。这可以避免服务的不断重试,防止系统...
什么是服务雪崩?回答重点服务雪崩是指在微服务架构或分布式系统中,由于某个服务不可用或性能下降,导致依赖它的其他服务也出现连锁故障,最终使整个系统或大部分服务不可用的现象。
主要原因服务调用链复杂
在微服务架构中,各个服务之间存在大量的相互调用关系。一个服务的不可用或性能下降可能会导致依赖它的多个上游服务响应变慢,甚至出现请求堆积,从而影响到整个调用链。
示例:服务 A 调用服务 B,服务 ...
什么是服务降级?回答重点服务降级是一种在分布式系统和微服务架构中常用的容错机制,用于在系统压力过大或部分服务出现故障时,暂时减少或关闭某些不必要的功能,从而确保核心功能的正常运行,避免系统崩溃。通过降级,可以提高系统的容错性和可用性。
扩展知识服务降级的触发场景服务调用超时或失败:
当某个服务的调用时间超过了设定的阈值,或者服务多次调用失败时,可以触发降级机制,返回预设的降级响应,避免长时...
什么是服务熔断?回答重点服务熔断指的是当某个服务的调用失败率持续升高时,通过中断对该服务的请求,防止系统资源被不断消耗,进而保护整个系统不受影响。熔断机制的灵感来源于电路熔断器(保险丝),在出现异常时,通过快速切断服务调用,避免故障进一步扩散。
扩展知识服务熔断的流程当一个服务在一段时间内连续出现失败(如超时、请求错误等)并且失败率超过设定的阈值时,熔断器将切换到打开状态,暂时中断对该服务的...
什么是服务限流?回答重点服务限流是一种流量控制策略,它通过限制每秒请求的数量(QPS)、请求频率、并发数等,来保护服务的处理能力,防止系统因为流量过大而出现性能问题或资源耗尽。
服务限流可以认为是服务降级的一种,限流就是通过限制系统请求的输入和输出,从而实现对于系统的保护,这个和降级的概念很像,都是为了保证核心功能的正常运行。
限流是因为服务的吞吐量以及负载这些都是可以预估的,我们为了保证系...
Sentinel 是怎么实现限流的?回答重点首先需要定义具体需要限流的资源,然后指定一定的规则(基于QPS(每秒查询数)、线程数等维度),限制资源的访问频次。
然后根据一定的限流算法(固定窗口、滑动窗口、令牌桶和漏桶),对指定的资源进行访问的流量控制。
具体流程如下:
当一个请求进入系统时,Sentinel 会首先对请求进行统计(如当前的 QPS、并发数)
接着 Sentinel 检查配置...
Sentinel 与 Hystrix 的区别是什么?回答重点Hystrix 注重线程隔离以及服务保护,其主要是针对单个服务的服务调用,而 Sentinel 支持的粒度更小一点,其可以细化到服务的一个接口、一段代码等,并且其支持自定义流量控制规则,其可以针对整个系统的服务进行流量的监控和保护,两者的主要区别在于 Hystrix 是以服务保护为切入点,而 Sentinel 是以流量保护作为切入点...
Sentinel 是怎么实现集群限流的?回答重点Sentinel 通过选举一个集群限流服务端(Token Server),由服务端来集中管理限流策略,从而协调多个实例的流量控制,实现更精确的流量管理。
在 Sentinel 的集群限流模式中,所有实例会被划分为Token Server 和 Token Client 两种角色。
Token Server 负责集中管理限流的令牌,它会接收来自多...
什么是服务网格?回答重点服务网格是一个专门用于处理服务间通信的基础设施层,它通过部署在每个服务旁边的Sidecar 代理,拦截服务间的网络流量,实现诸如流量管理、故障恢复、服务发现等功能。常见的服务网格解决方案包括 Istio、Linkerd 等。
它的核心就是通过 Sidecar 模式,将复杂的网络通信逻辑从微服务中分离出来,应用开发者只需关注业务逻辑,无需处理服务间的通信管理。这种方式能...
什么是微服务网关?为什么需要服务网关?回答重点微服务网关是一个用于代理客户端请求并将其分发到后端微服务的服务器。它接收来自不同客户端的请求,根据配置的路由规则将请求转发到相应的服务,并可以对请求进行验证、转换、聚合等操作。
其可以实现服务调用入口与出口的统一管理,从而简化服务的调用和管理。
使用微服务网关主要有以下几个方面的好处:
1)提高性能:通过服务网关,由于其可以通过缓存一些静态资源的...
什么是灰度发布、金丝雀部署以及蓝绿部署?回答重点灰度发布、金丝雀部署和蓝绿部署是三种常见的软件发布策略,它们用于在系统升级时降低风险,确保在新版本上线过程中服务的稳定性和可控性。
灰度发布灰度发布是一种渐进式的发布方式,它通过将新版本逐步推送给部分用户进行试用,逐步扩大使用范围,直到新版本完全替换旧版本。其目的是通过小范围的用户测试,验证新版本的稳定性,降低发布新版本的风险。
实现方式:通...
1000 个任务,每个任务 0.1s,最大响应时间 1s,线程池参数怎么设置?回答重点
题目信息不足,那就顺着不足的信息直接回答,不要强加 CPU 核数、I/O密集、CPU 密集等概念限制自己的思考,在直接回答答案后再提出这些概念即可。(还有一种方式就是继续和面试官沟通追问,具象化题目再回答)
分析题目的意思:每个任务需要花费的时间是 0.1s,线程池要在 1s 内处理完这 10...
有一张表里面有三个字段,分别是(id,开始时间,结束时间),表中数据量为 5000W,如何统计流量最大的时候有多少条数据?回答重点
题干没有告知峰值的统计单位,可以直接询问面试官,原理都是一样的。本答案以秒作为单位,统计每秒的最大值。
我们要统计每秒钟内的最大并发流量,也就是在某一秒内有多少个事件处于活动状态(即时间段的重叠),可以使用差分数组和扫描线思想来实现。
我们可以通过将每个事件活...