Eureka 的实现原理说一下?回答重点Eureka的实现原理,大概可以从这几个方面来看:
1)服务注册与服务发现:当一个服务实例启动之后,它会向 Eureka Server 发送服务注册请求,将自己的服务信息注册到注册中心中,Eureka Server 收到这些注册信息之后,会将其保存到内存中,提供 Rest 接口供其他服务查询。服务消费者可以通过查询服务实例列表来获取可用的服务作为服务实...
Consul 是什么?回答重点Consul 是 HasiCorp 公司用 Golang 开发的一款开源的服务注册中心以及配置中心,提供了服务注册与发现、健康检查、KV 存储、多数据中心支持、DNS 和 HTTP API 接口等功能,而且提供了可视化控制台用于操作。
Consul 的优点有很多:
基于 Raft 协议,比较简洁
支持简单检查,同时支持 HTTP 和 DNS 协议
支持跨...
Spring Cloud 如何实现服务注册?回答重点SpringCloud 服务注册和发现需要依赖其它注册中心。
项目在启动时,会自动将本身服务的服务名、IP、端口信息通过引入的注册中心依赖注册到服务注册中心的服务端。
扩展知识说到服务注册,我们得先从注册中心讲起。
对于任何注册中心来说,都有客户端和服务端的概念
服务端需要单独部署,用来保存服务实例数据的
客户端就是用来跟服务端通信的SD...
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 是如何实现负载均衡的?回答重点Feign是一个声明式的Http客户端调用工具,它使得开发者可以更加方便地调用远程服务。
开发者只需要定义一个接口,并不需要写关于如何发送Http请求的代码。
Feign 本身并没有负载均衡的能力,它负载均衡的能力需要依赖其它的框架。
目前在 SpringCloud 体系下,主要有两个框架可以配合 Feign 实现负载均衡:
Ribbon
load...
Feign 和 OpenFeign 的区别?回答重点Feign 和 OpenFeign 都是用于简化服务之间的 HTTP 调用的工具,让我们可以更加方便地实现服务间的通信。
Feign 最初是由 Netflix 开发的一个声明式 REST 客户端框架,它的目标是让微服务之间的调用像调用本地方法一样容易。
如果我们想调用其它服务的接口,可以创建一个接口,然后通过注解声明所需要调用服务的方法和路...
为什么 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 是以流量保护作为切入点...
什么是服务网格?回答重点服务网格是一个专门用于处理服务间通信的基础设施层,它通过部署在每个服务旁边的Sidecar 代理,拦截服务间的网络流量,实现诸如流量管理、故障恢复、服务发现等功能。常见的服务网格解决方案包括 Istio、Linkerd 等。
它的核心就是通过 Sidecar 模式,将复杂的网络通信逻辑从微服务中分离出来,应用开发者只需关注业务逻辑,无需处理服务间的通信管理。这种方式能...
Sentinel 是怎么实现集群限流的?回答重点Sentinel 通过选举一个集群限流服务端(Token Server),由服务端来集中管理限流策略,从而协调多个实例的流量控制,实现更精确的流量管理。
在 Sentinel 的集群限流模式中,所有实例会被划分为Token Server 和 Token Client 两种角色。
Token Server 负责集中管理限流的令牌,它会接收来自多...
什么是灰度发布、金丝雀部署以及蓝绿部署?回答重点灰度发布、金丝雀部署和蓝绿部署是三种常见的软件发布策略,它们用于在系统升级时降低风险,确保在新版本上线过程中服务的稳定性和可控性。
灰度发布灰度发布是一种渐进式的发布方式,它通过将新版本逐步推送给部分用户进行试用,逐步扩大使用范围,直到新版本完全替换旧版本。其目的是通过小范围的用户测试,验证新版本的稳定性,降低发布新版本的风险。
实现方式:通...
什么是微服务网关?为什么需要服务网关?回答重点微服务网关是一个用于代理客户端请求并将其分发到后端微服务的服务器。它接收来自不同客户端的请求,根据配置的路由规则将请求转发到相应的服务,并可以对请求进行验证、转换、聚合等操作。
其可以实现服务调用入口与出口的统一管理,从而简化服务的调用和管理。
使用微服务网关主要有以下几个方面的好处:
1)提高性能:通过服务网关,由于其可以通过缓存一些静态资源的...
让你设计一个 RPC 框架,怎么设计?先直接跟面试官说下 RPC 框架基础的核心点:
其实就这么几点:
1)动态代理(屏蔽底层调用细节)2)序列化(网络数据传输需要扁平的数据)3)协议(规定协议,才能识别数据)4)网络传输(I/O模型相关内容,一般用 Netty 作为底层通信框架即可)
注意,上面加粗的其实二字,一定要说,要注意语气,要显得你游刃有余,低调奢华。
这属于 RPC...
让你设计一个消息队列,怎么设计?设计类题目要先从大局上讲出需要设计的东西的重点,然后再等待面试官的继续提问,深挖。
回答:
首先我们需要明确地提出消息中间件的几个重要角色,分别是生产者、消费者、Broker、注册中心。
简述下消息中间件数据流转过程,无非就是生产者生成消息,发送至 Broker,Broker 可以暂缓消息,然后消费者再从 Broker 获取消息,用于消费。
而注册中心用于服务...
让你设计一个短链系统,怎么设计?先说一下回答思路:
1)简单描述下短链原理
2)后端设计
3)补充跳转设计
一个小小短链其实融合了很多知识点,能较为全面的考察一个候选人的综合实力。
原理在浏览器输入短链后,请求打到短链服务,短链服务会根据 url 找到对应的长链重定向到长链地址,此时浏览器就会跳转网页定位到真正的地址。
所以本质原理就是短链服务器根据 url 定位到真正地址,然后通过重定向实...
让你实现一个订单超时取消功能,怎么设计?一般会通过定时任务或者消息队列的延迟消息来实现订单超时取消功能。
定时任务定时任务的逻辑就是扫描已创建未支付的订单,判断订单的创建时间与当前时间的差值,如果已经超过了预设的超时时间,比如 10 分钟,那么就将订单状态更新为已取消。
比如可以每 1 分钟扫描一次表,直接根据当前时间和超时时间得到筛选的时间,比如当前是 14:00,那么 13:50 分之前...
商家想要知道自己店铺卖的最好的 top 50 商品,如何实现这个功能?根据问题推断这个排行榜是一个动态的排行榜,店铺内商品一直在售卖,因此排行榜也会一直在变,所以如果利用数据库来排行计算效率会非常低,总不能每卖一单就利用数据库排序计算得到排行榜吧?
所以排除数据库这个方案。
应对数据库效率差的情况,我们常用的替代方案就是缓存,而 Redis 内有个 zset 可以实现排行榜的功能。
每个商家...