DDS基础介绍
目錄
什么是DDS?
1. 分布式發布/訂閱體系架構
2. 以中間件的形式提供通信服務
3. 強調以數據為中心
4. 提供多種QoS策略
4.1 可靠性(RELIABILITY)
4.2 基于時間過濾(TIME_BASED_FILTER)
4.3 接收端順序(DESTINATION_ORDER)
4.4 持久性(DURABILITY)
什么是DDS?
DDS(Data Distribution Service)數據分發服務:采用分布式發布/訂閱體系架構,以中間件的形式提供通信服務,強調以數據為中心,提供多種QoS策略,保障數據進行實時、高效、靈活的分發,可滿足各種分布式實時通信應用需求。
1. 分布式發布/訂閱體系架構
以上流程圖的解釋說明如下:
1.全局數據空間是一個抽象的概念。
在實現時,數據仍然是分別存儲在每一個應用程序的本地空間中。
在系統運行時,數據是按需傳輸或存儲的,數據的發布者僅僅發送對方需要的數據,訂閱者僅接受本地應用程序中需要的數據。
2.實際場景中,每個應用程序既可以是發布者又可以是訂閱者
2. 以中間件的形式提供通信服務
在分布式系統中,中間件是介于操作系統和應用程序之間的軟件層,使系統的各個組件能夠更容易地通信和共享數據。中間件簡化了分布式系統的開發,使軟件開發人員專注于應用程序的業務本身,而不是花費精力研究應用程序和系統之間傳遞信息的機制。
DDS中間件是一個軟件層,它將應用程序從操作系統、網絡傳輸和底層數據格式的細節中抽象出來。DDS提供多種編程語言的API,允許應用程序跨操作系統、跨語言、跨處理器體系結構交換信息。數據格式、發現匹配機制、連接方式、可靠性、網絡協議、傳輸方式選擇、QoS、安全性等底層細節由中間件管理。
3. 強調以數據為中心
以數據為中心(Data Centricity)的通信中,通信的應用程序間的數據分發是重點。以數據為中心由數據的發布者和訂閱者組成,通信基于已命名的數據流,數據流從發布者向訂閱者傳送已知類型的數據。
簡單的解釋就是,只關心數據,訂閱者只用關心接收訂閱的主題中的數據即可。
以數據為中心的本質是DDS知道它存儲什么數據,并控制如何共享這些數據。數據中心性保證應用程序能夠理解其接收到的數據,因而所有消息都包含應用程序能夠理解其含義所需要的上下文信息。
使用傳統的以消息為中心的中間件的程序員必須編寫發送消息的代碼;而使用以數據為中心的中間件的時,只需指定數據如何共享、何時共享,編寫少量代碼即可直接共享數據值。DDS使用戶無需在應用程序的代碼中管理所有這些復雜的操作,而是直接為用戶實現了受控、托管、安全的數據共享。
不同的DDS域彼此完全獨立,跨DDS域無法進行數據通信。
4. 提供多種QoS策略
QoS(Quality of Service)服務質量:在一個真實系統中,并不是所有其他端點都需要另一個節點本地存儲中的所有內容 ,DDS在提供最基礎的發布訂閱功能之外,還可以根據不同使用場景向用戶提供滿足對應需求的服務。QoS有可靠性、持久性、緊迫性等,可單獨或組合使用
4.1 可靠性(RELIABILITY)
“盡力而為”模式(BEST_EFFORT_RELIABILITY_QOS):對樣本的可靠性沒有任何保證,在某些情況下可能會丟棄樣本。(通俗解釋:在外界環境不穩定的時候,可能會導致丟包,但是DDS為了保證整體數據分發效率,不會重新分發丟包的數據)
“可靠”模式(RELIABLE_RELIABILITY_QOS):該服務最終應將所有值傳遞給合格的數據讀取器。(通俗解釋:萬一出現丟包現象,會重新分發數據,保證訂閱者能夠收到)
重新分發數據表示:修復錯誤并根據需要重新傳輸數據樣本
數據讀取器和主題的此策略的默認值為“盡力而為”,而數據寫入器的默認值為“可靠”。在創建數據寫入者和數據讀取者之間的關聯時會考慮此策略。 關聯雙方的值必須兼容才能創建關聯。 數據寫入器的可靠性類型必須大于或等于數據讀取器的值。
4.2 基于時間過濾(TIME_BASED_FILTER)
過濾出指定時間的數據
例如:某應用會在循環一定時間周期時發布數據,訂閱者只需要關注某一時間發布的數據
4.3 接收端順序(DESTINATION_ORDER)
在網絡抖動等情況下,確保訂閱者能夠按順序接受報文
例如:發送者發送:1 2 3 4 5
特殊情況導致亂序:3 2 1 4 5
需要確保訂閱者收到:1 2 3 4 5
4.4 持久性(DURABILITY)
訂閱者的應用程序離線時,先緩存歷史數據。當訂閱者應用程序上線時,可以接收到緩存中的歷史數據
總結
- 上一篇: 验证控件的学习
- 下一篇: java copy-on-write_C