快捷搜索: 王者荣耀 脱发

分布式相关的一些面试题~

1、分布式服务API接口的幂等性如何设计?

幂等性:像一个接口,多次发送同一请求,需保证结果准确,也就是说不能多扣钱、多插入数据、统计值多+1等,这就是幂等性。

保证幂等性主要为以下三点:

  1. 对于每个请求必须有一个唯一标识,如订单支付,一条订单有一个订单ID,一个订单ID最多支付一次。
  2. 每次请求出来完毕之后,需有一个记录,标记此请求已处理,如支付前记录此订单的支付流水,且采用订单ID作为支付流水的唯一键,只有插入支付流水成功,方可执行实际的支付扣款。
  3. 每次接收请求需验证是否为已处理的请求,如订单已支付,肯定会产生一条流水,重复请求来支付时,需先插入流水,但唯一键已存在,唯一键约束生效,此时就不必进行扣款了。

2、分布式系统中的接口调用如何保证顺序性?

可接入MQ,如系统A使用多线程处理,可使用内存队列来保证顺序性,如确保要100%的顺序性,可使用分布式锁来处理,但会影响系统并发性。

3、常见分布式锁解决方案?

  1. Redis的分布式锁。
  2. 基于zookeeper。
  3. 基于数据库,如MySQL。

4、MySQL如何实现分布式锁?

  1. 通过主键ID的唯一性进行加锁。
  2. 使用流水号+时间戳做幂等操作。

5、分布式和集群的区别?

分布式:一个业务拆分为多个子业务,部署在不同的服务器上。

集群:同一个业务,部署在多个服务器上。

6、cap理论(布鲁尔理论)?

cap:对于一个分布式计算系统来说,不可能同时满足以下三点:

  1. consistency(一致性):在多副本间保持一致的特性(严格一致性)。
  2. availability(可用性):系统提供的服务需一直处于可用状态,每次请求都可获取到非错的响应(不保证获取的数据为最新数据)。
  3. partition tolerance(分区容错性):分布式系统在遇到任何网络分区故障时,仍能够对外提供满足一致性和可用性的服务,除非整个网络都发生了故障。

cap仅适用于原子读写的nosql场景,不适合数据库系统,现在的分布式系统具备扩展性、可用性等更多特性,在进行系统设计和开发时,不应仅聚焦于cap问题上。

7、TCC协议?

  1. try:尝试待执行的业务,并未真正执行,只完成所有业务的一致性检查并预留好执行所需的全部资源。
  2. confirm:执行业务,真正开始执行,由于try阶段已完成一致性查验,所以此阶段直接执行,不作任何查验,执行过程中会用到try阶段预留的资源。
  3. cancel:取消执行的业务,若业务执行失败,就进入cancel阶段,释放所有占用的业务资源,并回滚confirm阶段执行的操作。

至此,本次分享就结束了,后期会慢慢补充的。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

经验分享 程序员 微信小程序 职场和发展