DDS(data distribution service,数据分发服务)简介,面试字节跳动Golang工程师该怎么准备

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

不同协议的比较(Different Protocols)

物联网应用通常考虑使用几种专门的消息传递/数据共享协议,包括

消息队列遥测传输(MQTT),一种依赖于代理的发布/订阅消息传递协议,设计用于TCP/IP

高级消息队列协议(AMQP),它定义了在两个网络进程(通常是客户端和代理)之间传输消息的有效的二进制对等协议

约束应用协议(CoAP)是一种软件协议,旨在支持简单的低功耗电子设备(例如无线传感器)与基于互联网的系统的连接

下表提供了上述技术的比较。这些物联网协议中有许多是为简化而设计的,因此只能支持非常有限的一组用例。另一方面,DDS是功能丰富的标准,可以透明地处理IoT系统的许多数据连接复杂性,因此简化了开发人员的工作。

img

DDS:正确的选择(DDS:The Right Choice )

许多真实的系统包括设备,服务器,移动节点等等。他们有不同的沟通需求,但是在可能的情况下使用单一的沟通模式会更好,更轻松。系统设计者应确定哪种协议满足其预期的主要应用场景。然后,将该主要协议扩展应用到系统的其他设备和软件中。

例如,设备间数据使用与设备数据收集是不同的用例场景。打开电灯开关的要求(最好是使用CoAP)与管理该电源的生成(最好是使用DDS),监视传输线(最好使用MQTT)或在数据中心内通信电源使用(最好使用AMQP)的要求有很大不同。

总体而言,DDS是这些协议中最通用的。它可以管理微型设备,连接大型高性能传感器网络,并对时间要求严格的控制回路。它还可以应用于云端服务,并从云端接收数据。

DDS通信是点到点对等的。消除消息代理和服务器简化了部署,最小化了通信延迟,最大化了可扩展性,提高了可靠性,并降低了成本和复杂性。使用DDS确实需要构建一个数据模型并理解以数据为中心的原理。DDS非常适合需要持久、可靠、高性能体系结构的物联网应用。

DDS的技术优势

简化工业级物联网及消费级物联网系统的设计、开发和集成(Simplify Design, Implementation, and Integration of Industrial and Consumer IoT Systems)

DDS使用全局数据空间,允许应用程序在可靠性、实时性完全可控的情况下共享信息。DDS中间件全面负责数据的分发(从生产者到消费者),以及数据的管理(例如为后期加入的应用程序维护非易失性(non-volatile)数据)。在物联网系统的整个生命周期中,降低复杂性的好处显而易见。

简化建模和设计(Simplify Modeling and Design )

在建模和设计过程中,DDS允许您:

使用主题和类型以结构化,标准化的方式捕获特定于域的信息

用服务质量(qualityofservice,QoS)策略对这些信息(其语法)进行注释,这些策略是非功能性属性,定义了时间、紧急性、可靠性和持久性等特殊和临时属性

由此得到的DDS信息模型非常有价值。开发人员可以使用它来帮助构建可重用的软件组件。您还可以使用它与最终用户共享系统属性和需求。

简化开发(Simplify Development )

在开发过程中,DDS允许您:

处理任何应用程序的数据输入和输出,使开发人员专注于业务逻辑,而不需要花费精力实现数据提供者和数据使用者之间的连接关系(包括时间、位置、内容等)

根据类型构造数据,使应用程序对所需数据表达细粒度的兴趣(及时性,内容);传统的面向消息的中间件只能处理不透明的消息,而不能过滤数据。

以容错方式管理非易失性(non-volatile)数据;如果应用程序使用DDS发布其内部状态信息,它们可以很容易变得既可重新启动(re-startable)又可重新分配(re-allocatable)。

在冗余发布者之间无缝仲裁,并支持冗余使用者;它有助于自动故障转移,而又不会增加应用程序的复杂性。

80%的典型网络代码专用于处理数据选择和错误。DDS通过将这种复杂性从应用程序代码中抽象出来,从而加快了开发速度。

简化系统集成(Simplify System Integration )

系统集成取决于数据可用性。在此过程中,DDS允许您:

自动发现数据源和数据接收者,并确保数据生成者满足QoS要求,以便在正确的时间将正确的数据提供到正确的位置。

使用配置和监视实用程序,通过配置逻辑DDS属性(紧急程度、重要性、分区)和物理属性(优先级通道、调度类、多播组)之间的(动态)映射,在不影响应用程序的情况下,实现最佳的部署。

系统集成本质上是DDS的免费好处。无处不在的信息可用性允许自发集成,包括动态发现和相关的QoS匹配。

简化系统部署和演进(Simplify System Deployment and Evolution)

在集成新的和遗留的元素时,复杂的系统为部署带来了挑战。DDS允许您:

采用以数据为中心的方法,通过简单而强大的信息模型,实现空间(位置)和时间(频率)依赖性的解耦。

在运行时确认并集成新的和计划外的应用程序,而又不影响现有的数据模型,从而能够将新功能自发地集成到系统中。

识别并转换新旧版本与应用程序之间不匹配的数据类型,以实现大型分布式系统的增量升级。

以数据为中心的方法和共享数据模型所包含的抽象手段加快了开发速度,并实现了动态部署和渐进式升级。

简化安全性(Simplify Security)

DDS支持无缝安全性。在正常操作期间,DDS通过名称或值查找数据并建立连接。 Secure DDS仅记录并执行这些关系。它允许您:

使用标准的DDS API重新链接并指定允许的数据流,以创建一个无需任何编码的安全系统。

启用安全多播系统,因为DDS支持多对多会话。

通过记录主题名称和关系(配置),并强制命名发布者和命名订阅者之间的数据流,实现访问控制。

从根本上说,DDS控制数据本身,而不控制用户,机器,端点或其他非以数据为中心的实体。

DDS如何工作?

高级数据中心接口取代了以消息为中心的编程(High Level Data-Centric Interfaces Replace Message-Centric Programming)

DDS的主要目标是在正确的时间在正确的位置共享正确的数据,即使在时间不相关的发布者和消费者之间也是如此。DDS通过仔细复制逻辑共享数据空间的相关部分来实现全局数据空间。

并非所有数据都无处不在。中间件应该只提供消费者真正需要的数据。基于兴趣的过滤可以应用于内容和数据速率。通过适当的实施,DDS可以节省带宽,提升处理能力,并最大程度地降低整体应用程序的复杂性。

作为以数据为中心的解决方案,DDS可以了解共享数据的架构。这使它能够根据内容、期限和/或生命周期进行筛选,从而只为应用程序提供所需的数据。例如DDS可以使应用软件只向外发送锅炉温度300的数据(内容过滤器),每秒最多更新10次(速率)。在许多系统中,这种有效的方法通常可以节省90%的数据通信开销。

正确的位置(The Right Place)

数据必须在需要的地方可用,以促进自动形成系统。DDS分发和维护数据,以便随时可用。

DDS动态发现发布者和订阅者,他们要共享的数据类型以及相关的服务质量(QoS)。匹配成功后,DDS根据QoS进行数据分发。它为每个发布者-订阅者对之间的每个数据流实现了一个QoS强制逻辑通道。DDS订阅者可以确定其对应的发布者是否存活,并且可以传递所产生的任何数据。这大大简化了应用程序开发和错误处理。

实时系统与现实世界进行交互。数据必须按时可用–时延过长的正确数据是将导致故障。数据在优先级,可靠性,时序和其他非功能属性方面有所不同。DDS平衡了稀缺资源的利用以在适当的时间分发数据。

DDS中间件使用应用程序在运行时设置的逻辑QoS策略来平衡效率和确定性。QoS约束确保了这些时序关系。例如,如果订阅者每10毫秒要求更新一次,而与其匹配的发布者不进行发送,则系统会报错,从而启用补救措施。QoS策略涵盖许多特征,包括紧急程度,重要性,可靠性,持久性和生动性。

基本技术概念(Underlying Technical Concepts)

关系数据建模:DDS以类似于关系数据库的方式处理数据。它可以通过结构相关的主题(使用关键字段)来管理数据,并允许对内容和时间进行临时查询和过滤,以便应用程序可以根据需要提取特定数据。

发布-订阅消息传递:DDS使用发布/订阅模式、动态发现机制,管理相关DDS实体(包括发布者、订阅者、持久性服务、记录和重放服务以及连接的数据库)之间的数据流。请求-回复和其他模式都建立在这种强大的基础上。

可靠的多播: DDS标准有线协议在普通UDP套接字上实现了可靠的多播,使系统可以从现代网络基础架构中高效受益。

生命周期意识:与以消息为中心的产品不同,DDS为应用程序提供信息生命周期可感知的支持。例如,它检测,通信并通知应用程序有关数据(主题实例)更新的第一次和最后一次出现。这有助于及时响应新的和过时的信息。

触发模式:DDS提供了多种触发模式,这些模式随订阅信息的更新而变化。示例包括轮询,回调(对于GUI而言是典型的)和WaitSet(类似于Unix“ select”,以提供对优先处理选择性触发事件的完整应用程序控制)。

DDS与其他物联网技术相比如何

DDS在数据中心性、Qos、安全性、发现等方面优于传统的消息传递解决方案(DDS outperforms traditional messaging solutions in Data Centricity,Qos ,Security,Discovery and more)

不同的物联网(Different Internets of Things)

专为消费级物联网(IoT)和工业级物联网设计的应用程序必须能够有效扩展和安全共享数据。但是,对于这两种类型的物联网应用程序,系统要求在质量上存在差异:

img

图形

消费和工业物联网应用的系统要求的定性比较

资料来源:Cutter Journal 2014年12月

消费者和工业物联网有许多相同的要求。然而,每一个需求都有非常不同的相对重要性。例如,工业物联网应用必须处理高单个数据速率。单一来源(例如飞机发动机)会产生大量数据。消费者物联网应用通常不处理高单个数据速率。然而,所有物联网应用程序必须处理高聚合量的数据。

不同的协议(Different Protocols)

物联网应用通常考虑使用几种专门的消息传递/数据共享协议,包括

消息队列遥测传输(MQTT),一种依赖于代理的发布/订阅消息传递协议,设计用于TCP/IP

高级消息队列协议(AMQP),它定义了一种高效的二进制对等协议,用于在两个网络进程(通常是客户端和代理)之间传输消息

约束应用协议(CoAP)是一种软件协议,旨在支持简单的低功耗电子设备(例如无线传感器)与基于Internet的系统的连接

下表比较了上面列出的技术。这些物联网协议中有许多是为简化而设计的,因此只能支持非常有限的一组用例。另一方面,DDS是功能丰富的标准,可以透明地处理IoT系统的许多数据连接复杂性,因此简化了开发人员的工作。

img

DDS:正确的选择(DDS:The Right choice)

许多真实的系统包括设备,服务器,移动节点等等。他们有各种各样的沟通需求,但是在可能的情况下使用单个沟通范例会更好,更轻松。系统设计者应确定哪种协议满足其预期应用程序的主要挑战。然后,如果可能,将该主要选择扩展到系统的所有方面。

例如,设备间数据使用与设备数据收集是不同的用例。打开电灯开关的要求(最好是使用CoAP)与管理该电源的产生(最好是使用DDS),监视传输线(最好使用MQTT)或在数据中心内通信用电的要求(最好搭配AMQP)。

总体而言,DDS是这些协议中功能最丰富的。它可以管理小型设备,连接大型高性能传感器网络并关闭对时间要求严格的控制回路。它还可以从云服务和接收数据。

DDS通信是对等的。消除消息代理和服务器可简化部署,最小化延迟,最大化可伸缩性,提高可靠性并降低成本和复杂性。使用DDS确实需要建立数据模型并了解以数据为中心的原理。它是需要持久,可靠,高性能架构的物联网应用的理想选择。

DDS标准中有什么?

开放国际数据中心连接标准(Open International Data-Centric Connectivity Standard)

DDS拥有一个活跃而充满活力的社区,不断致力于扩展其适用性。DDS标准当前包括以下内容:

高性能,可扩展,安全且以数据为中心的发布/订阅抽象

具有动态发现服务的完全去中心化的体系结构,可自动在匹配对等体之间建立通信

丰富的服务质量(QoS)特性,可控制数据分发的各个方面,如数据可用性、资源使用率、可靠性和定时

可互操作的数据共享,独立于平台的可扩展数据建模,编码和表示

RPC,安全性,资源受限的设备,Web集成和OPC UA集成的最新扩展

OMG DDS标准(OMG DDS Standard)

核心

DDS v1.4 – DDS规范描述了用于分布式应用程序通信和集成的以数据为中心的发布-订阅(DCPS)模型。

DDSI-RTPS v2.3 –定义了实时发布-订阅协议(RTPS)DDS互操作性有线协议。

实施由OMG分配的RTPS供应商ID标识

DDS-XTypes v1.3 –定义了DDS类型系统和DDS数据的序列化表示。

DDS-Security v1.1 –为兼容的DDS实现定义安全模型和服务插件接口(SPI)体系结构。

类型语法和语言映射(IDL)

IDL4(接口定义语言)v4.2 (也可作为ISO标准ISO / IEC 19516:2020获得)–定义IDL,IDL是一种用于以独立于编程语言的方式定义数据类型和接口的语言。这不是DDS标准,但DDS依赖于此。

IDL4-JAVA –定义IDL4类型到Java语言的映射。

IDL4-C# –定义IDL4类型到C#语言的映射。

API

DDS C ++ API(用于DDS的ISO / IEC C ++ 2003语言PSM) –仅为DDS规范的以数据为中心的发布-订阅(DCPS)部分定义了C ++ API。

DDS Java API(用于DDS的Java 5语言PSM) –为DDS规范的以数据为中心的发布-订阅(DCPS)部分定义了Java API。

其他语言API –用于C,Java,传统C ++,ADA,C#和其他语言的API是使用相应的IDL到语言映射从IDL中的DDS API派生的。

扩展名

DDS-RPC v1.0 –定义了一个分布式服务框架,该框架提供了独立于语言的服务定义以及使用DDS进行的服务/远程过程调用。支持自动发现,同步和异步调用以及Qos。

DDS-XML v1.0 –定义用于表示DDS相关资源的XML语法。提供用于DDS服务质量(Qos),DDS数据类型和DDS实体(DomainParticipant,主题,发布者,订阅者,DataWriters和DataReaders)的XSD架构文件。

DDS-JSON v1.0 –定义用于表示DDS相关资源的JSON语法。为DDS服务质量(Qos),DDS数据类型,DDS数据和DDS实体(域参与者,主题,发布者,订阅者,DataWriters和DataReaders)提供JSON模式文件。

网关

DDS-WEB v1.0 –定义了与平台无关的抽象交互模型,该模型描述了Web客户端应如何访问DDS系统以及到特定Web平台的一组映射,这些映射根据标准Web技术和协议实现了平台独立模型(PIM)。 。

DDS-OPCUA v1.0 –定义了一个标准的,可配置的网关,该网关可在使用DDS的系统与使用OPC UA的系统之间实现互操作性和信息交换。

DDS-XRCE v1.0 –定义资源受限的低功耗设备(客户端)使用的协议,以将数据发布和订阅到DDS域。XRCE协议将XRCE客户端连接到充当DDS域网关的DDS代理。

工作正在进行中

DDS-TSN –定义了一组机制,以允许DDS部署在时间敏感网络(TSN)上并加以利用。定义DDSI-RTPS协议到TSN传输的映射。

DDSI-RTPS TCP / IP PSM –定义DDSI-RTPS协议到TCP / IP传输的映射。

DDS C#API –为DDS规范的以数据为中心的发布-订阅(DCPS)部分定义了C#API。

DDS和CORBA是两个独立的连接标准,可实现信息交换,而与位置,硬件平台,编程语言或操作系统不同。

它们都提供了应用程序可移植性(使用标准语言界面)和网络互操作性。DDS和CORBA都是由Object ManagementGroup(OMG)开发的。但是,它们旨在支持不同的用例和集成模式。

DDS主要支持发布-订阅数据分发。它还支持远程过程调用(RPC),可扩展类型系统,Qos和细粒度的安全性。DDS与传输无关:它可以在UDP / IP,TCP / IP,共享内存或其他传输上运行。

CORBA系列标准支持对分布式对象的远程方法调用。CORBA使用TCP / IP,SSL / TLS或其他传输方式。CORBA支持实时和嵌入式系统。

尽管DDS和CORBA标准是独立的,但它们都利用OMG接口定义语言(IDL)来指定数据和服务类型。这允许应用程序对DDS和CORBA交互使用相同的数据类型。

其他标准中的DDS

AUTOSAR自适应 。从18.03版本开始,AUTOSAR自适应平台将DDS作为网络绑定支持。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
们都利用OMG接口定义语言(IDL)来指定数据和服务类型。这允许应用程序对DDS和CORBA交互使用相同的数据类型。

其他标准中的DDS

AUTOSAR自适应 。从18.03版本开始,AUTOSAR自适应平台将DDS作为网络绑定支持。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-wvYCvUvk-1713710133188)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值