master - slave
最佳单的策略
master的更新同步
推送到slave,优点:slave时刻与master保持同步;缺点:阻塞master进程,效率低
异步推送
master的更新异步
推送到slave,优点:无需等待slave的确认信息,效率高。缺点:一切麻烦都来自于异步推送,因为异步,slave的更新会滞后于master,此时,如果master挂掉,会造成数据丢失;当master恢复后,与新master之间,会产生数据不一致,一般做法是把不一致的数据丢掉。
master -master
高效的同时,引入了更高的复杂性,所以轻易不要用这种结构
每一个master都可以进行读写,如果同时更新
多个master的同一个数据
,会产生写冲突
(就好比,多个用户同时编辑一份文档,如果碰巧同时编辑同一句话,那么写冲突在所难免),这就是复杂性的来源。(写冲突的本质:并发模型下,同时修改一份数据;如果能将并发模型,强制改为单线程(加锁),那么写冲突就可以消除。但是在多master模式下,没有zookeeper的帮助下,很难实现锁,此时,冲突在所难免,问题变为如何解决冲突?
)
网友评论