1. 什么是CAP原理?CAP原理是否适用于单机环境?
CAP原理指分布式系统中Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性)。
Consistency(一致性)
指分布式系统中所有节点都能对某个数据达成共识,即访问所有节点所得到的数据应该是一样的。这里指的一致性为强一致性,即更新操作成功后,所有节点在同一时间数据完全一致。
注意区分 弱一致性——最终一致性。
Availability(可用性)
指系统能够对用户的操作给予反馈,所有节点都保持高可用性,通常指系统反馈的及时程度。
即:任何没有发生故障的服务必须在有限的时间内返回合理的结果集。
Partition tolerance(分区容错性)
指部分节点出现故障,以及出现消息丢包的请款下,集群系统仍可提供服务,完成数据访问。
分区容错可视为在系统中采用多副本策略。
CAP理论的主要场景是在分布式环境下,再单击环境下基本不考虑CAP问题
2. Paxos算法或类似机制是否可以用来监控分布式环境下各个节点的运行状态?如果可以,请简单描述该机制。
Paxos算法内容梳理
Paxos算法要解决的问题:在一个存在网络延时、中断、丢包等干扰因素下的分布式系统中,如何就某个值或决策达成一致。
详细参考博文:https://blog.youkuaiyun.com/chen77716/article/details/6265394
https://www.jianshu.com/p/06a477a576bf
Paxos算法可以用于监控各个节点的运行状态,机制如下
个人认为较为清晰讲解Paxos原理视频:传送门(上图为视频内容截图
3. 布隆过滤器的优缺点是什么?如果需要降低布隆过滤器的误报率,则需要付出何种代价?
什么是布隆过滤器?
本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。
优点
- 增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数,一般比较小),与数据量大小无关
- 哈希函数相互之间没有关系,方便硬件并行运算
- 布隆过滤器不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势
- 在能够承受一定的误判时,布隆过滤器比其他数据结构有这很大的空间优势
- 数据量很大时,布隆过滤器可以表示全集,其他数据结构不能
- 使用同一组散列函数的布隆过滤器可以进行交、并、差运算
缺点
- 有误判率,即存在假阳性(False Position),即不能准确判断元素是否在集合中
- 不能获取元素本身
- 一般情况下不能从布隆过滤器中删除元素
- 如果采用计数方式删除,可能会存在计数回绕问题
如何降低误报率
增加哈希函数的个数,增长布隆过滤器的bit位。
但该操作会导致布隆过滤器效率降低。