Java八股文-分布式学习记录1


Java八股文-分布式学习记录1

1.分布式幂等性如何设计

幂等性:用户多次点击,应该只有一次有效更改。

唯一索引来防止新增的脏数据。token每次使用都要被redis删除,从后台重新获取,再存到redis.

悲观锁,乐观锁,分布式锁。

2.说说你对分布式事务的理解

场景:多个服务或多个库,要保持在一个事务中。

理论基础:ACID,CAP,BASE。 ACID(原子性Atomicity,一致性Consistency,隔离性Isolation,持久性Durability)
实际中用到了哪些解决方案:seata,消息队列+本地事件表,事务消息,最大努力通知方案,tcc

3. 什么是两阶段提交协议(2PC)

第一阶段:投票阶段,询问各个事务数据源是否准备好

第二阶段:真正将数据提交给事务数据源

一个协调者,多个参与者。

4.什么是补偿性事务

try-confirm-cancel. 先try,然后根据结果决定是confirm还是cancel

try阶段只要是对业务系统做检测及资源预留。

confirm阶段主要是对业务系统做确认提交。try能成功则confirm一定成功。

cancel是业务取消,资源释放

5.消息队列和事件表实现分布式事务

优势:给用户的响应速度会快。 缺点:编码复杂,排查问题困难。

6.分布式id的生成方案

唯一性,有序递增性,高可用性,带时间。

UUID:结合机器的网卡,本地时间,一个随机数来生成

数据库自增ID:两台机器应该一个奇数一个偶数。

批量生成ID:数据库里记录最大的值,把生成的一堆ID放到内存(Redis)里

Redis生成ID:单线程的,本身就提供像incr这种指令。

雪花算法:1位符号位(一般是0),41位时间戳(毫秒级),10位机器位,12位毫秒内的序列。

7.常用的负载均衡算法有哪些

轮询算法:RR(round robin),一个一个来,适用于所有服务器硬件相同的情况。

加权轮询算法。

随机轮询算法。

最少链接算法。记录每个服务器正在处理的连接数。将新请求分发到最少连接的服务器上。放到Redis里做个Hash.

10.漏桶算法

恒定的流出速度。漏桶的容量=漏桶的流出速度*可接受的等待时长

当请求速度大于漏桶流出速度的时候,会触发限流。当短时间突发大流量,漏桶无法处理。

11.令牌桶算法

一个大小固定的容器(令牌桶),桶的量即瞬时最大并发量。

12.数据库如何处理大数据量

分区。分库分表(水平/垂直),读写分离。

13.CAP定理

一致性(Consistency),可用性(Availability),分区容错性(Partition tolerance)

分区容错性:在分布式系统中遇到任何网络分区故障,系统仍然能对外提供服务。

14.BASE理论

我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

Basically Available(基本可用)

Soft state(软状态)

Eventually consistent(最终一致性)

15.什么是可靠消息最终一致性方案

可靠消息:要有个可靠的消息中间件

最终一致性:事务发起方和事务消费方的业务最终一致。

begin 事务;操作数据库;发送消息;提交事务。

发送消息响应超时,导致数据库回滚。需要人工补偿。

消息消费方要有幂等性的解决方案。

16.RocketMQ在分布式事务中的应用

RocketMQ在4.3之后的版本支持了事务消息,为解决分布式事务提供了便利。

17.请说说注册中心的数据存储结构

Map,服务名:ip+port

我可能部署3个A服务,则要修改结构

<服务名:<服务实例 : ip+port,服务配置等等>>

18.请说说注册中心有哪些操作

接受服务注册,接受服务心跳,接受服务下线,服务剔除,查询注册表中的服务信息,注册中心集群间注册表的同步。

20.分布式系统中为什么引入熔断

防止一个底层服务坏掉而导致雪崩。

21.熔断和降级的区别

同:都是为了整体可用,而选择部分功能不可用。

熔断是下级服务故障,降级范围更广,高并发的时候可以把一些不重要的功能降级掉,比如商品详情页下面的商品推荐。主动去走备用代码。

22.如何提升系统的并发能力

分流:负载均衡,消息队列,数据库拆分

导流:缓存,CDN

并发

24.微服务设计的原则

单一职责:高内聚,低耦合

服务自治:独立开发测试

轻量级通信,粒度。

25.什么是最大努力通知方案

1,有一定的消息重复通知机制。 2,消息校对机制。

公司内部放到消息队列里,公司外部应该通过RPC的方式,调用消费方。

27.Ribbon的原理

1.对RestTemplate加@LoadBalanced注解

2.将RestTemplate中调用的服务名,解析为具体的IP地址。因为一个服务名会对应多个地址,那么在选择具体服务地址的时候,需要做负载均衡。

3.确定目标服务的IP和port后,通过httpClient进行HTTP的调用。

28.认证和授权有什么区别

认证:系统存在你这个用户。 授权:你的权限,是管理员还是普通。

29.什么是Cache Aside机制

双写一致性。先更新数据,再删除缓存

除非读比写慢,上面可能会出问题,但基本不会。可以用延时双删再解决。

30.什么是Read Write Through机制

直接把结果写入缓存,再从缓存同步到数据库中。这样在业务看来就不会存在数据不一致的情况了。

读和写只和缓存打交道。要求缓存十分可靠。


文章作者: 爱敲代码の鱼儿
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 爱敲代码の鱼儿 !
  目录