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

    文章

    3591

    浏览量

    63377
  • 软件系统
    +关注

    关注

    0

    文章

    52

    浏览量

    9444
  • AMQP
    +关注

    关注

    0

    文章

    6

    浏览量

    2515
收藏 人收藏

    评论

    相关推荐

    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套接字抽象层

    函数统一抽象功能;SAL TLS 加密传输功能;多协议栈接入与接口函数统一抽象功能对于不同的协议栈或网络功能实现,网络接口的名称可能各不相同,以 connect 连接函数为例,lwIP 协议栈接口名称
    发表于 04-08 15:44

    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.1w次阅读

    MD行家8问8答—MD高手必经之路

    MD行家8问8答—MD高手必经之路
    发表于 02-02 14:02 1298次阅读

    MD是什么

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

    如何从零开始学OpenDaylight

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

    OpenDaylight的运行环境

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

    OpenDaylight中的OSGi

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

    OpenDaylight中的DataStore是什么

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

    OpenDaylight中的RPC &amp; Notification是什么

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