一、AKF原则
1.redis单节点有什么问题?
(1) 单点故障
(2) 容量有限
(3) 压力大
2.什么是AKF原则?
AKF网上查不到是什么的缩写。。
说穿了,就是从3个维度解决单以上3个问题(不止redis,所有分布式系统都遵循)。
x轴:全量,镜像
一般用主从、主备来解决。
主备解决单点故障问题,读写分离解决读压力问题
y轴:业务,功能
多个不同实例解决
如redis实例1储存用户相关的数据
redis实例2储存订单相关的数据
解决容量有限和压力大的问题
z轴:再拆分,可用优先级或逻辑拆分
如redis实例2存订单数据,但订单数据太多一个redis实例也存不下了咋办?那就进一步拆分,用多个redis储存订单数据。然后用某种算法(如一致性hash算法)访问多个redis。
进一步解决容量有限和压力大的问题。
AKF原则图解:
二、CAP理论
1.什么是CAP
C:Consistency 一致性
A:Availability 可用性
P:Partition Tolerance 分区容错性(最难理解)
CAP理论指的是同一个分布式系统中,3条性质最多只能满足2条
为什么只能满足2条?
答:如主从模型中,主被set k1 1,从机立刻get k1是否立刻能获取k1的值?
此时就要分情况
1.如果主set k1后立刻对所有备机加锁,等备机写入k1后才释放锁,那么从库就能获取k1。这种就是CP模型(一致性优先,但加锁期间会导致系统不可用),这种一致性又称为强一致性
2.如果主set k1不加锁,而是异步的向从库set k1,那么从库就有可能获取不到k1(可能还被同步过去),异步期间系统依然可用。这种就是AP模型(可用性优先),这种一致性又称为弱一致性。
那CA模型又是啥?
这种一般不讨论。因为CA模型就是单实例系统(非分布式)。P是分区容错性,意思就是分布式允不允许出错的意思(如网络故障)。
2.主从和主备的区别:
主备:只能访问主,备是用来接替主的
主从:都可以访问,但更偏向主(更偏向这个方案)
redis 2种都可以
3.主备模型怎么自动的故障转移?
意思就是主挂了,备机怎么自动的接替主机。很简单,用另一个程序监控主机,一监控到挂了就执行脚本,执行设置从机为主机之类的相关操作。那问题又来了,监控程序自己也是一个单点,所以监控程序也需要做高可用。
如果有写错的地方,欢迎大家指正,感谢!