數據同步演算法
Ⅰ 有關無線感測器網路中時間同步機制有哪些方法和策略
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游戲外掛多難以根治的主要原因。
而幀同步的游戲整個計算邏輯在客戶端,因此,開掛者因為可以獲得全系統的信息,於是就可以很容易做開圖之類的外掛。