发明内容
本发明的实施例提供了一种基于骨干环的分布式地理位置服务方法,以克服现有技术的问题。
为了实现上述目的,本发明采取了如下技术方案。
一种基于骨干环的分布式地理位置服务方法,包括:
把网络中的移动节点分成多个分组,每个分组选举出一个组头节点;
按照设定算法把所有的组头节点串联成一个环,构成骨干环;
在所述骨干环上周期性地传递最新的组头节点的位置信息,各个组头节点存储并更新其所存储的其他组头节点位置信息;
每个节点通过哈希算法,各自选择某一个组头节点作为位置服务器,每个组头节点上存储选择该组头节点为位置服务器的节点的位置信息;
查询某个节点的位置时,通过哈希算法计算出该某个节点的位置服务器,发送位置查询请求到该某个节点的位置服务器,获得所述某个节点的位置信息。
优选地,所述的把网络中的移动节点分成多个分组,每个分组选举出一个组头节点,包括:
按照设定的分组原则将网络中的所有节点划分成多个组,每个节点只属于一个分组,所述分组原则包括分组的数量尽量少和分组的稳定性尽量高,每个分组选举出一个组头节点,在组头节点中存储包含本组内所有组员节点位置信息的节点位置表,每个节点在其本地数据库中保存有一张存储所有组头节点的位置信息的组头节点位置表;
选举组头节点的方法如下:
当两个节点能够不经过其他节点直接进行通信,称这两个节点互为邻居节点,节点i的邻居集合记作N(i),邻居集合N(i)中节点数量记作ni,其中稳定邻居节点的数量记作定义集合M(i)={j|j∈N(i),且在集合N(i)中,节点j的/>值最大},M(i)中的节点数量记作mi,M(i)中任一节点的稳定邻居数量记作/>
每个节点k从它的邻居中选择一个节点l作为自己的组头节点,k称为l的组员节点,组头节点l和它的所有组员节点构成一个分组Gl,选择组头节点规则如下:
如果则节点i选择自己为组头节点;
如果mj=1;i∈M(j),则节点j选择节点i为组头节点;
如果mj>1;i,k∈M(j);ni≥nk,则节点j选择节点i为组头节点;
无论节点i是否已经选定组头节点,如果节点i被其他节点选择为组头节点,则节点i选择自己为组头节点。
优选地,分组的稳定性取决于节点间的位置稳定度,设节点i和j为邻居节点,二者距离为dij,dij<dmax,dmax为节点之间的最大通信距离,节点i和j之间的视向速度为vij,则节点i和j的位置稳定度计算如下:
tij=(dmax-dij)/vij
设节点的位置稳定度的阈值为th,当tij≥thortij<0时,则判断节点i和j的位置是相对稳定的,称节点i和j互为稳定邻居。
优选地,所述的按照设定算法把所有的组头节点串联成一个环,构成骨干环,包括:
所设定算法维护两个集合,选定节点集合和候选节点集合,所述选定节点集合保存已经加入到骨干环的节点,所述候选节点集合保存准备加入到骨干环的节点,设定算法选取节点ID最小的组头节点作为根节点,一开始,所述选定节点集合只包含根节点,所述候选节点集合为空,所述根节点创建骨干环构建消息RBM,按照设定算法在各个组头节点之间逐次转发RBM消息,逐个将组头节点加入到所述候选节点集合,再从所述候选节点集合转移到所述选定节点集合当中,当所有组头节点都加入到所述选定节点集合,则所有组头节点组成了骨干网。
优选地,所述的选取节点ID最小的组头节点作为根节点,包括:
每个节点会周期性地广播一条邻居消息,把自身和自己的一跳邻居节点都公布出去,每个节点将通过邻居消息学习到的相邻分组的组头节点信息上报给自己的组头节点,每个组头节点都探测到所有相邻分组的组头节点信息;
每个组头节点选择ID最小的邻居组头节点作为根节点,如果一个组头节点的ID小于所有邻居组头节点的ID,则选择自己为根节点,然后通过根节点消息RM把所选择的根节点通告给所有邻居组头节点;
任一组头节点收到RM消息后,对比所收到的根节点ID(id1)和本地存储的根节点ID(id2),如果id1<id2,则更新id2为id1,并通过RM消息通告给所有邻居组头节点;
经过一段时间的洪泛,所有组头节点都会选择ID最小的组头节点作为根节点。
优选地,所述的按照设定算法在各个组头节点之间逐次转发RBM消息,逐次将组头节点从所述候选节点集合转移到所述选定节点集合中,包括:
根节点创建一条空的RBM消息,把自己加入到RBM的选定节点集合,把它的所有邻居节点加入到RBM的候选节点集合,把RBM消息发送给候选节点集合中距离最近自己的节点;
后续节点接收到RBM消息后,把自己从RBM的候选节点集合移动到选定节点集合,把所有不在RBM消息中的邻居节点加入到RBM的候选节点集合,然后把RBM消息发送给候选节点集合中距离最近自己的节点;
重复上一步骤,直到候选节点集合为空,最后加入到选定节点集合的节点把RBM消息发送给根节点;
根节点收到RBM消息后,将选定节点集合中节点按照加入顺序串联起来,首尾连在一起,构成骨干环。
优选地,所述的在所述骨干环上周期性地传递最新的组头节点的位置信息,各个组头节点存储并更新其所存储的其他组头节点位置信息,包括:
骨干环构建完成后,将组头位置更新消息LPUM周期性地沿着骨干环进行传递,所述LPUM消息包含了所有组头节点的最新位置信息;
每个组头节点在其本地数据库中保存有一张用于存储所有组头节点的位置信息的组头节点位置表,当一个组头节点接收到LPUM消息后,首先更新自己的组头节点位置表,把自己的当前位置写入到LPUM消息中,再把该LPUM消息传递给骨干环中的下一个组头节点。
优选地,所述的每个节点通过哈希算法,各自选择某一个组头节点作为位置服务器,每个组头节点存储选择该组头节点作为位置服务器的节点的位置信息,包括:
每个节点通过哈希算法,各自选择某一个组头节点作为位置服务器,所有节点采用同一个哈希函数,把全部网络节点分别映射到不同的组头节点上面,哈希函数形式如下:
根据上述哈希函数,节点k选择组头节点hk作为位置服务器,并通过节点位置映射消息把自己的位置信息<k,lk>上传给hk,lk是k的组头节点,hk把<k,lk>信息存储在本地数据库的节点分组表中;
当网络拓扑发生变化时,节点可能会从一个分组迁移到另外一个分组,当节点k所属分组发生变化时,需要重新计算其位置服务器hk;
每个组头节点上存储选择该组头节点为位置服务器的节点的位置信息。
优选地,所述的查询某个节点的位置时,通过哈希算法计算出该某个节点的位置服务器,发送位置查询请求到该某个节点的位置服务器,获得所述某个节点的位置信息,包括:
当节点k需要发送消息给目的节点d时,节点k通过与位置映射相同的哈希函数计算出节点d的位置服务器hd;
节点k查询自己的组头节点位置表,获得hd的地理位置,向hd发送位置查询消息Qk,d;
hd查询节点分组表,得到节点d的组头节点ld,再查询组头节点位置表表,获得ld的地理位置,转发位置查询消息Qk,d给ld;
ld根据Qk,d,查询本地数据库的节点位置表得到节点d的地理位置,将节点d的地理位置通过位置应答消息Rk,d发送给节点k。
由上述本发明的实施例提供的技术方案可以看出,本发明实施例的一种分布式的地理位置服务方法只需要周期性地更新骨干环上的组头节点位置信息,就可以提供及时的位置服务,具有网络开销小,位置更新速度快的优点。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个实施例并不构成对本发明实施例的限定。
本发明实施例基于地理位置的路由协议,提出了一种基于骨干环的分布式地理位置服务方法,该方法的主要内容包括:
把网络中的移动节点分成多个分组(Group),每个分组选举出一个组头节点(GroupLeader,GL);按照设定算法把GL节点串联成一个环,构为骨干环(BackboneRing,BR);
骨干环上周期性地传递最新的组头位置信息,用于更新每个组头节点上所存储的其他组头节点位置;
每个节点通过哈希算法,各自选择某一个组头节点作为位置服务器,每个组头节点存储选择该组头节点为位置服务器的节点的位置信息;
查询某个节点的位置时,首先通过哈希算法计算出该节点的位置服务器,然后发送查询请求到该位置服务器,完成节点位置的查询工作。
1)节点分组
图1为本发明实施例提供的一种节点分组示意图。网络中的所有节点划分成多个组,每个节点属于且仅属于一个分组。每个分组选择且仅选择一个节点作为组头节点,其他节点作为组员节点。组头节点可以一跳和组内的其他组员节点直接通信,在组头节点中存储包含本组内所有组员节点位置信息的节点位置表(Node PositionTable,NPT)。
网络中的两个节点可以不经过其他节点直接进行通信,称这两个节点互为邻居节点。整个网络构成一个连通图G,G={V,E}。其中V表示所有节点的集合,E表示邻居节点间的无线通信链路集合。
本发明按照如下目标进行分组:
O1:分组的数量尽量少;
O2:分组的稳定性尽量高。
分组的稳定性取决于节点间的位置稳定度。设节点i和j为邻居节点,二者距离为dij,dij<dmax,视向速度为vij。节点i和j的位置稳定度计算如下:
tij=(dmax-dij)/vij
视向速度表示两个节点间距离的变化速度(变化率),距离变大取值为正,距离缩小取值为负。稳定度tij的物理含义是:节点i和j以当前视向速度运动时,预计tij时间后,二者间的距离超出最大通信距离dmax。当二者相向运动,vij<0,tij<0。设位置稳定度的阈值为th,当tij≥thortij<0时,节点i和j的位置是相对稳定的,称节点i和j互为稳定邻居。
节点i的邻居集合记作N(i),邻居集合N(i)中节点数量记作ni,其中稳定邻居节点的数量记作定义集合M(i)={j|j∈N(i),且在集合N(i)中,节点j的/>值最大}。M(i)是N(i)的子集,是N(i)中具有最多的稳定邻居数量的节点的集合,M(i)中的节点数量记作mi,M(i)中任一节点的稳定邻居数量记作/>
每个节点k从它的邻居中选择一个节点l作为自己的组头节点,k称为l的组员节点。组头节点l和它的所有组员节点构成一个分组Gl。选择组头节点规则如下:
如果则节点i选择自己为组头节点;
如果mj=1;i∈M(j),则节点j选择节点i为组头节点;
如果mj>1;i,k∈M(j);ni≥nk,则节点j选择节点i为组头节点;
无论节点i是否已经选定组头节点,如果i被其他节点选择为组头节点,则节点i选择自己为组头节点。
2)构建骨干环
本发明把所有组头节点组成一个新的网络,称为骨干网,如图2所示。在该骨干网中,组头节点之间的连线表示两个分组是邻居分组,连线上的数字表示距离。
图3为本发明实施例提供的一种邻居分组示意图。设有分组GA和GB,A和B分别是GA和GB的组头节点,GA存在任一个节点i,GB存在任一个节点j,若节点i和节点j是邻居节点,则称分组GA和GB是邻居分组,A和B是邻居组头节点,如图3所示。
相邻的组头节点A和B之间通过组员节点i和j学习邻居关系,交互位置信息。每个节点会通过电台周期性地广播一条邻居消息(NeighborMessage,NM),把自身和自己的一跳邻居节点都公布出去。节点i公布的邻居消息表如下:
表1:邻居消息示例
ID |
组头节点ID |
类型 |
位置 |
i |
A |
组员 |
x1,y1,z1 |
A |
A |
组头 |
x2,y2,z2 |
j |
B |
组员 |
x3,y3,z3 |
通过NM消息,节点i和j可以分别学习到相邻分组的组头节点B和A的位置信息,然后上报给自己的组头节点。通过这一方法,每个组头节点都探测到所有相邻分组的组头节点。
骨干网首先选取节点ID最小的组头节点作为根节点,然后从根节点出发,逐渐构建出骨干环。选择根节点方法如下:
每个组头节点选择ID最小的邻居组头节点作为根节点,如果一个组头节点的ID小于所有邻居组头节点的ID,则选择自己为根节点,然后通过根节点消息(RootMessage,RM)把所选择的根节点通告给所有邻居组头节点。
任一组头节点收到RM消息后,对比所收到的根节点ID(id1)和本地存储的根节点ID(id2),如果id1<id2,则更新id2为id1,并通过根节点消息RM通告给所有邻居组头节点。
经过一段时间的洪泛,所有组头节点都会选择ID最小的组头节点作为根节点。
本发明采用一种距离最近优先的分布式算法构造骨干环。算法维护两个集合,选定节点集合和候选节点集合。选定节点集合保存已经加入到骨干环的节点,候选节点集合保存准备加入到骨干环的节点。一开始,选定节点集合只包含根节点,候选节点集合为空。算法逐个把组头节点加入到候选节点集合,再从候选节点集合转移到选定节点集合当中。当所有组头节点都加入到选定节点集合,则完成骨干环的构建。
算法维护一条骨干环构建(Ring BuildMessage,RBM)消息,用于封装选定节点集合和候选节点集合信息,并在节点之间传递。RBM消息首先由根节点创建,逐次转发给新加入骨干环的节点,最后返回根节点。
算法步骤如下:
1.根节点创建一条空的RBM消息,把自己加入到RBM的选定节点集合,把它的所有邻居节点加入到RBM的候选节点集合。然后把RBM消息发送给候选节点集合中距离最近自己的节点。
2.后续节点接收到RBM消息后,把自己从RBM的候选节点集合移动到选定节点集合,把所有不在RBM消息中的邻居节点加入到RBM的候选节点集合。然后把RBM消息发送给候选节点集合中距离最近自己的节点。
3.重复上一步骤,直到候选节点集合为空。最后加入到选定节点集合的节点把RBM消息发送给根节点。
4.根节点收到RBM消息,完成骨干环的创建。选定节点集合中节点按照加入顺序串联起来,首尾连在一起,构成骨干环。
图4为本发明实施例提供的一种骨干环示意图。图2所示骨干网使用上述方法构建骨干环的过程和最后构建出来的骨干环如下表所示。
表2:骨干环构建过程
3)位置更新
骨干环构建完成后,组头位置更新消息(LeaderPosition Update Message,LPUM)周期性地沿着骨干环进行传递。一条LPUM消息包含了所有组头节点的最新位置信息。
每个节点在其本地数据库中保存有一张组头节点位置表(LeaderPositionTable,LPT),用于存储所有组头节点的位置信息。
当一个组头节点接收到LPUM消息后,首先更新自己的LPT,然后把自己的当前位置写入到LPUM中,再把该LPUM传递给骨干环中的下一个组头节点。当组员节点接收到本组的组头节发送的LPUM消息后,更新自己的LPT。
4)位置映射
组头节点作为位置服务器,提供位置服务。每个组头节点负责为网络的一部分节点提供位置服务。本发明中所有节点采用同一个哈希函数,把全部网络节点分别映射到不同的组头节点上面。本发明对该哈希函数的具体实现方式不做要求,哈希函数形式如下:
根据上述哈希函数,节点k选择组头节点hk作为位置服务器,并通过节点位置映射消息(Node Position Mapping Message,NPMM)把自己的位置信息<k,lk>上传给hk,lk是k的组头节点。hk把<k,lk>信息存储在本地数据库的节点分组表(NodeGrouping Table,NGT)中。
当网络拓扑发生变化时,节点可能会从一个分组迁移到另外一个分组。当节点k所属分组发生变化时,需要重新计算其位置服务器hk。
5)位置查询
图5为本发明实施例提供的一种位置查询过程示意图。在GPSR路由协议中,节点k发送消息给目的节点d,首先要查询d的地理位置。步骤如下:
第一步,节点k通过与位置映射相同的哈希函数计算出节点d的位置服务器hd。
第二步,节点k查询自己的LPT表,获得hd的地理位置,向hd发送位置查询消息(Location Query Message,LQM)Qk,d。
第三步,hd查询NGT表,得到节点d的组头节点ld,在查询LPT表,获得ld的地理位置。转发位置查询消息Qk,d给ld。
第四步,ld根据Qk,d,查询本地数据库的NPT得到节点d的地理位置,通过位置应答消息(LocationResponseMessage,LRM)Rk,d发送给节点k。
6)节点间通信
本发明中,除了一些广播消息(比如NM消息)外,不同节点之间的通信,路由选路过程全部采用GPSR路由协议完成。GPSR协议只需要知道目的节点的地理位置,就可以完成路由选路过程。
在位置服务过程中,以下消息需要使用GPSR路由协议。
·RBM消息。
·LPUM消息
·NPMM消息
·LQM消息
·LRM消息
节点在发送上述消息之前,俱已获知目的节点的地理位置。
综上所述,本发明实施例通过节点分组、构建骨干环和分布式位置服务器等技术手段,实现一种分布式的地理位置服务方法。该方法只需要周期性地更新骨干环上的组头节点位置信息就可以提供及时的位置服务,具有网络开销小,位置更新速度快的优点。另外,本发明采用分布式的方法,由多个节点作为位置服务器提供位置服务,避免了单一位置服务器方式存在的服务器负担重,容易出现负载瓶颈和单点故障问题,系统具有更好的可靠性和扩展性。最后,本发明所提出的骨干环结构简单,易于实现,可以有效降低大规模网络的地理位置服务成本。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。