分布式面试题!
分布式理论
说说CAP原则?
CAP原则又称为CAP定理,指的是在一个分布式系统中,Consistency(一致性)、availability(可用性)、Partition tolerance(分区容错性)这三个基本需求,最多只能同时满足两个。
一致性:指的是数据在多个副本之间保持一致的特性 可用性:系统提供的服务必须一直处于可用状态 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然能够提供满足一致性和可用性的服务,除非整个网络故障。
为什么CAP不可兼得?
首先分布式系统的P是必须要保证的,不然所有数据都放在一个节点上,坏了整个系统直接完蛋了。
那么满足P的情况下,能不能同时满足C和A?
假设一个场景:
用户访问了N1,修改了D1的数据。
用户再次访问,但是请求落在了N2。那么此时D1和D2的数据是不一致的。
为了保证一致性,此时就不应该返回不一致的数据。那么可用性就无了。
为了保证可用性,那么不管数据新不新都返回,也就不能保证一致性了。
CAP对应的模型和应用?
CA without P
理论上放弃 P(分区容错性),则 C(强一致性)和 A(可用性)是可以保证的。实际上分区是不可避免的,严格上 CA 指的是允许分区后各子系统依然保持 CA。
常见于集群数据库、xFS文件系统。
CP without A
放弃A,可用性,保证一致性和分区。为了保证一致性,就需要每个请求在Server之间保持强一致。
常见于分布式数据库和分布式锁。
AP without C
要高可用并且分区,那么无法保证一致性。现在很多的NoSQL都属于这种类型。
常见于Web缓存、DNS。
BASE理论了解吗?
BASE:Basically Available、Soft State、 Eventual consistency。它基于CAP理论逐步演化而来。核心思想是即使不能强一致性,根据应用特点达到最终一致性。
BA:基本可用。意思就是系统假如故障了,服务也能使用,但是会出现响应时间上的损失和功能上的降级。
S:软状态。那么什么是硬状态?就是要求多个节点的数据副本是一致的,这是一种“硬状态”。软状态的话就允许多个不同节点间的数据存在数据延时。 E:最终一致性。上面的软状态最终应该达到数据一致性。取决于网络延时、系统负载、数据复制方案设计等等因素。
分布式锁
常见的分布式锁实现方案三种:MySQL分布式锁、ZooKeeper分布式锁、Redis分布式锁。
分布式事务
在分布式环境下,会涉及多个数据库,比如支付库、商品库、订单库。因此保证跨服务的事务一致性就非常复杂。