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