让我们聊聊脑裂这事情

news/2024/7/1 3:50:51

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

万事皆有因

最近IM云平台也好,社交应用也好,大量的使用ejabberd的厂商涌现出来了。不过所有使用ejabberd厂商可能都会遇到Mnesia脑裂的问题。在这里打算简单的谈谈脑裂这个事情。


什么是脑裂

我在这里面给个非官方的定义吧。当一个集群的不同部分在同一时间都认为自己是活动的时候,我们就可以将这个现象称为脑裂症状。我们当如何理解这句话呢?

  1. 首先我们需要是个集群。

  2. 其次当中有业务是Master-Backup模式或双星模式。也就是说当主节点挂掉了,备用节点需要接管业务或者是两个节点直接有数据同步。

让我们举个例子(图片来自https://blog.process-one.net/angie_introducing_flexarch/):

171307_AMF6_236698.png


其中ejabberd front是不存在Router的,只有Client Manager。而ejabberd back是具有Message router 的。那么我们可以将这个图简单的抽象为这样的:


172337_OXPP_236698.png


UserA和UserB分别将自己的信息注册在RouterA和RouterB中。RouterA和RouterB使用数据同步(2PC),来同步信息。那么当UserA想要向UserB发送一个消息的时候,需要现在RouterA中查询出UserA到UserB的消息路由路径,然后再交付给相应的路径进行路由。

当脑裂发生的时候,相当RouterA和RouterB直接的联系丢失了,RouterA认为整个系统中只有它一个Router,RouterB也是这样认为的。那么相当于RouterA中没有UserB的信息,RouterB中没有UserA的信息了,此时UserA再发送消息给UserB的时候,RouterA会认为UserB已经离线了,然后将该信息进行离线持久化。

说到这里面估计大家已经明白了脑裂是什么东西了。


怎么解决

  1. paxos算法,使用奇数性质的节点来进行表决,必须选出一个说的算的老大,这个集群才能正常工作。

  2. 双星模式下,使用专线直连,从硬件上保障。

  3. 使用额外的探测节点,当双方直连断开之后,使用一个约定好的共同节点来探测是否是直连故障。

转载于:https://my.oschina.net/u/236698/blog/525413


http://lihuaxi.xjx100.cn/news/245825.html

相关文章

【网摘】检测 iframe 是否加载完成

var iframeSet document.getElementById("iframeSet"); //需要检测的 iframe if(iframeSet.attachEvent) {iframeSet.attachEvent("onload", function() {$("#loading").hide();}); } else {iframeSet.onload function() {$("#loading&q…

abaqus如何并行计算_Abaqus软件与并行计算的硬件配置

现代CAE分析的发展对计算能力提出了越来越高的需求,Abaqus作为功能最为强大的CAE分析软件之一,在生产和研究中为各国的工程师和研究人员所广泛采用。Abaqus提供了强大的并行功能,它采用Threads和MPI两种并行模式,可应用于SMP 或者…

PXE实现批量部署linux系统

pxe批量部署linux服务器1、pxe介绍PXE是有intel设计的协议,它可以使计算机通过网络启动,协议分为client和server两端,PXEclient在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存中执行,并显示出命令…

CentOS7.4下 VNC Server的搭建和客户端的连接配置

CentOS7.4下 VNC Server的搭建和客户端的连接配置 服务器版本:CentOS Linux release 7.4.1708 (Core) yum方式安装VNC server yum install tigervnc-server 启动vnc 服务初次启动服务时,按提示设置VNC Service密码;服务成功启动后会在 /root/…

Java记录 -62- java.util.Collections

在学数组的时候,JDK为我们提供了一个Arrays类,该类提供了许多静态方法来操作数组。同时针对集合类也提供了一个Collections类,同样也提供了许多静态方法来对集合进行操作。Collection 和Collections的区别:java.util.Collection 是…

android id 重名_Android App 自定义权限重名不能安装解决办法

场景1.A 应用 有两个版本 第一个 正式版 第二个测试版 测试版的包名 = 正式版+test ,在Android studio 中 也就是 applicationId 。两个版本都可以成功的安装在手机上,也就是说 在手机上可以有 两个 A 应用。场景2由于某些原因&#xff0…

Fragment提交transaction导致state loss异常

下面自从Honeycomb发布后,下面栈跟踪信息和异常信息已经困扰了StackOverFlow很久了。 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.j…

cocos2d-x在win7下的android交叉编译环境

cocos2d-x在win7下的android交叉编译环境 前面把Visual StudioPython开发环境配好了,但还没有讲如何在Android中使用创建好的项目,本篇博客介绍如何在win7下进行Android与cocos2d-x的交叉编译,我的电脑是64位,所以下面的配置是基于…