分布式理论
01简述CAP理论
数据一致性(consistency): 如果系统对一个写操作返回成功,则之后的读请求都必须读到这个新的值
服务可用性(avaliability): 所有读写请求在一定时间内一定能得到响应
分区容错性(partition-tolerance):在网络分区情况下,被分隔的节点能够正常对外开放
在分布式的环境中,必须要有p,不然就不叫分布式了
所以只能选择CP和AP
因为允许分区容错, 写操作有可能在节点1上成功,节点2失败,这个时候对于client1和client2就可能读取到了不同的值,
出现了不一致的情况
如果要保持一直性,则写入必须同时失败,也就是降低了系统的可用性
简述Base理论
在CAP的基础上做了妥协
Base理论降低了发生分区容错时对可用性和一致性的要求
1.基本可用: 允许可用性降低(可能相应时间变长,可能服务降级)
2.软状态: 允许系统中的数据存在中间状态,并认为中间状态不会影响系统整体的可用性(支付中等状态)
3.最终一致性: 节点数据同步可能存在时延,但在一定期限后必须达成一致,变成最终状态
数据一致性模型有哪些
强一致性: CAP,插入和更新后所有节点都能同时读到
弱一致性: 存在不一致性的窗口
最终一致性: 弱一致性的特例
因果一致性: 有因果操作的顺序得到保证,A更新完某个数据后通知B,B拿到的值必须是A修改过后的值
会话一致性: 将数据访问框定在一个会话当中,在同一个会话中,总是能读到最新值 eg: 分布式session一致性问题
单调读一致性: 当一个值存在多个修改的版本,每次读都只会读到最新的版本
单调写一致性: 写的顺序控制
读写一致性: 自己写的值自己读能够一致
Quorum waro机制
总共10个副本,一次更新成功3个,然后最少读8个副本的数据,这样就一定能取到最新的数据,取版本号最大的那条数据就是最新的
一致性paxos算法
解决多个节点对某个值达成一致的协议,只是一个算法思想
raft算法
zab协议
负载均衡策略有哪些
集群 分布式 SOA 微服务的概念及区别
分布式系统的设计目标
分布式事务有哪些解决方案
1.多数据源的情况下
2.两个微服务使用两个数据库
对比两阶段, 三阶段有哪些改进
两阶段
三阶段提交
三阶段相比二阶段的区别是多了一次探测的操作,确认数据库的环境是否正常
简述TCC事务模型
如何理解RPC
zookeeper
zk的初始化选举和崩溃选举过程
简述zk的数据模型
zk数据同步原理
zk的watch机制实现原理
先进先出队列进行处理
zk分布式锁实现原理
通过临时节点实现
zk典型应用场景
zk中的一个客户端修改了某个节点的数据,其他客户端能马上获取到这个最新数据吗
如果访问的是从节点,需要先执行sync命令,让从节点先从主节点拉取最新的值, 然后再读取,这样就能读取到最新的值
zk对事务的支持
zk中的观察者机制
zk的会话管理机制
dubbo
阿里巴巴开源的rpc框架,是一个远程服务调用的分布式框架
核心部分:
dubbo工作流程
简述dubbo中的spi机制
jdk中的SPI(服务发现机制): 自动根据接口找到接口的实现类
eg: jdbc中的class.forName 没有指定实现类,只指定了一个接口,最后也能使用
jdk中的实现:
- 指定一个目录
- 在这个目录中放实现类的文件
为什么dubbo不用jdk的spi,而是自己实现
dubbo服务暴露过程
dubbo服务引入过程
dubbo服务调用过程
dubbo中zk集群挂掉, 发布者和订阅者还能通信吗
zk实际如何存储dubbo生产者和消费者信息
生产者和消费者都注册临时节点,并维持心跳
dubbo支持的注册中心
dubbo集群容错策略
dubbo支持的协议
dubbo的分层设计
dubbo和springcloud对比
redis
缓存雪崩
互斥锁的意思是,查询数据库的时候只允许一个key查db,查询到马上更新缓存,其他线程唤醒后直接读缓存
缓存穿透
缓存击穿
分布式系统常见缓存方案
常见缓存淘汰算法
如何保证数据库和缓存一致性
***
服务降级 服务熔断
redis持久化机制
rdb
bgsave命令用到了写时复制技术,保证是某一时间节点的备份数据,在持久化过程中不影响读写功能
aof
redis单线程为什么这么快
为了减少线程上下文切换的消耗
为什么java要使用多线程? 因为java中的线程操作时间长,cpu切换的时间
相对线程消耗的时间来说也是划算的
redis主从同步机制
分布式缓存寻址算法
redis高可用方案
redis事务
redis数据结构: 一般是说5种
数据库实现分布式锁
redis分布式锁的实现
消息队列优缺点,使用场景
如何保证消息没有被重复消费
redis高可用集群模式
启动的时候,将16384个节点均匀分布到不同的节点上
kafka activemq rabbitmq rocketmq 对比
rabbitmq
rabbitmq架构设计
vhost: 可以实现应用隔离
rabbitmq交换机类型
rabbitmq可以直连队列吗
可以,但是正常情况下不会这样做
rabbitmq持久化机制
rabbitmq事务消息机制
发送端: 准备多一个队列,当commit后将该队列的内容移到有消费者连接的那一个队列
消费端: commit就删除队列的数据,否则不删除队列的数据
rabbitmq如何保证消息可靠性传输
不用事务,因为溪能比较差
rabbit 死信队列,延迟队列原理
rabbitmq的普通集群模式
只有元数据才是同步的,数据是分布在每个节点上
rabbitmq的镜像队列原理
kafka
kafka架构设计
kafka性能高的原因
kafka副本同步机制
kafka消息高可靠解决方案
kafka的rebalance机制
rebalance发生时读写会停止
rocketmq
rocketmq架构设计
rocketmq事务消息原理
rocketmq怎样实现顺序消息
rocketmq持久化机制
rocketmq广播消息
延迟消息
事务消息
ACL
rocketmq高效三大利器
1.顺序存
2.零拷贝
3.异步刷盘