笔记-分布式系统常见概念

分布式理论

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中的实现:

  1. 指定一个目录
  2. 在这个目录中放实现类的文件

为什么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.异步刷盘

posted @ 2021-03-23 21:21  余***龙  阅读(189)  评论(0编辑  收藏  举报