分布式与分库分表面试题汇总

目录

一、分布式相关

(一)基础概念

(二)原则理解

(三)算法

(四)分布式事务实现方案

(五)其他

二、分库分表相关

(一)ShardingSphere 相关

(二)分库分表后的操作


一、分布式相关

(一)基础概念

  1. 什么是分布式系统?

    • 分布式系统是由多个独立的计算机通过网络连接在一起,共同完成一个任务的系统。这些计算机可以分布在不同的地理位置,通过网络进行通信和协调。
  2. 什么是分布式事务?

    • 分布式事务是指在分布式系统中,涉及多个节点(数据库、服务等)的事务操作。由于分布式系统的复杂性,传统的单机事务处理方式无法满足需求,需要采用特殊的机制来保证分布式事务的原子性、一致性、隔离性和持久性。

(二)原则理解

  1. CAP 原则和 BASE 原则怎么理解?

    • CAP 原则:即一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。在分布式系统中,最多只能同时满足这三个特性中的两个。一致性指的是所有节点在同一时刻看到的数据是相同的;可用性指的是系统能够及时响应客户端的请求;分区容错性指的是系统能够在网络分区的情况下继续工作。
    • BASE 原则:即基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency)。它是对 CAP 中一致性和可用性权衡的结果,强调在分布式系统中,允许系统在一定时间内处于不一致的状态,但最终能够达到一致。
  2. 为什么 CAP 原则不能全部满足?

    • 在分布式系统中,网络分区是不可避免的。当发生网络分区时,如果要保证一致性,就需要在所有节点之间进行同步,这可能会导致系统不可用;如果要保证可用性,就可能无法保证所有节点的数据一致。因此,无法同时满足一致性、可用性和分区容错性。

(三)算法

  1. 说下 Raft 算法?

    • Raft 是一种用于管理复制日志的一致性算法。它通过选举一个领导者来协调日志的复制和提交。在 Raft 中,节点分为领导者、跟随者和候选人三种角色。领导者负责接收客户端的请求,并将日志复制到跟随者节点。跟随者节点接收领导者的日志复制,并在本地应用这些日志。如果领导者出现故障,跟随者节点会发起选举,选出新的领导者。
  2. 说下 Paxos 算法?

    • Paxos 是一种用于实现分布式一致性的算法。它通过多个节点之间的投票来达成一致。在 Paxos 中,有提案者、接受者和学习者三种角色。提案者提出一个值,接受者对这个值进行投票,如果大多数接受者同意这个值,那么这个值就被确定下来。学习者负责学习已经确定的值。

(四)分布式事务实现方案

  1. 分布式事务有哪些常见的实现方案?

    • 两阶段提交(2PC):分为准备阶段和提交阶段,由协调者协调各个参与者进行事务的提交或回滚。
    • 三阶段提交(3PC):在 2PC 的基础上增加了一个预提交阶段,减少了阻塞时间。
    • TCC(Try-Confirm-Cancel):通过预留资源、确认操作和取消操作来实现分布式事务。
    • 本地消息表:通过在本地数据库中维护一个消息表,将分布式事务转化为本地事务来实现。
    • 事务消息:利用消息中间件的事务特性来实现分布式事务。
  2. 如何基于本地消息表实现分布式事务?

    • 在本地数据库中创建一个消息表,用于记录需要在分布式事务中执行的操作。当本地事务成功时,将操作记录插入到消息表中。然后,通过一个定时任务不断地从消息表中读取未处理的消息,并将其发送到其他节点进行处理。如果发送成功,则将消息标记为已处理;如果发送失败,则进行重试或回滚本地事务。

(五)其他

  1. 说下你对 Seata 的理解?

    • Seata 是一款开源的分布式事务解决方案,它通过对业务无侵入的方式实现分布式事务的管理。Seata 采用了 TCC 模式和 AT 模式来实现分布式事务,支持多种数据库和框架。它通过全局事务管理器协调各个分支事务的执行,保证分布式事务的一致性。
  2. 有哪些分布式锁的实现方案?

    • 基于数据库实现:通过在数据库中创建一个表来记录锁的状态,实现分布式锁。
    • 基于 Redis 实现:利用 Redis 的 SETNX 命令和过期时间来实现分布式锁。
    • 基于 Zookeeper 实现:利用 Zookeeper 的临时节点和 Watcher 机制来实现分布式锁。
  3. 你了解哪些限流算法?

    • 令牌桶算法:以固定的速率向桶中放入令牌,请求到来时,如果桶中有足够的令牌,则允许请求通过;否则,拒绝请求。
    • 漏桶算法:请求进入漏桶后,以固定的速率流出,如果漏桶已满,则拒绝请求。
    • 计数器算法:在一段时间内,统计请求的次数,如果超过了设定的阈值,则拒绝请求。
  4. 说说什么是幂等性?

    • 幂等性是指对同一操作的多次请求应该产生相同的效果。在分布式系统中,由于网络延迟、故障等原因,可能会导致请求重复发送。如果系统中的操作具有幂等性,那么即使请求重复发送,也不会对系统造成不良影响。

二、分库分表相关

(一)ShardingSphere 相关

  1. 什么是 ShardingSphere,它的主要功能是什么?

    • ShardingSphere 是一个开源的分布式数据库中间件,它提供了数据分片、读写分离、分布式事务等功能。主要功能包括数据分片、读写分离、数据加密、分布式事务等。
  2. ShardingSphere 的核心模块有哪些?他们是如何工作的?

    • 核心模块包括:数据分片模块、读写分离模块、分布式事务模块、数据加密模块等。数据分片模块通过配置分片策略,将数据按照一定的规则分布到不同的数据库或表中;读写分离模块通过配置主从数据库,实现读操作从从库读取,写操作写入主库;分布式事务模块通过协调各个数据库的事务,保证分布式事务的一致性;数据加密模块通过对敏感数据进行加密,保证数据的安全性。
  3. ShardingSphere 的读写分离是如何实现的?

    • ShardingSphere 通过配置主从数据库,实现读操作从从库读取,写操作写入主库。在配置文件中,可以指定主库和从库的连接信息,以及读写分离的策略。当执行读操作时,ShardingSphere 会根据配置的策略选择一个从库进行读取;当执行写操作时,会写入主库。
  4. 如何配置 ShardingSphere 的数据分片策略?

    • 在 ShardingSphere 的配置文件中,可以通过配置数据源、表规则、分片算法等信息来配置数据分片策略。例如,可以配置按照某个字段进行分片,或者按照一定的范围进行分片。
  5. ShardingSphere 支持水平分片和垂直分片吗?请解释它们的区别。

    • ShardingSphere 支持水平分片和垂直分片。水平分片是将数据按照行进行分片,将数据分布到不同的数据库或表中;垂直分片是将数据按照列进行分片,将不同的列分布到不同的数据库或表中。
  6. 什么是 ShardingSphere 的广播表?

    • 广播表是指在所有数据节点上都存在的表,数据在所有节点上都是一致的。广播表通常用于存储一些全局配置信息或字典表等。
  7. 什么是 ShardingSphere 的关联表?

    • 关联表是指在多个数据节点上都存在的表,但是数据在不同节点上可能是不同的。关联表通常用于存储一些与业务相关的表,需要通过关联查询来获取数据。
  8. ShardingSphere 支持哪些分片算法?

    • ShardingSphere 支持多种分片算法,包括哈希算法、范围算法、取模算法等。可以根据业务需求选择合适的分片算法。
  9. ShardingSphere 的分库分表功能是如何工作的?

    • ShardingSphere 的分库分表功能通过配置数据源、表规则、分片算法等信息来实现。当执行 SQL 语句时,ShardingSphere 会根据配置的规则将 SQL 语句路由到相应的数据库或表中进行执行。
  10. ShardingSphere 如何保证分布式事务一致性?

  • ShardingSphere 提供了分布式事务模块,可以通过配置事务管理器来保证分布式事务的一致性。例如,可以使用 Seata 作为事务管理器,通过协调各个数据库的事务,保证分布式事务的一致性。

(二)分库分表后的操作

  1. 分库分表后如何进行分页查询?

    • 分库分表后进行分页查询需要考虑数据的分布情况。可以通过在各个分表中分别进行分页查询,然后将结果合并起来。也可以通过在总表中进行分页查询,然后根据分表规则将查询结果路由到相应的分表中进行获取。
  2. 分库分表后如何进行 join 操作?

    • 分库分表后进行 join 操作比较复杂,可以通过以下几种方式来实现:
      • 全局表:将一些经常需要进行 join 操作的表作为全局表,在所有数据节点上都存在一份相同的数据。
      • 字段冗余:在分表中冗余一些需要进行 join 操作的字段,避免进行跨库 join。
      • 数据同步:将需要进行 join 操作的数据同步到一个中间表中,然后在中间表中进行 join 操作。
  3. 分库分表后如何进行跨库 join?

    • 分库分表后进行跨库 join 可以通过以下几种方式来实现:
      • 全局表:将一些经常需要进行 join 操作的表作为全局表,在所有数据节点上都存在一份相同的数据。
      • 字段冗余:在分表中冗余一些需要进行 join 操作的字段,避免进行跨库 join。
      • 数据同步:将需要进行 join 操作的数据同步到一个中间表中,然后在中间表中进行 join 操作。
  4. 分库分表如何预估分多少个库和多少张表?

    • 分库分表的数量需要根据数据量、查询性能、存储容量等因素来进行预估。可以通过对历史数据的分析和业务增长的预测来确定分库分表的数量。一般来说,可以先根据当前的数据量和业务增长速度,确定一个初始的分库分表数量,然后在实际使用过程中根据性能和存储情况进行调整。
  5. 如何使用 ShardingSphere 进行数据加密?

    • ShardingSphere 提供了数据加密模块,可以通过配置加密算法和密钥来对敏感数据进行加密。在配置文件中,可以指定需要加密的字段和加密算法,ShardingSphere 会在数据写入和读取时自动进行加密和解密操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值