八股文面试攻略六:分布式和集群

一、分布式理论

1.1、什么是CAP理论?

在一个分布式系统中,不可能同时完全满足 Consistency(强一致性)、Availability(可用性)、Partition Tolerance(分区容错性)。最多只能同时满足其中两个。

  • 一致性
  • 可用性
  • 分区容错性

1.2、什么Base理论?

BASE 理论是相对于 CAP 中强一致性(Consistency)提出的“弱一致性/最终一致性”设计哲学。

  • 基本可用
  • 软状态
  • 最终一致性

BASE 放弃强一致性,保证系统高可用,通过容忍数据短暂不一致来换取性能和可扩展性,最终达到一致。

1.3、什么是2PC(两阶段提交)?

把一次分布式事务拆成两个阶段:投票阶段(准备阶段) + 提交阶段。

多个数据库要么都成功提交,要么都失败回滚,不会出现部分成功部分失败。

1.4、什么是Raft协议?解决什么问题?

Raft 是一种分布式一致性协议

通过 Leader 选举、日志复制和日志修复机制,确保在网络分区或部分节点失败时,集群仍能保持强一致性和可靠性。

二、Kafka

2.1、Kafka是什么?解决了什么问题?

Kafka 是一个分布式、高吞吐的消息队列系统。本质上是一个分布式日志系统。

核心特点

  • 高吞吐量、高性能
  • 可水平扩展
  • 高可用、高可靠
  • 分布式设计
  • 可持久化
  • 支持实时与离线处理

Kafka 解决了分布式系统中 “高吞吐消息传递、日志流式存储、系统解耦、削峰填谷、数据管道统一” 的问题

2.2、zookeeper对于Kafka的作用是什么?

Kafka 用 ZooKeeper 来管理集群元数据、进行选主、检测节点存活、管理副本、协调分区等操作。

2.3、Kafka如何判断一个节点是否还活着?

在使用 ZooKeeper 的 Kafka 中,Broker 会在 ZK 创建临时节点,通过心跳维持 session。若心跳超时导致 session 失效,临时节点会自动删除,Controller 看到后认为 Broker 宕机。

KRaft 模式下,Broker 会定期向 Controller 集群发送心跳,如果在超时时间内未收到心跳,该 Broker 即被认为已下线。

2.4、简述Kafka的ack机制

Kafka 的 ACK 机制由 Producer 的 acks 参数控制

ACK 机制用来在性能和可靠性之间做权衡。

2.5、如何控制消费的位置?

Kafka 消费位置由 offset 控制。offset 存储在 __consumer_offsets 中,每个消费组独立维护。消费位置通过自动/手动提交控制;手动提交最可靠。通过 seek 或消费组 reset 工具可以精确控制从任意位置开始消费,包括从头、从尾或指定 offset 重试。

三、gRPC

3.1、什么是序列化?

序列化是将对象转换成可存储或可传输的字节流,反序列化是将字节流恢复为对象的过程。它的作用包括:① 实现网络传输;② 持久化存储;③ 支持跨语言通信;④ 实现深拷贝。序列化是分布式系统和 RPC 通信的基础能力。

3.2、什么是RPC?

RPC(Remote Procedure Call)是一种使程序能够像调用本地函数一样调用远程服务的方法。它屏蔽了底层的通信细节,使得开发人员无需关注远程调用的复杂性,只需像操作本地方法一样调用远程方法。

3.3、为什么使用RPC?

  1. 简化远程调用的复杂性
  2. 支持微服务架构
  3. 提升开发效率
  4. 通用的应用场景

3.4、gRPC是什么?

gRPC 是 Google 开源的一种高性能、跨语言、基于 HTTP/2 的 RPC(远程过程调用)框架

特点:

  • 基于 HTTP/2
  • 使用 Protobuf(Protocol Buffers)作为序列化协议
  • 跨语言支持强
  • 自动生成客户端和服务端代码

gRPC 主要解决 微服务之间高性能、强类型、跨语言通信 的问题。

四、数据库集群

4.1、Mysql的主从复制原理?

MySQL 主从复制(Master–Slave Replication)是一种 主库写、从库读 的架构:

  • 主库负责写入
  • 从库负责读取

其主要目的:读写分离、提高读扩展性、备份不影响主库性能、数据冗余与高可用。

4.2、Mysql分库分表?

分库分表 = 将一个大型数据库或大表拆分成多个库、多个表,用于提升性能、扩展能力。

  • 分库:把数据拆到多个数据库(多个实例)里。
  • 分表:把一张大表拆成多个小表。

分库分表的分类:

  • 垂直分库 / 垂直分表:将数据根据属性分成多个库/表。
  • 水平分库/水平分表:按数据行拆分(按用户 ID、订单 ID 拆分)

分库分表提升性能和扩展性,但会带来分布式事务、跨库 Join、自增 ID、数据迁移等问题,一般辅以中间件(如 ShardingSphere)解决。

4.3、简述Redis高可用方案?

Redis 高可用主要有三层:

  1. 主从复制:提供读写分离和数据冗余,但需要手动切换,不算完整 HA
  2. Sentinel 哨兵模式:在主从基础上增加监控和自动故障转移,是经典高可用方案
  3. Redis Cluster:在哨兵思路上进一步扩展,既做分片扩容,又通过主从 + 自动选主保证高可用,适合大规模集群。

4.4、简述Redis cluster集群原理?

Redis Cluster 将数据分成 16384 个槽并分配给不同主节点实现分片,其主从结构提供自动故障转移,节点间通过 Gossip 协议同步元数据,客户端根据槽信息直连对应节点访问数据。集群支持在线扩容、迁移 slots,从而实现高可用 + 高性能 + 可伸缩的分布式存储系统。

五、docker

5.1、什么是docker镜像

Docker 镜像是一个只读的应用运行模板,包含程序运行所需的环境、依赖和配置。镜像采用分层结构,可复用、可移植,通过镜像可以快速创建容器从而保证“环境一致、一次构建、到处运行”。

5.2、什么是docker容器?

Docker 容器是镜像运行后的实例,本质上是一个轻量级、隔离的进程。它拥有独立的文件系统、网络和资源限制,但共享宿主机的内核,因此启动快、资源占用低,非常适合微服务和云原生环境。

5.3、docker容器的几个状态

Docker 容器共有几个典型状态:created、running、paused、restarting、exited 和 dead。created 表示已创建未运行;running 表示正常运行中;paused 表示冻结;restarting 表示因策略重启;exited 表示容器停止;dead 表示异常中断

5.4、容器与主机之间数据的拷贝命令?

容器与主机之间拷贝数据用 docker cp 命令:主机→容器:docker cp 主机路径 容器:路径;容器→主机:docker cp 容器:路径 主机路径

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值