一、分布式理论
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?
- 简化远程调用的复杂性
- 支持微服务架构
- 提升开发效率
- 通用的应用场景
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 高可用主要有三层:
- 主从复制:提供读写分离和数据冗余,但需要手动切换,不算完整 HA
- Sentinel 哨兵模式:在主从基础上增加监控和自动故障转移,是经典高可用方案
- 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 容器:路径 主机路径
2028

被折叠的 条评论
为什么被折叠?



