0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenDaylight中的MD-SAL是什么

汽车电子技术 来源:码农与软件时代 作者:码农与软件时代 2023-02-14 15:17 次阅读

、软件系统设计

理想情况下,提到软件系统的设计,系统架构人员想到的是如何架构软件,软件开发人员想到的是如何更好地组织业务逻辑代码,这些设计能够更好地保证软件正常运行。不理想的情况便是没有设计或者设计不多,开发代码靠的是开发人员自身的素养,有人更偏好前端实现,有人觉得后端实现可能更好,于是同一套代码中,造成技术体系的混乱,如果项目比较紧张,那么内部质量很难保障,那么技术债就这样形成了。

一般情况下,软件系统的研发分为需求获取与分析、架构设计、代码实现、系统发布、上线等阶段。其中,架构设计可以细分为架构需求、分析、设计、文档化、评审、修改和实现等过程,我们以简化归一,描述为:提供UI界面和消息接口服务,UI选择B\\S架构风格,消息可以是REST、SOAP以及AMQP等类型,数据库采用关系型数据库。如下图所示:

图片

下一步就开始围绕业务领域,进行系统的建模,一般有两种方式:第一种是数据库的设计,考虑需要那些表,表中包含应该哪些字段,将业务需求抽象为数据模型;第二种是业务逻辑的面向对象设计,将业务需求抽象为对象之间的关系。我们以第一种方式进行系统的建模(以Java为例):

①通过建模工具(Power Design)进行概念数据模型和物理数据模型的建模;

②根据数据库的表,借助于代码生成工具生成表对应的Java对象;

③根据业务逻辑划分不同的Service服务,对应Domain Object;

④根据UI设计划分不同的Action,对应View Object;

⑤根据业务流程设计各层之间的调用关系,并进行不同层之间的对象转换。

根据上述步骤我们简单地得到如下图所示的业务逻辑的设计:

图片

我们可以简单地将图中的设计理解为业务逻辑的服务抽象层的设计。

二、MD-SAL

2.1 基础

从OpenDaylight Lithium版本开始采用MDSE(Model-Driven Software Engineering,模型驱动软件工程)设计。MDSE描述了一个框架,该框架支持模型建模,并可以基于模型生成相关的代码和API接口。

MD-SAL(Model-driven Service Abstraction Layer,模型驱动的服务抽象层)可以看成是一个消息总线驱动、可扩展的中间件。“M”是模型,即为YANG语言,“MD”是模型驱动,即使用YANG作为数据和接口的建模语言,并为服务之间的通信提供基础框架:消息传递和数据存储功能。

由前面的文章可知,MD-SAL包含DataStore、RPC、Notification和Mount等概念,其中需要关注如下:

l DataStore: 分为Config和Operational,其本质上是树,并通过Instance identifier来标识子树或节点;

l RPC: RPC的本质上是不同进程间访问的一种通信形式。在NETCONF协议中 RPC是NETCONF客户端对NETCONF服务器的访问。而在MD-SAL中,RPC用于服务消费者(使用者)对服务生产者(提供者)的访问,不再是严格上的RPC定义。

同时,YANG Tools项目是一个旨在方便YANG开发的基础设施项目库,MD-SAL扩展了该项目,并为Java服务和应用程序提供NETCONF和YANG支持。它具有解析和处理YANG架构、基于YANG模式验证XML结构和基于YANG模式的REST API等组成部分。

2.2 设计实现

1.数据访问

MD-SAL通过两个不同的代理(brokers)访问DataStore的数据:DOM Broker和Binding-Aware Broker。如下图所示:

图片

l DOM Broker: DataStore可以看作是XML数据库,对于XML的解析通常采用DOM模型(Document Object Model,文档对象模型)。DOM broker可以看成操作DataStore节点的请求代理。DOM Broker提供了基于XML DOM的API。

l Binding-Aware Broker: DOM形式的API不易于开发人员编程,该Broker支持YANG到Java语言的绑定,并提供基于YANG模型生成的接口和类,也就是Java的API。

l BA-BI Connector: 用于连接DOM Broker和Binding-Aware Broker,与Mapping Service、Schema Service、Codec Registry和Codec Generator等组件一起实现:DOM(BI)格式和Java DTO(BA)之间的转换。

2.消息模式(messaging pattern)

MD-SAL提供了一组基于代理的消息传递模式,这些代理提供以数据为中心而非API的集成,并在服务之间传输YANG建模数据。事实上,MD-SAL包含了管理特定消息传递模式的不同代理,如图所示:

图片

l Data Broker: 对Data Store进行事务访问。

l RPC Broker: 提供消费者和生产者之间的单播消息,消费者向生产者发送请求消息,生产者以异步消息的形式进行响应。

l Notification Broker: 采用订阅发布机制,由发布者发送并传送给其订阅者的多播消息。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3752

    浏览量

    64220
  • 软件系统
    +关注

    关注

    0

    文章

    61

    浏览量

    9472
  • AMQP
    +关注

    关注

    0

    文章

    6

    浏览量

    2547
收藏 人收藏

    评论

    相关推荐

    AliOS Things网络适配框架 - SAL

    SAL)框架和组件方案AliOS Things中提供了丰富的SAL开发组件,来加速MCU+通信连接芯片的应用场景开发和部署。在此类应用场景,主控MCU芯片通过UART或SPI总线与WiFi
    发表于 12-26 17:36

    LiteOS通信模组教程05-LiteOS的SAL及socket编程实例

    ,经过SAL套接字抽象层之后,对用户提供的接口都是统一的,极大的提高了程序的可移植性。SAL框架的源码及其实现在SDK的IoT_LINK_1.0.0\iot_link\network\tcpip目录
    发表于 02-26 09:33

    RT-Thread系统基于SAL接口的TLS实现

    ){RT_ASSERT(pt);proto_tls = (struct sal_proto_tls *) pt;return 0;}#endif变量proto_tls在文件sal_socket.c属于全局变量(被
    发表于 06-21 11:26

    一文解析sal socket与其他socket之间的关系

    1、sal socket与其他socket的关系结合结构体之间的引用关系图,与下图看;从 uml 对象关系图中可以得到下面的信息:从 sal_scoket 的 user_data,获取的 socket;从
    发表于 06-28 17:50

    RTT网络框架及SAL套接字抽象层介绍

    SAL 套接字抽象层把这些接口函数功能抽象,提供统一的 sal_socket()、sal_connect() 等接口,将不同的协议栈做了一层适配转换,应用层只需基于这些接口开发
    发表于 07-28 11:40

    mymqtt软件包和SAL同时打开时编译报错咋办?

    mymqtt和SAL时,编译报错,如下:../packages/mymqtt-latest/MQTTClient-C/mqtt_client.c:270:17: error: storage size of 'so_linger' isn't known当把SAL关闭时,
    发表于 02-03 14:24

    什么是MD

    什么是MDMD是Mini Disc的缩写,指微型唱机,MD又分可录型MD(Recordable,有磁头和雷射头两个头),和单放型MD
    发表于 06-19 00:07 2.2w次阅读

    MD是什么

    MD是什么 MD从诞生到现在还不到十年,在数码产品生产商的大力推动下,已经在许多国家迅速普及开来。各种MD产品已经由便携式的播放机发展到包
    发表于 02-06 16:58 9129次阅读

    MD1211在B超的应用

    MD1211是Supertex公司生产的是一款高速双MOSFET驱动器。本文主要介绍了MD1211的特点与典型的应用电路,最后详细阐述了MD1211在B超的应用。
    发表于 03-04 11:56 7104次阅读
    <b class='flag-5'>MD</b>1211在B超<b class='flag-5'>中</b>的应用

    MD500PLUS+MD38PGMD(FVC)控制

    MD500PLUS+MD38PGMD(FVC)
    发表于 05-25 15:48 43次下载

    如何从零开始学OpenDaylight

    OpenDaylight的逻辑架构分为应用层、控制器层和数据转发层。其中,应用层聚焦网络业务逻辑开发,负责资源编排;控制器层进行全局网络的管理;数据转发层为各种网络设备,负责数据的转发。
    的头像 发表于 02-14 14:04 2036次阅读
    如何从零开始学<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的运行环境

    OpenDaylight作为一种开源的SDN控制器,使用Java语言编写,
    的头像 发表于 02-14 14:08 771次阅读
    <b class='flag-5'>OpenDaylight</b>的运行环境

    OpenDaylight的OSGi

    从写单个类的打印Hello World小程序到OSGi模块化开发,确实存在较大的难度,本文将从模块化、OSGI模型以及OSGI在OpenDaylight的应用等方面进行介绍。
    的头像 发表于 02-14 15:05 729次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的OSGi

    OpenDaylight的DataStore是什么

    SDN起源于校园网,发扬光大于数据中心,现广泛用于广域网,SDN控制器,可能管理着数十万台软交换机,下发数百万乃至上千万条路由信息。因此,作为SDN控制器的开源项目OpenDaylight,无论是业务逻辑还是数据存储,
    的头像 发表于 02-14 15:13 1381次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的DataStore是什么

    OpenDaylight的RPC &amp; Notification是什么

    我们将介绍RPC和Notification,并从进程内外的通信开始,着重介绍远程过程调用和发布-订阅机制,然后分析MD-SAL的通信交互过程。
    的头像 发表于 02-14 15:15 909次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的RPC &amp; Notification是什么