CN102843310A - 基于流言协议的广域网中消息的发布、订阅方法和系统 - Google Patents

基于流言协议的广域网中消息的发布、订阅方法和系统 Download PDF

Info

Publication number
CN102843310A
CN102843310A CN2012102470464A CN201210247046A CN102843310A CN 102843310 A CN102843310 A CN 102843310A CN 2012102470464 A CN2012102470464 A CN 2012102470464A CN 201210247046 A CN201210247046 A CN 201210247046A CN 102843310 A CN102843310 A CN 102843310A
Authority
CN
China
Prior art keywords
message
operating office
theme
office
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012102470464A
Other languages
English (en)
Other versions
CN102843310B (zh
Inventor
王聃
曹恺
朱鑫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sina Technology China Co Ltd
Original Assignee
Sina Technology China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sina Technology China Co Ltd filed Critical Sina Technology China Co Ltd
Priority to CN201210247046.4A priority Critical patent/CN102843310B/zh
Publication of CN102843310A publication Critical patent/CN102843310A/zh
Application granted granted Critical
Publication of CN102843310B publication Critical patent/CN102843310B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Telephonic Communication Services (AREA)

Abstract

本发明的实施例提供了一种基于流言协议的广域网中消息的发布、订阅方法和系统,可提高广域网内消息的发布效率及系统的稳定性。所述发布方法包括步骤:接收客户端发布到主题中的消息,并将消息同步到其他订阅该主题的通讯站;在订阅所述主题的通讯站中对主题中消息进行同步。本发明的实施例通过将消息发布到主题,客户端通过订阅主题来获得消息,消息在订阅主题的通讯站之间同步,这时,当其中一个通讯站出现故障时,客户端可通过其它通讯站获得其订阅主题的消息,从而不会妨碍对该消息的获得,消除了单点故障问题,并提高了系统的整体写入效率,及提高了可扩展性。

Description

基于流言协议的广域网中消息的发布、订阅方法和系统
技术领域
本发明涉及消息发布方法和系统,尤其涉及一种基于流言协议的广域网中消息的发布、订阅方法和系统。所述流言协议是一种以类似于人群中传播闲话的方式对网络数据进行同步的协议。 
背景技术
发布-订阅技术是消息传递的一种模式。一般来说,消息传递最基本的模式是,发送者将消息直接传递给接收者。而发布-订阅技术则不是将消息直接传递给接收者,而是将消息分为若干类别(这些类别也称为主题),接收者可以通过订阅自己感兴趣的类别来获得这个类别对应的消息。将消息分类的一种典型方式是,发送者将消息发布到不同的主题,接收者则订阅感兴趣的主题来获得消息。 
在互联网上应用发布-订阅技术的一个典型场景是,一个客户端按先后顺序把消息发布到一个IDC(Internet Data Center,互联网数据中心)的主题,而其他的客户端需要从其他的IDC按顺序读取这个主题的消息。这里要解决的问题是,如何把客户端发布到最初IDC的消息,按顺序复制到其他IDC。 
现有复制技术主要是基于日志复制的主从复制模型(常用于数据库管理系统中数据的复制)。其中,一个节点(一台服务器)作为主节点,其他若干节点作为从节点(即,这种复制模型是由一个主节点和多个从节点组成),主节点接收和处理所有的写请求,而从节点则接收和处理所有的读请求,写到主节点的数据以日志的形式被复制到各个从节点。这种模型的优点是简单易行,成熟稳定。 
然而,由于基于这种模型的系统只包含一个主节点,而从节点又无法处理 写请求,因此存在以下问题:一旦主节点发生故障,就会出现单点故障问题,可靠性不高;当这种主从复制要跨越多个IDC(即主节点在一个IDC,从节点在其他IDC)时,由于只能有一个主节点,因此系统的整体写入效率会非常低,可扩展性较差。 
发明内容
本发明的实施例提供了一种基于流言协议的广域网中消息的发布、订阅方法和系统,可提高广域网内消息的发布效率及系统的稳定性。 
本发明的实施例提供了一种基于流言协议的广域网中消息的发布方法,所述方法包括步骤:接收客户端发布到主题中的消息,并将消息同步到其他订阅该主题的通讯站;在订阅所述主题的通讯站中对主题中消息进行同步,在同步过程中,满足如下条件: 
对于发布到本地通讯站的第一消息和从远端通讯站同步到本地通讯站的第二消息,第一消息和第二消息的排列顺序与消息上传到通讯站的时间顺序一致。 
所述同步包括摘要同步步骤,所述摘要同步步骤包括: 
本地通讯站随机读取任一远端通讯站关于主题的同步表; 
比较本地通讯站与该远端通讯站的同步表中每个通讯站相对应的可获得消息实体数量,如果本地通讯站同步表中通讯站的可获得消息实体数量比远端通讯站同步表中同一通讯站的可获得消息实体数量小,使用远端通讯站同步表中该通讯站的可获得消息实体数量更新本地通讯站同步表中该通讯站的可获得消息实体数量;如果本地通讯站同步表中通讯站的可获得消息实体数量比远端通讯站同步表中同一通讯站的可获得消息实体数量大,将本地通讯站同步表中该通讯站的可获得消息实体数量添加到新建的空摘要中; 
比较本地通讯站与该远端通讯站的同步表中每个通讯站相对应的消息实体最大数量,如果本地通讯站同步表中通讯站的消息实体最大数量比远端通讯站同步表中同一通讯站的消息实体最大数量小,使用远端通讯站同步表中该通 讯站的消息实体最大数量更新本地通讯站同步表中该通讯站的消息实体最大数量;如果本地通讯站同步表中通讯站的消息实体最大数量比远端通讯站同步表中同一通讯站的消息实体最大数量大,将本地通讯站同步表中该通讯站的消息实体最大数量添加到新建的空摘要中; 
将空摘要发送至所述远端通讯站。 
所述同步还包括数据复制步骤,所述数据复制步骤包括: 
比较本地通讯站的同步表中每个通讯站相对应的可获得消息实体数量,如果本地通讯站的可获得消息实体数量小于任一远端通讯站的可获得消息实体数量,则从该远端通讯站获取自身没有的消息。 
本发明还提供了一种基于流言协议的广域网中消息的发布系统,包括主体部分和客户端,其中:所述主体部分包括通讯站,该通讯站包括主节点,所述主节点用于接收客户端发布到主题中的消息,并将消息同步到其他订阅该主题的通讯站;对主题中消息进行同步,在同步过程中,满足如下条件:对于发布到本地通讯站的第一消息和从远端通讯站同步到本地通讯站的第二消息,第一消息和第二消息的排列顺序与消息上传到通讯站的时间顺序一致;所述客户端,用于将消息发布到本地通讯站的主题中。 
所述系统还包括管理部分,其用于存储和维护元数据,所述元数据包括主节点与通讯站的成员关系、主题与通讯站的订阅关系、主节点的地址信息,并向主体部分提供所述元数据。 
所述管理部分,还用于向客户端提供所述元数据;或者,所述系统还包括缓存部分,所述缓存部分用于从管理部分获得元数据,并存储元数据,向对应的客户端提供元数据。 
所述通讯站还包括从节点,所述系统还包括复制选举器,其用于当主节点发生故障时,将一个从节点选举为新的主节点,并在主节点和从节点之间复制消息。 
所述通讯站还包括从节点,所述系统还包括选举器和复制器,所述选举器 用于当主节点发生故障时选举一个从节点选举为新的主节点,所述复制器用于在主节点和从节点之间复制消息。 
本发明还提供了一种基于流言协议的广域网中消息的订阅方法,其基于上述的发布方法,所述订阅方法包括步骤:对预定主题进行订阅;从通讯站中获得订阅的主题,并从该主题中获得消息。 
本发明还提供了一种基于流言协议的广域网中消息的订阅系统,其基于上述的发布系统,包括主体部分和客户端,其中:所述主体部分包括通讯站,该通讯站包括从节点,从节点用于向客户端发布订阅的主题;所述客户端用于订阅该主题,并通过该主题从主体部分的通讯站的从节点中获得关于所述主题的消息。 
本发明的实施例通过将消息发布到主题,客户端通过订阅主题来获得消息,消息在订阅主题的通讯站之间同步,这时,当其中一个通讯站出现故障时,客户端可通过其它通讯站获得其订阅主题的消息,从而不会妨碍对该消息的获得,消除了单点故障问题,并提高了系统的整体写入效率,及提高了可扩展性。 
附图说明
图1示出了本发明实施例的广域网消息的发布方法; 
图2示出了本发明实施例的广域网消息的发布系统; 
图3示出了本发明另一实施例的广域网消息的发布系统。 
具体实施方式
为了便于本领域一般技术人员理解和实现本发明,现结合附图描绘本发明的实施例。 
在描述系统架构以及组成前,首先阐明如下几个概念: 
主题(Topic):消息的聚合体,在一个主题内消息按照入队先后排列; 
应用(Application):每一个主题都是属于一个应用,也就是在创建任何主题前都要先创建一个应用,一个应用下可以创建多个主题; 
通讯站(Station):一个通讯站包含一组服务节点,一般地,不同的通讯站位于不同的IDC; 
本地通讯站:客户端程序将消息发布到的通讯站。 
实施例一 
如图1所示,本实施例提供了一种基于流言协议的广域网消息的发布方法,所述方法包括步骤: 
步骤11、接收客户端发布到主题中的消息; 
步骤12、将消息同步到其他订阅该主题的通讯站; 
步骤13、在订阅所述主题的通讯站中对主题中消息进行同步,在同步过程中,满足如下条件:对于发布到本地通讯站的第一消息和从远端通讯站同步到本地通讯站的第二消息,第一消息和第二消息的排列顺序与消息上传到通讯站的时间顺序一致。 
首先描述下面要用到的符号定义。定义消息为 
Figure BDA00001896451000051
其中p表示消息对应的主题,d是消息发布到的通讯站,i是d为其分配的id(按消息在d接收的先后顺序,时间越靠后id越大)。设c是一个通讯站, 
Figure BDA00001896451000052
是 
Figure BDA00001896451000053
上传到c的时刻, 是c收到的所有关于主题p的消息的集合,那么定义 上反自反全序关系 
Figure BDA00001896451000056
如下: 
Figure BDA00001896451000057
设有两个通讯站分别为E和F,它们都对某一个主题Q感兴趣,那么E获取的Q的消息序列中的消息的顺序应当满足: 
1、在E待发布的所有消息 
Figure BDA00001896451000058
的排列顺序,与这些消息从客户端发布到E时的时间顺序一致; 
2、从F复制过来的所有消息 
Figure BDA00001896451000059
的排列顺序,与这些消息从客户端发布到F时的时间顺序一致; 
3、对于在E待发布的某一条消息 
Figure BDA00001896451000061
和从F同步到E的某一条消息 
Figure BDA00001896451000062
这两条消息的排序,按照 和 
Figure BDA00001896451000064
的大小排列,即,按照这些消息上传到通讯站的时间顺序进行排列。 
总体上来说,对于在本地通讯站待发布的消息和从任一远端通讯站同步过来的消息,这些消息的排列顺序与其上传到通讯站的时间顺序一致。这三个条件规定了消息分发的有序性。条件1、2规定了局部有序性,即消息在客户端A发布的顺序和最终交付到客户端B的顺序是一致的。条件3规定了全局有序性,即来自于广域网的全局消息保持服务器时间轴有序。 
显然 
Figure BDA00001896451000065
关系满足这两个条件的要求,因此消息发布系统将满足 
Figure BDA00001896451000066
关系的消息序列交付给客户端。 
在本实施例中,通讯站之间消息的复制是基于运行在各个通讯站主节点上的流言协议实现的,流言协议保证了复制的连续性和顺序性。因此,为实现通讯站之间数据复制,需要有两个过程,一个过程是消息状态的同步,一个过程则是消息实体的复制。而消息状态的同步就是通过流言协议实现的。流言协议主要有两种方式,一种是反熵法(anti-entropy),一种是谣言传播法(rumor-mongering)。反熵法的策略是,每个节点周期性地随机选择一个对等节点,对比本节点和对等节点之间数据的指纹或版本,如果有差异则说明数据已经被更新过,需要通过交换使得拥有较旧数据的节点获得较新的数据。谣言传播法的策略是,当节点产生一个更新时,这个更新就进入到“热点”状态,节点会周期性地向随机选择的对等节点传播这个更新,直到它认为这个更新不再是“热点”(此时有它认为的足够多的节点已经收到了这个更新)后,就会停止对这个更新的传播。 
本实施例中,消息复制状态的同步采用是反熵法,主要原因是反熵法更为可靠,更有助于实现最终一致性。在谣言传播法中,因为当节点认为一个处于“热点”状态的更新已经被足够多的节点收到时就会停止传播,所以可能有的节点还没有收到更新时,传播就已经停止了,尽管这种情况的概率很低。而反 熵法则是通过指纹或版本来对比两个节点间的整体数据,不一致时就会更新,因此可以保证所有节点的数据都能达到最终一致,因而比谣言传播法更为可靠。而且,各节点间交换的不是整体数据,而是将消息队列补全,因此反熵法不会比谣言传播法耗费更大的带宽。 
本实施例中,与以往流言协议所解决的同步问题的不同之处在于,系统要同步的对象不是一个普通的值或状态,而是一个消息序列。这个序列不但包含一系列的消息,而且这些消息是有序的。采用反熵策略,可以将当前消息的最大id(设为max_id)作为消息序列的版本号。max_id从1开始编号。每进入一条新消息,max_id就会增加,也就是消息序列的版本更新。设更新前的max_id为m,更新后的max_id为m′,于是得出要同步的消息为m+1,m+2,...,m′共m′-m条。 
前面提到,为实现通讯站之间数据复制,需要有两个过程,一个过程是消息复制状态的同步,一个过程则是消息实体的复制。我们将消息复制状态的同步称之为摘要同步(digest reconciliation),消息实体的复制称之为数据复制(data replication)。 
为了进行摘要同步,每个通讯站都将需要同步的各个通讯站的max_id组织到一个名为同步表的数据结构中。同步表包含了一个通讯站感兴趣的全部主题,把每一个主题及其对应的状态(如该主题所包含的消息数量)称为一个摘要(digest)。因此一个同步表是由若干个摘要组成的,摘要和主题是一一对应的关系。为了说明一个摘要中包含哪些状态,给出摘要的形式化描述。设摘要的主题是P,通讯站包括S0,S1,...,Sn-1共n个通讯站,Dk是Sk维护的关于P的摘要(其中k∈[0,n))。Sk既然要同步各个通讯站的状态,因此Dk应当包含Sk已知的S0,S1,...,Sn-1所有这n个通讯站的状态,分别记为Dk[S0],Dk[S1],...Dk[Sn-1]。每一个Dk[Si](其中i∈[0,n))包含一个max_id以及n个available_max_id,分别记为Dk[Si].max_id和Dk[Si][Sj].avl_max_id(其中j∈[0,n))。max_id是目前Sk已知的Si接收到的消息的最大id。Sk目前同步到的消息可能没有这么多,但作为“目标”,Sk 知道Si又发布了新的消息(max_id实际上是各个通讯站在本地成功发布消息后更新的,因此Sk实际收到的消息不可能多于Dk[Si].max_id条)。available_max_id记录的就是实际同步到的可获得消息实体数量。Dk[Si][Sj].avl_max_id的含义是:Sk已知的Sj实际从Si同步到的消息实体最大数量。当Sk发现Dk[Si][Sk].avl_max_id小于Dk[Si].max_id时,就认为有新消息需要同步,于是找出所有满足Dk[Si][Sj].avl_max_id=Dk[Si].max_id的Sj(j≠k且j∈[0,n))。设共有r(0<r≤n-1且j∈[0,n))个通讯站 
Figure BDA00001896451000081
满足条件,从这些通讯站中随机选择一个来同步消息。那么,Sk不仅记录自己的Dk[Si][Sk].avl_max_id,还要记录所有通讯站的available_max_id,这是因为,尽管Sk从Si一定可以获取到新消息,但如果所有通讯站都从Si读取可能会增加Si的压力。而且一旦Si发生故障,则不知道从其他哪些通讯站还可以获取到新消息而出现单点故障问题。 
可以用矩阵以及定义在矩阵上的二元运算来精确描述摘要同步过程。设V是n个通讯站的id的集合(不妨设V=[0,n)),把通讯站k(k∈V)关于P的摘要Dk定义为一个n×(n+1)矩阵: 
Figure BDA00001896451000082
Figure BDA00001896451000083
&ForAll; i , j &Element; [ 0 , n ) , a i , j k &GreaterEqual; 0 , m i k &GreaterEqual; 0
其中 
Figure BDA00001896451000085
相当于Dk[Si][Sj].avl_max_id, 
Figure BDA00001896451000086
相当于Dk[Si].max_id。 
在n×(n+1)矩阵上定义两种二元运算 
Figure BDA00001896451000087
和 
Figure BDA00001896451000088
D &sigma; &CirclePlus; D &tau; : = ( ( max ( a i , j &sigma; , a i , j &tau; ) ) n &times; ( n + 1 ) , ( max ( m i &sigma; , m i &tau; ) ) n T )
D &sigma; &CircleTimes; D &tau; : = ( ( a i , j &CircleTimes; ) n &times; ( n + 1 ) , ( m i &CircleTimes; ) n T )
其中 和 
Figure BDA000018964510000812
分别定义为: 
a i , j &CircleTimes; : = a i , j &sigma; , a i , j &sigma; > a i , j &tau; 0 , a i , j &sigma; &le; a i , j &tau; m i , j &CircleTimes; : = m i &sigma; , m i &sigma; > m i &tau; 0 , m i &sigma; &le; m i &tau;
观察式子可知, 
Figure BDA00001896451000093
运算得到的新n×(n+1)矩阵中的元素,取的是Dσ和Dτ中相应元素的最大值。 
Figure BDA00001896451000094
运算得到的新矩阵中的元素则是Dσ中比Dτ大的元素,比Dτ小的元素则设为零。显然, 
Figure BDA00001896451000095
遵守交换律、结合律和幂等律, 则不遵守这三条规律。 
根据前面的形式化定义,两个通讯站Sσ和Sτ之间由Sσ发起的摘要同步过程描述为如下: 
(i)更新Sτ的同步表 同时从τ的同步表中取出比σ更新的状态 D &tau; &CircleTimes; &DoubleLeftArrow; D &tau; &CircleTimes; D &sigma; ;
(ii)更新Sσ的同步表 D &sigma; &prime; &prime; &DoubleLeftArrow; D &sigma; &prime; &CirclePlus; D &tau; &CircleTimes; .
可以把 
Figure BDA000018964510000910
得到的 
Figure BDA000018964510000911
看作一个稀疏矩阵,在实际的数据传输中只把矩阵中那些非零的元素反馈回Sσ。 
Figure BDA000018964510000912
和 
Figure BDA000018964510000913
这两个运算也是同时进行的,也就是在比较Dσ和Dτ中两个元素 
Figure BDA000018964510000914
和 
Figure BDA000018964510000915
之间的大小时,替换Dτ中较小的元素就得到了D′τ,提取Dτ中较大的元素就得到了 
Figure BDA000018964510000916
第(ii)步中是D′σ而不是Dσ和 
Figure BDA000018964510000917
进行运算的原因是,在第(i)步结束后,此时可能有别的通讯站向σ发起摘要同步,因此等到第二步更新Sσ的同步表时,Sσ的同步表可能已经发生更改而不再是Dσ了,D′σ就是变化后同步表的摘要,当然Dσ=D′σ也是有可能的。 
摘要同步过程进行的同时,数据复制过程也在进行着(当然,二者对于同步表的访问时互斥的)。数据复制过程实际上是根据摘要同步后的新状态去读取新的消息。对每一个i∈[0,n),数据复制会比较 
Figure BDA000018964510000918
和 
Figure BDA000018964510000919
的大小如果 
Figure BDA000018964510000920
则从表中找到所有的通讯站ω,使得 
Figure BDA000018964510000921
在其中随机取一个ω′,从读取相应的消息实体。 
下面描述摘要同步和数据复制的过程。 
摘要同步步骤包括: 
1、本地通讯站随机读取任一远端通讯站关于主题的同步表; 
2、比较本地通讯站与该远端通讯站的同步表中每个通讯站相对应的可获得消息实体数量,如果本地通讯站同步表中通讯站的可获得消息实体数量比远端通讯站同步表中同一通讯站的可获得消息实体数量小,使用远端通讯站同步表中该通讯站的可获得消息实体数量更新本地通讯站同步表中该通讯站的可获得消息实体数量;如果本地通讯站同步表中通讯站的可获得消息实体数量比远端通讯站同步表中同一通讯站的可获得消息实体数量大,将本地通讯站同步表中该通讯站的可获得消息实体数量添加到新建的空摘要中; 
3、比较本地通讯站与该远端通讯站的同步表中每个通讯站相对应的消息实体最大数量,如果本地通讯站同步表中通讯站的消息实体最大数量比远端通讯站同步表中同一通讯站的消息实体最大数量小,使用远端通讯站同步表中该通讯站的消息实体最大数量更新本地通讯站同步表中该通讯站的消息实体最大数量;如果本地通讯站同步表中通讯站的消息实体最大数量比远端通讯站同步表中同一通讯站的消息实体最大数量大,将本地通讯站同步表中该通讯站的消息实体最大数量添加到新建的空摘要中; 
4、将空摘要发送至所述远端通讯站。 
数据复制步骤包括:比较本地通讯站的同步表中每个通讯站相对应的可获得消息实体数量,如果本地通讯站的可获得消息实体数量小于任一远端通讯站的可获得消息实体数量,则从该远端通讯站获取自身没有的消息。 
下面给出摘要同步和数据复制算法描述。算法中的变量说明参见上面对摘要同步的论述部分(τ是本地通讯站的下标,σ是远端通讯站的下标)。 
Figure BDA00001896451000101
Figure BDA00001896451000111
Figure BDA00001896451000121
结合表1-4的例子进一步说明摘要同步和数据复制过程。 
表1 
Figure DEST_PATH_IMAGE001
表1示出了通讯站A发送到通讯站B的摘要。其中,第一行的含义是指客户端发布到通讯站A的消息为10条,第二行的含义是指通讯站B通过同步获得的由客户端发布到通讯站A的消息为0条,第三行的含义是指通讯站C通过同步获得的由客户端发布到通讯站A的消息为0条。类似地,第四行的含义是指通讯站A通过同步获得的由客户端发布到通讯站B的消息为95条,第五行的含义是指客户端发布到通讯站B的消息为100条,第六行的含义是指通讯站C通过同步获得的由客户端发布到通讯站B的消息为65条。第七行的含义是指通讯站A通过同步获得的由客户端发布到通讯站C的消息为30条,第八行的含义是指通讯站B通过同步获得的由客户端发布到通讯站C的消息为10条,第九行的含义是指客户端发布到通讯站C的消息为30条。 
假定有一个主题,名称记作art,现在要在A、B和C这三个通讯站之间同步art的消息。现在A随机选择了通讯站B,并与通讯站B进行摘要同步,于是从自己的同步表中读取art的摘要。表1所示就是art的摘要,我们看到,在表1中通讯站A已收到的art的可获得消息实体数量(available_max_id)是10。因为是通讯站A的同步表,因此消息实体最大数量(max_id)等于available_max_id,都是 10。但通讯站B和通讯站C目前还没有收到任何通讯站A的消息(可能是在通讯站A刚刚发布了10条消息),所以available_max_id还为0。通讯站B和通讯站C对应的available_max_id和max_id同理。需要注意的是,由于通讯站B和通讯站C的消息都不是通讯站A本地发布的,所以在同步过程中,通讯站A在将自己的状态推送给通讯站B和通讯站C的同时,也希望从通讯站B和通讯站C同步到它们本地最新的状态。 
表2 
Figure DEST_PATH_IMAGE002
表2示出了同步前通讯站B的同步表。 
表2所示的是此时通讯站B的同步表中art的状态。当收到通讯站A发来的摘要后,通讯站B会逐项比较。首先发现通讯站A的max_id已经到10了,将自己的同步表的状态从0修改为10(修改后的同步表见表3)。通讯站B发现自己的max_id是0,但实际上通讯站A的max_id已经是10,为了更新,得去将这10条消息取来。那么从哪里去取这10条消息呢?由于通讯站B发现A的available_max_id是10,于是通讯站B由此知道通讯站A那里有这最新的10条消息。继续检查同步表中通讯站B对应的状态,通讯站B本地发布的消息已达120 条,但发现通讯站A发来的摘要中通讯站A已知最大的max_id为100,小于120,说明通讯站A记录的已经不是最新状态,于是通讯站B将自己这里最新的状态也要封装成一条摘要,将自己的最新情况写进去,表4所示的就是这条摘要,包含了通讯站A所需要的最新状态,当然之后是要返回给通讯站A的。通讯站B又发现通讯站A对于通讯站C的available_max_id的值为65,小于自己的85,也写进将要反馈给通讯站A的摘要中。当检查到通讯站C的状态时,发现自己的通讯站A和通讯站C的available_max_id以及C的max_id都变旧了,都已经到30了,而自己的只有15条,于是更新状态。同时,通讯站B既可以到通讯站A去取那新的15条消息,也可以到通讯站C去取。另外通讯站A摘要中相信通讯站B只取到了C的10条消息,而实际上通讯站B已取到15条了,因此通讯站B把这个新状态也添加到给通讯站A的反馈中。B更新完成后的状态如表3所示,反馈给通讯站A的摘要如表4所示。通讯站A收到反馈后同样会按照前面所述的那样更新自己的状态。 
表3 
Figure DEST_PATH_IMAGE003
表3示出了同步后B的同步表。 
表4 
Figure DEST_PATH_IMAGE004
表4示出了B返回给A的摘要。 
在数据复制过程中,每个通讯站会比较同步表中available_max_id和max_id的大小,如果自己的available_max_id更小,就认为自己的状态是旧的,于是查看其他通讯站的available_max_id比本通讯站的大。在表3中,通讯站B发现通讯站A和通讯站C都有通讯站C的更新的消息,通讯站B将从通讯站A和通讯站C中随机选择一个获得这些消息。并设置其对应的available_max_id这个字段,一方面是让通讯站检查是否自己的状态已经变旧,应当去哪里获取新消息,另一方面也是让通讯站在更新自己的消息时有更多的选择,避免所有通讯站都去一个地方取,缓解了通讯站的访问压力,也防止单点故障问题的出现。 
实施例二 
如图2所示,本实施例还公开了一种基于流言协议的广域网中消息的发布系统,该系统包括主体部分、管理部分、缓存部分和客户端。图2是本实施例的系统的整体架构。接下来对各部分进行详细说明。 
客户端包括用户编写的应用程序和系统的软件开发工具包。客户端通过调用软件开发工具包的接口,将消息发布到某个通讯站,或是从某个通讯站订阅消息。 
管理部分的主要作用是维护节点的成员关系和存储客户端应用名称、主题等元数据,向其他部分提供对这些数据的存取,所述节点的成员关系包括系统内的节点、节点归属哪一个通讯站的属性。主体部分中各个节点启动时,向管 理部分注册自己的信息,从管理部分读取应用和主题等元数据;同时在本通讯站内的成员关系发生变化时,比如发现某个节点新加入到通讯站,或是认为某个节点崩溃,也会通知到通讯站内的各个节点。应用调用客户端软件开发工具包可以原子地在管理部分上创建、删除主题;同时,客户端也需要从管理部分读取主题以及通讯站中主、从节点的地址信息。 
缓存部分,为了分散管理部分的压力,根据客户端数量部署多个缓存部分,用于缓存元数据。这样,客户端可从缓存部分中读取元数据。当管理部分维护的元数据和成员关系发生变化时,会通知缓存部分也进行相应的更新。元数据和成员关系变化的频率是很低的,因而管理部分将这些变化通知到每一个缓存部分的压力也不大。因此,当客户端的数量较多时,采用缓存部分有效地解决了管理部分所承受的读取压力。 
主体部分由若干个通讯站组成,每个通讯站包括一个主节点和一个或多个从节点。客户端应用发布的消息首先被发送到通讯站的主节点,然后复制到系统内的各个从节点。复制过程分为两个层次:一个层次是通讯站内消息的复制,在通讯站内,采用Paxos协议作为复制选举器,进行主从复制,包含一个主节点,若干个从节点,消息在主节点发布后,被可靠地复制到其他从节点;另一个层次是通讯站之间消息的复制,是各个通讯站的主节点之间的复制,采用的是对等的去中心化的复制模式。客户端从某一通讯站订阅消息的请求被发送到这个通讯站内的从节点,由从节点将相应的消息返回给客户端。 
在本实施例中,通讯站内消息的复制采用Paxos一致性协议。消息在主节点发布,再通过Paxos算法被复制到从节点。一旦主节点发生故障,通过Paxos算法可以将一个从节点选举为新的主节点,实现了系统的高可用性。Paxos算法是一种一致性算法,解决的是在可能发生故障(比如节点崩溃或出现网络分区)的分布式系统中,如何使得各节点就某一项事务达成一致的问题。 
如图3所示,图3示出了本发明实施例的另一系统图,下面是对图2的若干修改,修改说明如下。 
在图2中,通讯站间的复制包括摘要同步和数据复制两个过程。其中,摘要同步中的max_id表示的是消息的序号,数据复制则是直接复制消息。图3所示系统同样包括这两个过程,但数据则是以日志的形式来复制的。在图3中,当客户端将消息发布到通讯站的主节点后,主节点会把消息写入日志,因此在图3所示的系统中的数据复制实际就是复制日志。在图3中,摘要同步同样是基于流言协议的,但是max_id表示的不再是消息的序号,而是日志序号(Log Sequence Number,简写为LSN)。将每条消息以一条日志的形式写入日志文件中,因此日志序号的格式就是(file_id,offset),其中file_id是日志文件的id,offset则是这条日志在这个日志文件内的位置(即偏移)。显然,用日志序号表示的max_id和用消息序号表示的max_id是等价的。 
在图2中,通讯站内的复制是基于Paxos协议的。图3所示系统的通讯站内的复制,则是通讯站间的复制时相同的,即包括摘要同步和数据复制两个过程,摘要同步基于流言协议,max_id表示日志序号,数据复制则是复制日志。在图3中,与图2相同的是,通讯站内还是包括一个主节点和多个从节点,客户端把消息发布到主节点,在从节点读取消息。 
图3所示系统包括主体部分、管理部分、缓存部分、选举器、复制器和客户端。图3所示系统在图2基础上加入了选举器。在图3所示系统中,通讯站内的主节点的选举不再通过Paxos算法,而是通过选举器。首先,通讯站内的成员关系的变化会通过管理部分通知到选举器,如果选举器发现是主节点崩溃,那么就会在通讯站内所有存活的从节点中选出一个新的主节点,通知管理部分,再由管理部分通知给通讯站内各个节点。另外,主节点和从节点之间复制消息通过复制器进行,复制器进行摘要同步时基于流言协议,max_id表示日志序号,数据复制则是复制日志。 
实施例三 
本实施例提供了一种基于流言协议的广域网中消息的订阅方法,其基于实施例一所述的发布方法,所述订阅方法包括步骤:对预定主题进行订阅;从通 讯站中获得订阅的主题,并从该主题中获得消息。 
本实施例的订阅方法可参见实施例一的描述。 
实施例四 
本实施例提供了一种基于流言协议的广域网中消息的订阅系统,其基于实施例二所述的发布系统,包括:主体部分和客户端,所述主体部分包括通讯站,该通讯站包括从节点,从节点用于向客户端发布订阅的主题;所述客户端用于订阅该主题,并通过该主题从主体部分的通讯站的从节点中获得关于所述主题的消息。本实施例的各个单元的工作原理可参见实施例二的描述。 
虽然通过实施例描绘了本发明,但本领域普通技术人员知道,在不脱离本发明的精神和实质的情况下,就可使本发明有许多变形和变化,本发明的范围由所附的权利要求来限定。 

Claims (10)

1.一种基于流言协议的广域网中消息的发布方法,其特征在于,所述方法包括步骤:
接收客户端发布到主题中的消息,并将消息同步到其他订阅该主题的通讯站;
在订阅所述主题的通讯站中对主题中消息进行同步,在同步过程中,满足如下条件:
对于发布到本地通讯站的第一消息和从远端通讯站同步到本地通讯站的第二消息,第一消息和第二消息的排列顺序与消息上传到通讯站的时间顺序一致。
2.根据权利要求1所述的方法,其特征在于,所述同步包括摘要同步步骤,所述摘要同步步骤包括:
本地通讯站随机读取任一远端通讯站关于主题的同步表;
比较本地通讯站与该远端通讯站的同步表中每个通讯站相对应的可获得消息实体数量,如果本地通讯站同步表中通讯站的可获得消息实体数量比远端通讯站同步表中同一通讯站的可获得消息实体数量小,使用远端通讯站同步表中该通讯站的可获得消息实体数量更新本地通讯站同步表中该通讯站的可获得消息实体数量;如果本地通讯站同步表中通讯站的可获得消息实体数量比远端通讯站同步表中同一通讯站的可获得消息实体数量大,将本地通讯站同步表中该通讯站的可获得消息实体数量添加到新建的空摘要中;
比较本地通讯站与该远端通讯站的同步表中每个通讯站相对应的消息实体最大数量,如果本地通讯站同步表中通讯站的消息实体最大数量比远端通讯站同步表中同一通讯站的消息实体最大数量小,使用远端通讯站同步表中该通讯站的消息实体最大数量更新本地通讯站同步表中该通讯站的消息实体最大数量;如果本地通讯站同步表中通讯站的消息实体最大数量比远端通讯站同步表中同一通讯站的消息实体最大数量大,将本地通讯站同步表中该通讯站的消息实体最大数量添加到新建的空摘要中;
将空摘要发送至所述远端通讯站。
3.根据权利要求2所述的方法,其特征在于,所述同步还包括数据复制步骤,所述数据复制步骤包括:
比较本地通讯站的同步表中每个通讯站相对应的可获得消息实体数量,如果本地通讯站的可获得消息实体数量小于任一远端通讯站的可获得消息实体数量,则从该远端通讯站获取自身没有的消息。
4.一种基于流言协议的广域网中消息的发布系统,其特征在于,包括主体部分和客户端,其中:
所述主体部分包括通讯站,该通讯站包括主节点,所述主节点用于接收客户端发布到主题中的消息,并将消息同步到其他订阅该主题的通讯站;对主题中消息进行同步,在同步过程中,满足如下条件:对于发布到本地通讯站的第一消息和从远端通讯站同步到本地通讯站的第二消息,第一消息和第二消息的排列顺序与消息上传到通讯站的时间顺序一致;
所述客户端,用于将消息发布到本地通讯站的主题中。
5.根据权利要求4所述的发布系统,其特征在于,所述系统还包括管理部分,其用于存储和维护元数据,所述元数据包括主节点与通讯站的成员关系、主题与通讯站的订阅关系、主节点的地址信息,并向主体部分提供所述元数据。
6.根据权利要求5所述的发布系统,其特征在于,
所述管理部分,还用于向客户端提供所述元数据;
或者,所述系统还包括缓存部分,所述缓存部分用于从管理部分获得元数据,并存储元数据,向对应的客户端提供元数据。
7.根据权利要求4所述的发布系统,其特征在于,所述通讯站还包括从节点,所述系统还包括复制选举器,其用于当主节点发生故障时,将一个从节点选举为新的主节点,并在主节点和从节点之间复制消息。
8.根据权利要求4所述的发布系统,其特征在于,所述通讯站还包括从节点,所述系统还包括选举器和复制器,所述选举器用于当主节点发生故障时选举一个从节点选举为新的主节点,所述复制器用于在主节点和从节点之间复制消息。
9.一种基于流言协议的广域网中消息的订阅方法,其基于权利要求1所述的发布方法,其特征在于,所述方法包括步骤:
对预定主题进行订阅;
从通讯站中获得订阅的主题,并从该主题中获得消息。
10.一种基于流言协议的广域网中消息的订阅系统,其基于权利要求4所述的发布系统,其特征在于,包括主体部分和客户端,其中:
所述主体部分包括通讯站,该通讯站包括从节点,从节点用于向客户端发布订阅的主题;
所述客户端用于订阅该主题,并通过该主题从主体部分的通讯站的从节点中获得关于所述主题的消息。
CN201210247046.4A 2012-07-17 2012-07-17 基于流言协议的广域网中消息的发布、订阅方法和系统 Active CN102843310B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210247046.4A CN102843310B (zh) 2012-07-17 2012-07-17 基于流言协议的广域网中消息的发布、订阅方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210247046.4A CN102843310B (zh) 2012-07-17 2012-07-17 基于流言协议的广域网中消息的发布、订阅方法和系统

Publications (2)

Publication Number Publication Date
CN102843310A true CN102843310A (zh) 2012-12-26
CN102843310B CN102843310B (zh) 2016-01-20

Family

ID=47370383

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210247046.4A Active CN102843310B (zh) 2012-07-17 2012-07-17 基于流言协议的广域网中消息的发布、订阅方法和系统

Country Status (1)

Country Link
CN (1) CN102843310B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106452836A (zh) * 2016-08-31 2017-02-22 北京小米移动软件有限公司 主节点设置方法及装置
CN106656624A (zh) * 2017-01-04 2017-05-10 合肥康捷信息科技有限公司 基于Gossip通信协议和Raft选举算法的优化方法
CN106878473A (zh) * 2017-04-20 2017-06-20 腾讯科技(深圳)有限公司 一种消息处理方法、服务器集群及系统
CN107040618A (zh) * 2016-12-06 2017-08-11 北京信息科技大学 一种去中心化的网络域名服务系统及方法
CN107343273A (zh) * 2017-07-11 2017-11-10 四川汇源吉迅数码科技有限公司 统一消息分发系统
CN109857747A (zh) * 2018-12-18 2019-06-07 百度在线网络技术(北京)有限公司 数据同步更新方法、系统和计算机设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101217402A (zh) * 2008-01-15 2008-07-09 杭州华三通信技术有限公司 一种提高集群可靠性的方法和一种高可靠性通信节点
EP1990975A1 (en) * 2007-05-09 2008-11-12 Murata Machinery, Ltd. Relay server and relay communication system
CN101854299A (zh) * 2010-05-21 2010-10-06 中国科学院软件研究所 一种发布/订阅系统的动态负载平衡方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1990975A1 (en) * 2007-05-09 2008-11-12 Murata Machinery, Ltd. Relay server and relay communication system
CN101217402A (zh) * 2008-01-15 2008-07-09 杭州华三通信技术有限公司 一种提高集群可靠性的方法和一种高可靠性通信节点
CN101854299A (zh) * 2010-05-21 2010-10-06 中国科学院软件研究所 一种发布/订阅系统的动态负载平衡方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
刘德辉等: "《分布环境下的Gossip算法综述》", 《计算机科学》, vol. 37, no. 11, 30 November 2010 (2010-11-30) *
薛小平: "《基于内容的发布订阅系统路由算法》", 《基于内容的发布订阅系统路由算法》, vol. 36, no. 5, 31 May 2008 (2008-05-31) *
薛涛等: "《使用Gossip算法实现可靠的基于内容的发布订阅系统》", 《小型微型计算机系统》, vol. 27, no. 1, 31 January 2006 (2006-01-31) *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106452836A (zh) * 2016-08-31 2017-02-22 北京小米移动软件有限公司 主节点设置方法及装置
CN107040618A (zh) * 2016-12-06 2017-08-11 北京信息科技大学 一种去中心化的网络域名服务系统及方法
CN106656624A (zh) * 2017-01-04 2017-05-10 合肥康捷信息科技有限公司 基于Gossip通信协议和Raft选举算法的优化方法
CN106656624B (zh) * 2017-01-04 2019-05-14 合肥康捷信息科技有限公司 基于Gossip通信协议和Raft选举算法的优化方法
CN106878473A (zh) * 2017-04-20 2017-06-20 腾讯科技(深圳)有限公司 一种消息处理方法、服务器集群及系统
CN106878473B (zh) * 2017-04-20 2021-03-30 腾讯科技(深圳)有限公司 一种消息处理方法、服务器集群及系统
CN107343273A (zh) * 2017-07-11 2017-11-10 四川汇源吉迅数码科技有限公司 统一消息分发系统
CN109857747A (zh) * 2018-12-18 2019-06-07 百度在线网络技术(北京)有限公司 数据同步更新方法、系统和计算机设备
CN109857747B (zh) * 2018-12-18 2021-07-13 百度在线网络技术(北京)有限公司 数据同步更新方法、系统和计算机设备

Also Published As

Publication number Publication date
CN102843310B (zh) 2016-01-20

Similar Documents

Publication Publication Date Title
US10764369B2 (en) Data storage method and server applicable to distributed server cluster
CN102843310B (zh) 基于流言协议的广域网中消息的发布、订阅方法和系统
AU2012292068B2 (en) Method and system to maintain strong consistency of distributed replicated contents in a client/server system
JP5498594B2 (ja) フェデレーションインフラストラクチャ内の一貫性
US7644087B2 (en) Method and apparatus for data management
CN102333029B (zh) 一种服务器集群系统中的路由方法
CN106953901A (zh) 一种提高消息传递性能的集群通信系统及其方法
CN101272313B (zh) 进行文件级的虚拟化的中间装置、文件服务器系统和中继方法
US20040153473A1 (en) Method and system for synchronizing data in peer to peer networking environments
JP5548829B2 (ja) 計算機システム、データ管理方法及びデータ管理プログラム
CN101352002A (zh) 使用可缩放对等组来优化通信
CN112069265A (zh) 配置数据的同步方法、业务数据系统、计算机系统和介质
Saito et al. Replication: optimistic approaches
US20090006489A1 (en) Hierarchical synchronization of replicas
CN108563771B (zh) 基于区块链的大文件管理系统及方法
EP3935515A1 (en) Metadata routing in a distributed system
CN112804332B (zh) 消息处理系统、方法、装置、设备及计算机可读存储介质
CN105610947A (zh) 一种高可用分布式队列服务实现方法、装置和系统
CN110213156A (zh) 一种跨中心群组即时通信方法和系统
Xhafa et al. Evaluation of intra‐group optimistic data replication in P2P groupware systems
Xhafa et al. Data replication in P2P collaborative systems
CN107465706B (zh) 一种基于无线通信网络的分布式数据对象存储装置
CN107908713A (zh) 一种基于Redis集群的分布式动态杜鹃过滤系统及其过滤方法
US20230188575A1 (en) Personalized Content Delivery Architecture
Canals et al. XWiki Concerto: A P2P wiki system supporting disconnected work

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230406

Address after: Room 501-502, 5/F, Sina Headquarters Scientific Research Building, Block N-1 and N-2, Zhongguancun Software Park, Dongbei Wangxi Road, Haidian District, Beijing, 100193

Patentee after: Sina Technology (China) Co.,Ltd.

Address before: 100080, International Building, No. 58 West Fourth Ring Road, Haidian District, Beijing, 20 floor

Patentee before: Sina.com Technology (China) Co.,Ltd.