理想情况下,提到软件系统的设计,系统架构人员想到的是如何架构软件,软件开发人员想到的是如何更好地组织业务逻辑代码,这些设计能够更好地保证软件正常运行。不理想的情况便是没有设计或者设计不多,开发代码靠的是开发人员自身的素养,有人更偏好前端实现,有人觉得后端实现可能更好,于是同一套代码中,造成技术体系的混乱,如果项目比较紧张,那么内部质量很难保障,那么技术债就这样形成了。
一般情况下,软件系统的研发分为需求获取与分析、架构设计、代码实现、系统发布、上线等阶段。其中,架构设计可以细分为架构需求、分析、设计、文档化、评审、修改和实现等过程,我们以简化归一,描述为:提供UI界面和消息接口服务,UI选择B\\S架构风格,消息可以是REST、SOAP以及AMQP等类型,数据库采用关系型数据库。如下图所示:
下一步就开始围绕业务领域,进行系统的建模,一般有两种方式:第一种是数据库的设计,考虑需要那些表,表中包含应该哪些字段,将业务需求抽象为数据模型;第二种是业务逻辑的面向对象设计,将业务需求抽象为对象之间的关系。我们以第一种方式进行系统的建模(以Java为例):
① 通过建模工具(Power Design)进行概念数据模型和物理数据模型的建模;
② 根据数据库的表,借助于代码生成工具生成表对应的Java对象;
③ 根据业务逻辑划分不同的Service服务,对应Domain Object;
④ 根据UI设计划分不同的Action,对应View Object;
⑤ 根据业务流程设计各层之间的调用关系,并进行不同层之间的对象转换。
根据上述步骤我们简单地得到如下图所示的业务逻辑的设计:
我们可以简单地将图中的设计理解为业务逻辑的服务抽象层的设计。
从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等组成部分。
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: 采用订阅发布机制,由发布者发送并传送给其订阅者的多播消息。
全部0条评论
快来发表一下你的评论吧 !