数据同步算法
Ⅰ 有关无线传感器网络中时间同步机制有哪些方法和策略
1 时间同步技术的重要性
传感器节点的时钟并不完美,会在时间上发生漂移,所以观察到的时间对于网络中的节点来说是不同的。但很多网络协议的应用,都需要一个共同的时间以使得网路中的节点全部或部分在瞬间是同步的。
第一,传感器节点需要彼此之间并行操作和协作去完成复杂的传感任务。如果在收集信息过程中,传感器节点缺乏统一的时间戳(即没有同步),估计将是不准确的。
第二,许多节能方案是利用时间同步来实现的。例如,传感器可以在适当的时候休眠(通过关闭传感器和收发器进入节能模式),在需要的时候再唤醒。在应用这种节能模式的时候,节点应该在同等的时间休眠和唤醒,也就是说当数据到来时,节点的接收器可以接收,这个需要传感器节点间精确的定时。
2 时间同步技术所关注的主要性能参数
时间同步技术的根本目的是为网络中节点的本地时钟提供共同的时间戳。对无线传感器
网络WSN(Wireless Sensor Networks)[1]
的时间同步应主要应考虑以下几个方面的问题:
(1)能量效率。同步的时间越长,消耗的能量越多,效率就越低。设计WSN的时间同步算法需以考虑传感器节点有效的能量资源为前提。
(2) 可扩展性和健壮性。时间同步机制应该支持网络中节点的数目或者密度的有效扩展,并保障一旦有节点失效时,余下网络有效且功能健全。
(3)精确度。针对不同的应用和目的,精确度的需求有所不用。
(4)同步期限。节点需要保持时间同步的时间长度可以是瞬时的,也可以和网络的寿命一样长。
(5)有效同步范围。可以给网络内所有节点提供时间,也可以给局部区域的节点提供时间。
(6)成本和尺寸。同步可能需要特定的硬件,另外,体积的大小也影响同步机制的实现。 (7)最大误差。一组传感器节点之间的最大时间差,或相对外部标准时间的最大差。 3 现有主要时间同步方法研究
时间同步技术是研究WSN的重要问题,许多具体应用都需要传感器节点本地时钟的同步,要求各种程度的同步精度。WSN具有自组织性、多跳性、动态拓扑性和资源受限性,尤其是节点的能量资源、计算能力、通信带宽、存储容量有限等特点,使时间同步方案有其特
殊的需求,也使得传统的时间同步算法不适合于这些网络[2]
。因此越来越多的研究集中在设
计适合WSN的时间同步算法[3]
。针对WSN,目前已经从不同角度提出了许多新的时间同步算法[4]
。
3.1 成对(pair-wise)同步的双向同步模式
代表算法是传感器网络时间同步协议TPSN(Timing-Sync Protocol for Sensor
Networks)[5~6]
。目的是提供WSN整个网络范围内节点间的时间同步。
该算法分两步:分级和同步。第一步的目的是建立分级的拓扑网络,每个节点有个级别。只有一个节点与外界通信获取外界时间,将其定为零级,叫做根节点,作为整个网络系统的时间源。在第二步,每个i级节点与i-1(上一级)级节点同步,最终所有的节点都与根节点同步,从而达到整个网络的时间同步。详细的时间同步过程如图 1 所示。
图1 TPSN 同步过程
设R为上层节点,S为下层节点,传播时间为d,两节点的时间偏差为θ。同步过程由节点R广播开始同步信息,节点S接收到信息以后,就开始准备时间同步过程。在T1时刻,节点S发送同步信息包,包含信息(T1),节点R在T2接收到同步信息,并记录下接收时间T2,这里满足关系:21TTd
节点R在T3时刻发送回复信息包,包含信息(T1,T2,T3)。在T4时刻S接收到同步信息包,满足关系:43TTd
最后,节点S利用上述2个时间表达式可计算出的值:(21)(43)2
TTTT
TPSN由于采用了在MAC层给同步包标记时间戳的方式,降低了发送端的不确定性,消除了访问时间带来的时间同步误差,使得同步效果更加有效。并且,TPSN算法对任意节点的同步误差取决于它距离根节点的跳数,而与网络中节点总数无关,使TPSN同步精度不会随节点数目增加而降级,从而使TPSN具有较好的扩展性。TPSN算法的缺点是一旦根节点失效,就要重新选择根节点,并重新进行分级和同步阶段的处理,增加了计算和能量开销,并随着跳数的增加,同步误差呈线性增长,准确性较低。另外,TPSN算法没有对时钟的频差进行估计,这使得它需要频繁同步,完成一次同步能量消耗较大。
3.2 接收方-接收方(Receiver-Receiver)模式
代表算法是参考广播时间同步协议RBS(Reference Broadcast Synchronization)[7]
。RBS是典型的基于接收方-接收方的同步算法,是Elson等人以“第三节点”实现同步的思想而提出的。该算法中,利用无线数据链路层的广播信道特性,基本思想为:节点(作为发
送者)通过物理层广播周期性地向其邻居节点(作为接收者)发送信标消息[10]
,邻居节点记录下广播信标达到的时间,并把这个时间作为参考点与时钟的读数相比较。为了计算时钟偏移,要交换对等邻居节点间的时间戳,确定它们之间的时间偏移量,然后其中一个根据接收
到的时间差值来修改其本地的时间,从而实现时间同步[11]
。
假如该算法在网络中有n个接收节点m个参考广播包,则任意一个节点接收到m个参考包后,会拿这些参考包到达的时间与其它n-1个接收节点接收到的参考包到达的时间进行比较,然后进行信息交换。图2为RBS算法的关键路径示意图。
网络接口卡
关键路径
接收者1
发送者
接收者2
图2 RBS算法的关键路径示意图
其计算公式如下:
,,1
1,:[,]()m
jkikkinjnoffsetijTTm
其中n表示接收者的数量,m表示参考包的数量,,rbT表示接收节点r接收到参考包b时的时钟。
此算法并不是同步发送者和接收者,而是使接收者彼此同步,有效避免了发送访问时间对同步的影响,将发送方延迟的不确定性从关键路径中排除,误差的来源主要是传输时间和接收时间的不确定性,从而获得了比利用节点间双向信息交换实现同步的方法更高的精确度。这种方法的最大弊端是信息的交换次数太多,发送节点和接收节点之间、接收节点彼此之间,都要经过消息交换后才能达到同步。计算复杂度较高,网络流量开销和能耗太大,不适合能量供应有限的场合。
3.3 发送方-接收方(Sender-Receiver)模式
基于发送方-接收方机制的时间同步算法的基本原理是:发送节点发送包含本地时间戳的时间同步消息,接收节点记录本地接收时间,并将其与同步消息中的时间戳进行比较,调整本地时钟。基于这种方法提出的时间同步算法有以下两种。
3.3.1 FTSP 算法[8]
泛洪时间同步协议FTSP(Flooding Time Synchronization Protocol)由Vanderbilt大学Branislav Kusy等提出,目标是实现整个网络的时间同步且误差控制在微秒级。该算法用单个广播消息实现发送节点与接收节点之间的时间同步。
其特点为:(1)通过对收发过程的分析,把时延细分为发送中断处理时延、编码时延、传播时延、解码时延、字节对齐时延、接收中断处理时延,进一步降低时延的不确定度;(2)通过发射多个信令包,使得接收节点可以利用最小方差线性拟合技术估算自己和发送节点的频率差和初相位差;(3)设计一套根节点选举机制,针对节点失效、新节点加入、拓扑变化
等情况进行优化,适合于恶劣环境[12]
。
FTSP算法对时钟漂移进行了线性回归分析。此算法考虑到在特定时间范围内节点时钟晶振频率是稳定的,因此节点间时钟偏移量与时间成线性关系,通过发送节点周期性广播时间同步消息,接收节点取得多个数据对,构造最佳拟合直线,通过回归直线,在误差允许的时间间隔内,节点可直接通过它来计算某一时间节点间的时钟偏移量而不必发送时间同步消息进行计算,从而减少了消息的发送次数并降低了系统能量开销。
FTSP结合TPSN和RBS的优点,不仅排除了发送方延迟的影响,而且对报文传输中接收方的不确定延迟(如中断处理时间、字节对齐时间、硬件编解码时间等)做了有效的估计。多跳的FTSP协议采用层次结构,根节点为同步源,可以适应大量传感器节点,对网络拓扑结构的变化和根节点的失效有健壮性,精确度较好。该算法通过采用MAC层时间戳和线性回归偏差补偿弥补相关的错误源,通过对一个数据包打多个时戳,进而取平均和滤除抖动较大的时戳,大大降低了中断和解码时间的影响。FTSP 采用洪泛的方式向远方节点传递时间基准节点的时间信息,洪泛的时间信息可由中转节点生成,因此误差累积不可避免。另外,FTSP的功耗和带宽的开销巨大。
3.3.2 DMTS 算法[9]
延迟测量时间同步DMTS (delay measurement time synchronization) 算法的同步机制是基于发送方-接收方的同步机制。DMTS 算法的实现策略是牺牲部分时间同步精度换取较低的计算复杂度和能耗,是一种能量消耗轻的时间同步算法。
DMTS算法的基本原理为:选择一个节点作为时间主节点广播同步时间,所有接收节点通过精确地测量从发送节点到接收节点的单向时间广播消息的延迟并结合发送节点时间戳,计算出时间调整值,接收节点设置它的时间为接收到消息携带的时间加上广播消息的传输延迟,调整自己的逻辑时钟值以和基准点达成同步,这样所有得到广播消息的节点都与主节点进行时间同步。发送节点和接收节点的时间延迟dt可由21()dtnttt得出。其中,nt为发送前导码和起始字符所需的时间,n为发送的信息位个数,t为发送一位所需时间;1t为接收节点在消息到达时的本地时间;2t为接收节点在调整自己的时钟之前的那一时刻记录的本地时间,21()tt是接收处理延迟。
DMTS 算法的优点是结合链路层打时间戳和时延估计等技术,消除了发送时延和访问时延的影响,算法简单,通信开销小。但DMTS算法没有估计时钟的频率偏差,时钟保持同步的时间较短,没有对位偏移产生的时间延迟进行估计,也没有消除时钟计时精度对同步精度的影响,因此其同步精度比FTSP略有下降,不适用于定位等要求高精度同步的应用。
基于发送方-接收方单向同步机制的算法在上述三类方法中需要发送的时间同步消息数目最少。发送节点只要发送一次同步消息,因而具有较低的网络流量开销和复杂度,减少了系统能耗。
4 结论
文章介绍了WSN时间同步算法的类型以及各自具有代表性的算法,分析了各算法的设计原理和优缺点。这些协议解决了WSN中时间同步所遇到的主要问题,但对于大型网络,已有的方法或多或少存在着一些问题:扩展性差、稳定性不高、收敛速度变慢、网络通信冲突、能耗增大。今后的研究热点将集中在节能和时间同步的安全性方面。这将对算法的容错性、有效范围和可扩展性提出更高的要求。
Ⅱ java 分布式数据同步通过什么实现的
Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。
具体来说,它具有如下特性:
简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。
下面我们将重点介绍Java语言的面向对象、平台无关、分布式、多线程、可靠和安全等特性。
1.面向对象
面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。
所有面向对象编程语言都支持三个概念:封装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的数据,行为表示对象的方法(其作用是处理数据或同外界交互)。所谓封装,就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。
多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。运算符重载(operatoroverload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java最后还是把它取消了。
继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的“父亲”,而这些子实体则是汽车的“孩子”。Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。
2平台无关性
Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。
Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。(目前,SUN系统公司已经设计实现了Java芯片,主要使用在网络计算机NC上。
另外,Java芯片的出现也会使Java更容易嵌入到家用电器中。)JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。另外,Java采用的是基于IEEE标准的数据类型。通过JVM保证数据类型的一致性,也确保了Java的平台无关性。
Java的平台无关性具有深远意义。首先,它使得编程人员所梦寐以求的事情(开发一次软件在任意平台上运行)变成事实,这将大大加快和促进软件产品的开发。其次Java的平台无关性正好迎合了“网络计算机”思想。如果大量常用的应用软件(如字处理软件等)都用Java重新编写,并且放在某个Internet服务器上,那么具有NC的用户将不需要占用大量空间安装软件,他们只需要一个
Java解释器,每当需要使用某种应用软件时,下载该软件的字节代码即可,运行结果也可以发回服务器。目前,已有数家公司开始使用这种新型的计算模式构筑自己的企业信息系统。
3分布式
分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。
Java支持WWW客户机/服务器计算模式,因此,它支持这两种分布性。对于前者,Java提供了一个叫作URL的对象,利用这个对象,你可以打开并访问具有相同URL地址上的对象,访问方式与访问本地文件系统相同。对于后者,Java的applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。
Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便得实现Java的分布式特性。
4可靠性和安全性
Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java虽然源于C++,但它消除了许多C++不可靠因素,可以防止许多编程错误。首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界,最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务便于恢复。
由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。
上述几种机制结合起来,使得Java成为安全的编程语言。
5多线程
线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的可并发执行的单位。
C和C++采用单线程体系结构,而Java却提供了多线程支持。
Java在两方面支持多线程。一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。Java的线程还包括一组同步原语。这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率。必须注意地是,Java的多线程支持在一定程度上受运行时支持平台的限制。例如,如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。
希望对你有帮助!
Ⅲ 数据库不同的表同步,如何保证数据不会丢失
在保障MySQL高可用时, 数据零丢失是某些场景比较关心的指标, 一种常用的方案是用半同步插件并将超时时间调整的比较大. 这种用法可以保障一定场景内的数据零丢失, 不过会丧失一定运维性(需要实时监控半同步插件的状况, 不能简单地通过`show slave status`获取), 也会丧失一定的架构健壮性(需要考虑备机故障时将高可用性降级, 维持业务连续性).
除了上面的特性丧失, 还有一个比较稀有的场景需要考虑, 就是网络的健壮性.
Ⅳ GoodSync文件夹如何同步
Goodsync是一个高效文件同步工具,GoodSync可以实现两台电脑或者电脑与U盘之间的数据和文件的同步转换。通过此工具,可以备份U盘中中的数据或者其他文件到个人电脑的硬盘上。支持简体中文界面。GoodSync是一款使用创新同步算法进行桌面PC,膝上电脑,及U盘或其他存储设备之间同步的软件工具。今天小编为大家介绍的是GoodSync文件夹同步教程.
Goodsync推荐下载地址:http://www.gezila.com/ruanjian/xitong/69075.html
基本设置
步骤
1:
点击两侧
浏览
按钮以选定需要同步的双方文件夹。
步骤
2:
点击
分析
按钮GoodSync将计算出需要同步的文件并列示出来。
步骤
3:
当同步文件准备就绪之后,点击
同步
按钮。
自动设置
--
一次设置,永久省事!
这里有多种自动设置的方案可供你选择。你只需根据你的想法和时间安排设置好同步任务,仅此一次,以后GoodSync将按照你的要求自动进行文件同步。
步骤
1:
选择
任务
>>
选项,即可打开选项设置界面。
步骤
2:
点击
"自动"
标签即可选择你所需要的自动操作功能。
GoodSync
现在将根据你指定的设置进行文件自动同步。
小编推荐:GoodSync文件同步工具破解版教程
更多Goodsync(文件同步工具)教程,尽在同步软件
http://www.gezila.com/special/tongburuanjian
Ⅳ 简述aloha算法和时隙aloha算法的基本原理和它们之间的区别
纯ALOHA算法的基本思想即只要有数据待发,就可以发送。而时隙ALOHA算法是将时间分为离散的时间段,每段时间对应一帧,这种方法必须有全局的时间同步。
ALOHA算法信道吞吐率: S=G.e-2G
时隙ALOHA算法信道吞吐率: S=G.e-G
Ⅵ 关于网络游戏中的同步机制
当我们在做一些跟网络游戏相关的机器学习任务的时候,有时需要对整个游戏系统的运行机制有所了解才能更好的应对,对于网游而言,首当其冲的机制便是同步了。当然,大部分的机器学习从业者是不会懂游戏开发的,更不会不懂同步机制,此文我将基于我个人的一些研究和理解对网游中的同步机制做一个简单的介绍,以便大家更加顺利的开展游戏相关的机器学习任务。
与单机游戏不同,网络游戏有很多人通过远程的方式参与游戏,不管是服务器还是玩家,用的都是自己独立的设备,也就是说所有的客户端和服务器都是各自独立的游戏世界,要让游戏玩下去就得保证所有的游戏世界都是一致的,于是便有了 同步 。
在理想的情况下,所有人操作的游戏世界,在同一时刻应该是完全步调一致的,但由于网络延迟以及其他不同设备环境的差异,完全一致时不可能的,而 同步 的目的是希望尽可能的一致,而对一致性的要求,不同的游戏类型也会有不同的要求。
通常帧同步和状态同步是这样区分的:
当然这两种方式并非是非此即彼的,在一些复杂的网络游戏中,混用两种方式也是比较常见的。
尽管为了游戏体验,游戏客户端可能会做很多体验上的改进操作,跟我下面讲的并不会完全一致,但归根揭底,帧同步和状态同步必然会遵循上述几点,在设计算法时无需在意那些为了优化体验的细节。
以下是一些具有代表性游戏的同步方式:
帧同步是比较容易理解的,所有的客户端都是一个完整独立的系统,并且我们指导游戏中的随机性均是伪随机,在seed确定的情况下,每个系统的状态的改变只取决于游戏的输入,也就是说我们通过服务器来转发所有玩家的操作输入客户端游戏系统,那么就能保障所有的客户端都是同步的。
比如某个时刻,玩家0做了操作x, 整个同步过程如下:
显而易见的,因为只同步了用户的操作,这个数据传输量其实是很少的,所以很省流量,除非玩家特别多...
对于绝大多数的状态同步游戏,它的逻辑计算完全放在服务器上,因此也十分好理解。客户端只是相当于一个表现层,用来展示服务器发送过来的数据。就像我们打开一个网页,网页上的数据都是从服务器发过来的,因此我们本地是没办法作弊的,除非黑了服务器,因此这种状态同步的游戏基本上是没有外挂的。
但是有一种特殊的情况,就是FPS类型的游戏,如果靠服务器来运算,整个延迟下来就没法正常玩了...因此它的战斗逻辑会在客户端,而只向服务器汇报结果,因此类似吃鸡的这种游戏会有很多的外挂。
对于战斗逻辑在服务器的状态同步游戏,它的安全性是十分高的,因为想作弊就得黑入服务器,这个难度可想而知。但是FPS类型游戏部分战斗逻辑在客户端,这个会好被外挂修改,这也是FPS游戏外挂多难以根治的主要原因。
而帧同步的游戏整个计算逻辑在客户端,因此,开挂者因为可以获得全系统的信息,于是就可以很容易做开图之类的外挂。