FastDDS-2.庫概覽



2. 庫概覽

Fast DDS(前身爲Fast RTPS)是DDS規範的高效高性能實現,DDS規範是一種用於分佈式應用軟件的以數據爲中心的通信中間件(DCPS)。本節回顧Fast DDS的體系結構、操作和關鍵特性。



2.1 架構

Fast DDS的架構如下圖所示,其中可以看到具有以下不同環境的層模型。

  • Application Layer. 使用Fast DDS API在分佈式系統中實現通信的用戶應用程序。
  • Fast DDS Layer. DDS通信中間件的穩健實現。它允許部署一個或多個DDS域,在這些域中,同一域中的域參與者通過在域主題下發布/訂閱來交換消息。
  • RTPS Layer. 實時發佈訂閱(RTPS)協議的實現,以實現與DDS應用程序的互操作性。該層充當傳輸層的抽象層。
  • Transport Layer. 快速DDS可用於各種傳輸協議,如不可靠傳輸協議(UDP)、可靠傳輸協議tcp, 或共享內存傳輸協議(SHM)。



2.1.1 DDS層

在DDS層中定義了通信的幾個關鍵元素。用戶將在其應用程序中創建這些元素,從而合併DDS應用程序元素並創建以數據爲中心的通信系統。Fast DDS遵循DDS規範,將通信中涉及的這些元素定義爲實體。DDS實體是支持服務質量配置(QoS)並實現偵聽器的任何對象。

  • QoS. 定義每個實體行爲的機制。
  • Listener. 向實體通知應用程序執行期間可能發生的事件的機制。

下面列出了DDS實體及其描述和功能。有關每個實體、其QoS及其偵聽器的更詳細說明,請參閱DDS層部分。

  • Domain. 標識DDS域的正整數。每個DomainParticipant都將分配一個DDS域,以便同一域中的DomainParticipants可以進行通信,並隔離DDS域之間的通信。此值必須由應用程序開發人員在創建DomainParticipant時提供。
  • DomainParticipant. 包含其他DDS實體(如發佈者、訂閱者、主題和多主題)的對象。它可以創建包含在自己中的實體以及實體的配置。
  • Publisher. 發佈服務器使用DataWriter發佈主題下的數據,DataWriter將數據寫入傳輸。它是創建和配置其包含的DataWriter實體的實體,並且可能包含一個或多個DataWriter實體。
  • DataWriter. 它是負責發佈消息的實體。用戶在創建此實體時必須提供一個主題,該主題將是發佈數據的主題。發佈是通過將數據對象作爲更改寫入DataWriterHistory來完成的。
  • DataWriterHistory. 這是對數據對象的更改列表。當DataWriter繼續發佈特定主題下的數據時,它實際上會對該數據進行更改。歷史記錄中記錄的正是這一更改。然後將這些更改發送到訂閱該特定主題的DataReader。
  • Subscriber. 訂閱服務器使用DataReader訂閱主題,DataReader從傳輸中讀取數據。它是創建和配置其包含的DataReader實體的實體,可以包含一個或多個DataReader實體。
  • DataReader. 它是訂閱出版物接收主題的實體。創建此實體時,用戶必須提供訂閱主題。DataReader接收消息作爲其HistoryDataReader中的更改。
  • DataReaderHistory. 它包含DataReader由於訂閱某個主題而接收的數據對象中的更改。
  • Topic. 將發佈服務器的DataWriter與訂閱服務器的DataReader綁定的實體。


2.1.2 RTPS層

如上所述,Fast DDS中的RTPS協議允許從傳輸層抽象DDS應用實體。根據上面顯示的圖表,RTPS層有四個主要實體。

  • RTPSDomain. 它是RTPS協議對DDS域的擴展。
  • RTPSParticipant. 包含其他RTPS實體的實體。它允許配置和創建包含的實體。
  • RTPSWriter. 消息的來源。它讀取寫入DataWriterHistory中的更改,並將其傳輸到先前匹配的所有RTPSReader。
  • RTPSReader. 消息的接收實體。它將RTPSWriter報告的更改寫入DataReaderHistory。

有關每個實體、其屬性和偵聽器的更詳細說明,請參閱RTPS層部分。



2.1.3 Transport層

Fast DDS支持通過各種傳輸協議實現應用程序。這些是UDPv4、UDPv6、TCPv4、TCPv6和共享內存傳輸(SHM)。默認情況下,DomainParticipant實現UDPv4和SHM傳輸協議。傳輸層部分詳細介紹了所有支持的傳輸協議的配置。



2.2 編程和執行模型

快速DDS是併發的和基於事件的。以下說明了控制Fast DDS操作的多線程模型以及可能的事件。



2.2.1 併發和多線程

Fast DDS實現了一個併發多線程系統。每個DomainParticipant都產生一組線程來處理後臺任務,如日誌記錄、消息接收和異步通信。這不會影響您使用庫的方式,即Fast DDS API是線程安全的,因此您可以從不同的線程無畏地調用同一DomainParticipant上的任何方法。但是,當外部函數訪問由庫內部運行的線程修改的資源時,必須考慮此多線程實現。這方面的一個例子是實體偵聽器回調中修改的資源。以下是Fast DDS多線程調度工作原理的簡要概述:

  • Main thread: 有應用程序管理。
  • Event thread: 每個DomainParticipant都擁有其中一個。它處理週期性和觸發的時間事件。
  • Asynchronous writer thread: 此線程管理所有DomainParticipant的異步寫入。即使對於同步寫入程序,某些形式的通信也必須在後臺啓動。
  • Reception threads: DomainParticipes爲每個接收信道生成一個線程,其中信道的概念取決於傳輸層(例如UDP端口)。


2.2.2 事件驅動架構

有一種時間事件系統,使Fast DDS能夠響應特定條件,並安排定期操作。其中很少對用戶可見,因爲大多數與DDS和RTPS元數據相關。但是,用戶可以通過從TimedEvent類繼承來在應用程序中定義週期性時間事件。



2.3 功能

快速DDS具有一些附加功能,用戶可以在其應用程序中實現和配置這些功能。這些概述如下。



2.3.1 發現協議

發現協議定義了在給定主題下發布的DataWriter和訂閱同一主題的DataReader相匹配的機制,以便它們可以開始共享數據。這適用於通信過程中的任何一點。Fast DDS提供以下發現機制:

  • Simple Discovery. 這是默認的發現機制,在RTPS標準中定義,並提供與其他DDS實現的兼容性。在這裏,DomainParticipant在早期階段被單獨發現,以隨後匹配它們實現的DataWriter和DataReader。
  • Discovery Server. 該發現機制使用集中式發現架構,其中服務器充當元流量發現的中心。
  • Static Discovery. 這實現了對彼此的DomainParticipant的發現,但如果遠程DomainParticipants事先知道每個DomainParticipate(DataReader/DataWriter)中包含的實體,則可以跳過對這些實體的發現。
  • Manual Discovery. 該機制僅與RTPS層兼容。它允許用戶使用其選擇的任何外部元信息通道手動匹配和取消匹配RTPSParticipant、RTPSWriter和RTPSReader。

快速DDS中實現的所有發現協議的詳細說明和配置可以在發現部分中看到。



2.3.2 安全

快速DDS可配置爲通過在三個級別實現可插拔安全性來提供安全通信:

  • Authentication of remote DomainParticipants. DDS:Auth:PKI-DH插件使用可信證書頒發機構(CA)和ECDSA數字簽名算法提供認證,以執行相互認證。它還使用橢圓曲線Diffie-Hellman(ECDH)密鑰協議建立共享密鑰。
  • Access control of entities. DDS:Access:Permissions插件在DDS域和主題級別爲域參與者提供訪問控制。
  • Encryption of data. DDS:Crypto:AES-GCM-GMAC插件在伽羅瓦計數器模式(AES-GCM)中使用高級加密標準(AES)提供認證加密。

有關Fast DDS中安全配置的更多信息,請參閱安全部分。



2.3.3 日誌

Fast DDS提供了一個可擴展的日誌記錄系統。日誌類是日誌系統的入口點。它公開了三個宏定義以便於使用:EPROSIMA_LOG_INFO、EPROSIMA-LOG_WARNING和EPROSIMA.LOG_ERROR。此外,除了已經可用的類別(INFO_MSG、WARN_MSG和ERROR_MSG)之外,它還允許定義新的類別。它使用正則表達式按類別進行過濾,並控制日誌系統的詳細程度。有關可能的日誌記錄系統配置的詳細信息,請參閱日誌記錄部分。



2.3.4 Xml配置

Fast DDS提供了使用XML配置文件更改默認設置的可能性。因此,可以修改DDS實體的行爲,而無需用戶實現任何程序源代碼或重新構建現有應用程序。

用戶具有每個API功能的XML標記。因此,可以通過標記或分別帶有<data_writer>和<data_reader>標記的DataWriter和DataReader配置文件來構建和配置DomainParticipant配置文件。

爲了更好地理解如何編寫和使用這些XML概要文件配置文件,您可以繼續閱讀XML概要文件部分。



2.3.5 環境變量

環境變量是指通過操作系統功能在程序範圍之外定義的變量。Fast DDS依賴於環境變量,因此用戶可以輕鬆自定義DDS應用程序的默認設置。有關影響Fast DDS的環境變量的完整列表和說明,請參閱環境變量部分。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章