Redis 主从复制的常见拓扑结构有哪些?回答重点Redis 主从的几种常见拓扑结构如下(忽略哨兵):
1)一主多从:
这是最基本的拓扑结构,包含一个主节点和多个从节点。所有写操作都在主节点上执行,而读操作可以在从节点上进行,以提高读取速度和负载均衡。
2)树状主从结构(级联):
从节点也可以作为其他从节点的主节点。这样形成了一个层次结构,主节点负责写操作,而从节点负责读操作,并将...
如何在 Redis 中实现队列和栈数据结构?回答重点可以通过 List 类型 来实现 队列 和 栈 :
实现队列(FIFO):
队列是一种 先进先出(FIFO) 的数据结构。在 Redis 中,可以使用 LPUSH 和 RPOP 命令组合来实现队列。
LPUSH 向列表的左侧推入元素,而 RPOP 从列表的右侧弹出元素,这样可以保证最先进入的元素最先被弹出。
实现栈(LIFO):
栈是...
Redis 中的 Ziplist 和 Quicklist 数据结构的特点是什么?回答重点Ziplist:
简单、紧凑、连续存储,适用于小数据量场景,但对大量数据或频繁的修改操作不太友好。
适合小数据量场景,例如短列表、小哈希表等,因为它的内存紧凑,可以大幅减少内存使用
Quicklist:
通过将链表和 Ziplist 结合,既实现了链表的灵活操作,又能节省内存,在 Redis 3.2...
Redis 复制延迟的常见原因有哪些?回答重点
Redis 的复制延迟是指从节点同步主节点数据时可能出现时间延迟。在读写分离场景,这个延迟会导致明明写入了数据,但是去从节点查的时候没查到。
可能原因如下:
1)网络原因
可能是带宽不足,或者网络抖动导致同步的延迟。
不过一般内网情况下不会产生这个问题。
2)主节点负载过高
主节点接收到大量的写操作,在处理客户端请求的同时,还需向从节点发送复...
Redis 事务与关系型数据库事务的主要区别是什么?回答重点Redis 的事务跟严格意义上的关系型数据库事务不一样,先复习下数据库事务 ACID 的定义:
原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,且可以回滚到事务开始前的状态。
一致性(Consistency):事务执行前后,数据库必须保持一致的状态。
隔离性(Isolation):事务的执行是隔离的,事务...
Redis Cluster 模式与 Sentinel 模式的区别是什么?回答重点1)Redis Cluster 是 Redis 集群,提供自动分片功能,将数据自动分布在多个节点上,支持自动故障转移。如果一个节点失败,集群会自动重新配置和平衡,不需要外部介入,因为它内置了哨兵逻辑。
2)Sentinel 是哨兵,主要用于管理多个 Redis 服务器实例来提高数据的高可用性。当主节点宕机,哨兵会...
Redis 的 ListPack 数据结构是什么?回答重点ListPack 是 Redis 内部的一种数据结构,用于高效存储短小的字符串或整数集合。它是一种紧凑型的序列化数据结构,旨在减少内存占用和提升性能。为了尽可能紧凑地存储数据,因此它没有使用 Redis 常见的对象模型,而是直接以字节序列的形式存储数据。
ListPack 是 Redis 6.0 引入的新数据类型,在 List、Has...
Redis 中的内存碎片化是什么?如何进行优化?回答重点Redis 的内存碎片化是指内存使用中出现小块空间被闲置,无法被有效利用的现象。
Redis 默认使用 jemalloc 作为内存分配器,它是按照固定大小来分配内存的,比如实际需要 8kb 的内存,分配器给了 12kb。
那么多余的 4kb 其实就无法被利用上了,它就叫内存碎片。
且频繁创建和删除大量数据的时候,会导致内存块大小和位置...
在 Redis 集群中,如何根据键定位到对应的节点?回答重点Redis 集群将数据分布到 16384 个哈希槽(slots) 中,每个键通过哈希函数计算出一个槽位编号,然后根据槽位编号定位到具体的节点,具体是使用 CRC16 哈希函数计算键的哈希值,然后对 16384 取模,得到哈希槽编号(范围是 0 到 16383)。
扩展知识Redis 集群节点的通信Redis 集群节点在一开始的时候,...
Redis 的虚拟内存(VM)机制是什么?回答重点Redis 的 VM 机制(Virtual Memory)曾经是 Redis 早期版本(2.0 之前)的一部分,用于将部分数据存储在磁盘上,以扩展内存数据库的容量。当内存不足时,Redis 会将冷数据(不经常访问的数据)移到磁盘,并将热数据(经常访问的数据)保留在内存中。
通过这种方式,Redis 可以处理比实际物理内存更多的数据。
虽然能使...
Spring Cloud 可以选择哪些 API 网关?回答重点在 Spring Cloud 架构中,有很多种可以选择的 API 网关方案,主要如下:
1)Spring Cloud Gateway:这个应该是现在 Spring Cloud 微服务开发中使用比较广泛的,也是 Spring 大力推荐的,其基于非阻塞的 WebFlux 响应式编程框架,充分发挥了响应式编程的优势以及特性,其提供了流...
什么是 Spring Cloud Zuul?回答重点Spring Cloud Zuul 是 Spring Cloud 官方早期默认推荐的网关组件,不过其由于 2020 年 12 月开始已经停止维护了,其现在逐渐被 Spring Cloud Gateway 所取代。
Zuul 提供了鉴权、路由、限流等功能,可以与 Spring Cloud 的其他组件,比如说 Eureka、Ribbon、Hys...
什么是 Spring Cloud Gateway?回答重点Spring Cloud Gateway 是 Spring Cloud 开源的网关组件,其使用了 WebFlux 框架,充分发挥了响应式编程的特性以及优点,其底层使用了 Netty 作为通信框架,并且包含了 Spring framework 5、SpringBoot 2 以及 Project Reactor 等技术,适配 Spring...
你项目里为什么选择 Gateway 作为网关?回答重点选择 Spring Cloud Gateway 的原因主要有两个:
1)以前用得比较多的是 Spring Cloud 官方开源的 Zuul,其用得比较多的还是 1.0 的版本,不过 1.0 版本 Netflix 很早就宣布进入维护状态了,虽然 Zuul 已经出了 2.0 版本,但是 Spring Cloud 官方团队好像没有整合的计划,并...
说说什么是 API 网关?它有什么作用?回答重点API 网关是位于客户端与后端服务之间的一层,充当所有客户端请求的统一入口,负责路由请求到正确的服务,并提供认证与授权、负载均衡、限流、缓存、日志记录等功能。
API 网关的作用简化客户端调用:
统一入口:API 网关提供了单一入口,客户端只需与网关交互,而不需要了解后端服务的具体部署位置和接口细节,从而简化了客户端的调用逻辑。
请求聚合:在...
为什么需要服务注册发现?回答重点在分布式系统中,服务的数量通常会有很多,而且规模还不是一般地大,与此同时,服务的部署和变化也会很频繁。因此,如果要依赖人工去维护这些服务的关系,实现服务的管理以及调用就会变得非常困难。
服务注册与发现的作用就是为了解决这个问题,它通过注册中心来维护服务生产者以及服务消费者之间的关系。当服务启动之后,其就会向注册中心注册自己的信息,比如服务名称、服务端口、服务的...
什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?回答重点令牌桶算法是一种流量控制算法,用于限制系统的访问频率。该算法允许以固定的速率向“桶”中加入令牌,处理请求时消耗桶中的令牌。当桶中的令牌耗尽时,后续请求会被拒绝或延迟处理。
在 Java 中可以使用基于 Guava 的 RateLimiter 实现令牌桶算法,可以有效控制单用户的访问频率,避免恶意行为。
令牌桶算法工作原理令...
Spring Cloud 的优缺点有哪些?回答重点Spring Cloud 的优点是:集成度高、生态丰富、可扩展性强、功能全面。
Spring Cloud 的缺点是:学习曲线陡峭、有一定的性能开销、组件迭代快版本多、管理复杂。
扩展知识优点细化
集成度高:Spring Cloud 集成了多个成熟的微服务组件(如 Eureka、Zuul、Ribbon、Hystrix、Sleuth 等),与 S...
你知道 Nacos 配置中心的实现原理吗?回答重点Nacos 配置中心的实现原理可以分为以下几个核心部分:
1)配置的存储:
企业内 Nacos 一般会使用数据库(如 MySQL)来存储配置数据。配置数据是以键值对的形式存储的,每个配置项对应一个数据 ID(Data ID),并且支持通过 Namespace(命名空间)、Group(组)来进行配置的隔离与分类。
配置存储层在 Nacos 集...
为什么需要在微服务中使用链路追踪?Spring Cloud 可以选择哪些微服务链路追踪方案?回答重点在微服务系统中,少则五六个服务,多则上百个服务,如果某个环节出现问题了,一次调用可能涉及到很多服务,如果服务之间的日志没有关联,那么排查起来非常困难,这个时候就需要链路追踪。
链路追踪可以可视化地追踪请求从一个微服务到另一个微服务的调用情况,从而帮助问题的排查。另外一个方面就是链路追踪还可以帮...
Spring Boot 和 Spring Cloud 之间的区别?回答重点Spring Boot 是一个用于简化 Spring 应用程序开发的框架。它的主要目标是减少 Spring 应用程序的配置和开发复杂性。
而 Spring Cloud 是基于 Spring Boot 的,因此在使用 Spring Cloud 构建微服务时,必须先使用 Spring Boot 来开发基础的应用。Sprin...
Spring Cloud 由什么组成?回答重点Spring Cloud 主要由四部分组成:
一、服务注册与发现
1)Eureka 服务注册中心:Eureka 作为服务注册中心,允许服务实例动态加入或离开集群。其他服务可以通过Eureka服务器查询可用的服务实例,并进行负载均衡和故障转移。
2)Consul 服务发现与配置:提供服务发现和配置管理。
二、负载均衡
1)Ribbon 负载均衡器:...
单体应用、SOA、微服务架构有什么区别?回答重点单体应用、SOA 和微服务架构都是不同的架构风格,适用于不同的情况:
单体应用,其对外是一个整体,所有的功能都打包在同一个应用上。这种架构风格方便测试和容易部署,不过有一个点,当发生故障的时候可能会导致服务整体不可用,容易发生单点故障,所以灵活性和可维护性并不是很高。
SOA 是一种面向服务的架构风格,将系统划分为多个独立的服务。这些服务可以...
你们的服务是怎么做日志收集的?回答重点我们服务采用的方案是 ELK 那套,Logstash 主要负责从微服务集群采集日志,然后将日志数据发送到 ElasticSearch,ES 主要负责数据的存储和检索,最后 Kibana 就负责日志数据的可视化分析。
流程如下图所示:
ElasticSearch: ElasticSearch 是一个分布式搜索和分析引擎,可以存储和索引大量的日志数据...
你是怎么理解微服务的?回答重点微服务(Micreoservies)是一种软件架构风格,它的主要目的就是将一个复杂应用程序拆分成多个职责单一的服务。
微服务的核心思想是“单一职责原则”,即每个服务专注于完成一个特定的任务,确保服务的高内聚性和低耦合性。
这会使得开发、部署、维护更加灵活和高效。针对不同服务可以进行不同技术或者语言选型,比如机器学习可以用 Python、一些嵌入式可以用 c++、...
Spring Cloud Config 是什么?回答重点Spring Cloud Config 为分布式系统外部化配置提供了服务端以及客户端的支持,简单来说就是一个配置中心,其主要包括以下两个部分的内容:Config Server(Config 服务端)和 Config Client(Config 客户端)。
Config Server 是一个可横向扩展,并且集中式配置的服务器,主要用于集...
什么是 Seata?回答重点Seata(Simple Extensible Autonomous Transaction Architecture) 是阿里巴巴开源的一款分布式事务解决方案。
其主要是为了解决分布式系统中全局事务的一致性问题。Seata 提供了多种事务模式,包括 AT、TCC、Saga 以及 XA 模式。
在 Seata 中有三个很重要的角色:事务协调者(TC)、事务管理者(...
说一下你对于 DDD 的了解?回答重点DDD 全名叫做 Domain-driven design,即领域驱动设计,它是一种软件开发方法,其主要目的就是让开发人员和领域专家可以更好地协作,从而开发出满足业务需求的系统。
DDD 的关键概念包括领域模型和限界上下文。
领域模型描述了业务领域的规则和逻辑,让开发人员能够更好地理解业务需求。
限界上下文则定义了一个特定的业务领域内的模型和代码,使得...
了解 Seata 的实现原理吗?回答重点Seata 主要通过三大核心组件来协调全局事务的执行。
事务协调器(Transaction Coordinator,TC):TC 负责管理全局事务的生命周期,记录全局事务和分支事务的状态,并协调全局事务的提交和回滚。TC 是 Seata 的中心控制器,所有的分布式事务请求都会通过 TC 进行管理。
作用:TC 保证各个分支事务在全局事务中的状态一致性...
分布式和微服务有什么区别?回答重点分布式系统和微服务架构是两个相关但不同的概念,它们的注重点其实不太一样。
分布式系统:它是由多台计算机或多节点组成的系统,各节点之间通过网络进行通信和协作,共同完成一个或多个共享的任务。
也就是说分布式的各个节点其实目标是一致的,之所以要分布式只是为了有更好的能力,能更快、更高效地承接任务。
比如常见的分布式文件系统、分布式数据库。
微服务架构:微服务...