软件架构的数据流总结(二)

原创 2015年07月08日 11:13:58

8. Blackboard(有点像老师叫学生上黑板写东西,而不是学生随意上黑板写)



Blackboard是Knowledge Sources的通用数据结构,能够代表问题空间的所有状态,当需要分离的数据结构时,Blackboard可以分开为多个面板(panels)。Knowledge Sources 是解决问题方法的元件,它们之间没有链接。Scheduler(调度器)决定哪个知识源有机会改变blackboard,每一个循环,它都注意blackboard的改变,激活合适的知识源,然后选择其中一个并执行。典型的案例就是Hearasy-II,语音识别程序,speech可以在不同层次被识别。

应用场合:问题空间应当能被分解为不同的部分;问题需要不同形式的问题逼近,比如bottom-up和up-bottom推理。

Problems:一个相当好的选择标准(scheduler)是比较困难的。如果仅仅从队列中选择第一个的话,这种复杂的结构is overkill。

 9. Finite State Machine(有限状态机)


这可就完全里类似数字电路设计中的状态机设计。从FPGA出发,得到状态机的硬件实现;从应用程序出发,可以得到状态机的软件实现:当需要应用执行期间在某些特殊的阶段表现不同,我们就可以定义一些状态,然后制定状态转移的条件。

其实这种架构在数字逻辑电路中经常用到,不过software中这种思想也是比较常见的。由于比较简单,只要理解即可。

10. Process Control(过程控制)




实际上这种架构就是自动控制原理中的架构。比如温度控制,T作为controlled variable(控制变量),加热温度是Process,决定何时、以多大程度加热时Control。期望输出的温度叫做Set Point,加热器的状态叫做被控变量。因此,有以上两种情况:一个是开环,一个是闭环。如果温度是直接作为输入变量使用的,然后输出还反过来作为输入,这就是典型的feedback;而feedforward控制系统则间接的使用变量作为控制系统的输入。

上图从上到下:开环控制,闭环反馈控制,闭环前馈控制。具体的细节可以参看自动控制原理,这部分内容算是比较熟悉的。

 

11.  Multi AgentSystem(多自主系统)



MAS是分布人工智能的一个典型案例。当应用需要多个部分同时激活,不需要单独的解空间和集中控制,就可以采用这种多自治系统来构建。上图从上到下分为flat:directly contact with each other,fixed Hierarchy:lower and upper,Subsumption,Modular。

 

12. Broker / Service Oriented Architecture(面向代理/服务的架构)


你想让完成工作,而且并不关心是谁完成的,但你可能有一些需求来告诉你的broker,而你的broker会替你关注。应用场合:比如你去找代理帮你买房子,你只需要告诉他你能承受的最高价和另外一些需求,他就会帮你找,而你则完全不用知道housing business等。一般在网络服务中常常用到。

当client-sever的关系并不固定,因为有许多合适的servers或者可用的servers一直在变化;选择server的标准太复杂以至于需要分出一个元件来教授;渴望server的物理位置独立,即实现location transparency。

任何时间服务器都可以与broker注册和解注册,如果一个服务器失效(after a timeout),将会自动与broker解注册。当client申请特定服务时,将请求规范,并发送给broker,当broker找到合适的服务器时,client和server建立连接,而broker则退出。

问题是:要注意处理事务和异常。

 

13.  Master-Slave(主从)


看到这个架构,很自然就想到了DSP6678的一种典型的配置: 一个core当作master,其余7个core当作slave.

SETI项目是这个架构最成功的样例。他们要求全世界范围内计算机的所有者都能捐献一部分的空余的计算时间来处理大量的raw data。因此,创造了最大的分布式计算系统。SETI有一个单一中心的计算机,叫做Master,将数据包发送到Internet上的client电脑,每个client电脑将处理的结果发送回master server,master server把结果整合到数据库中,并喂给client更多的data。

当有足够的处理能力但是时间有限的情况下,可以采用这种分布式计算的架构。

Master有大量的独立的jobs需要执行,它将这些分立的job发送给它的slaves,然后这些slaves处理这些job,并将结果返回。类似SETI上面的解释。重要的是如何将任务分割成独立的。这种独立指的是每个任务不需要其他任务的计算结果,是完全可以独立执行的任务,即任务与任务之间是不存在依赖关系的。因此,在开发并行执行的程序时,或者分布计算的应用时,常常要进行这样的思考和构造。特别是DSP 6678这种多核架构的主从分布计算。

 

 

 

 

 

 

 

 

参考文献:http://www.dossier-andreas.net/software_architecture

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/。

数据流图 系统流程图 程序流程图 程序的系统结构图

1.数据流图(Data Flow Diagram)简称DFD,它从数据的传递和加工角度,以图形方式来表达系统的逻辑功能,数据在系统内部的逻辑流向和逻辑交换过程,是结构化系统分析方法的主要表达工具及用于...

Andrew Ng机器学习课程7

通过一系列的margin最优化的推导,从对偶问题出发,得到了Support vector,然后使用了kernel trick,得到了kernel support vector machine...

【电子电路技术】短波红外InGaAs探测器简析

核心提示:  红外线是波长介于微波与可见光之间的电磁波,波长在0.75~1000μm之间,其在军事、通讯、探测、医疗等方面有广泛的应用。目前对红外线的分类还没有统一的标准,各个专业根据应用的需要,有着...

软件架构的数据流总结(三)

14. Interpreter / virtual machine (解释器/虚拟机) 典型样例:Java 虚拟机,Rule-based systems,脚本语言(JavaScript) ...

Android开发软件架构思考以及经验总结

欢迎关注我的知乎:井方哥 前言 架构设计,到底是什么呢?基于这段时间的学习和自己的一些思考,我认为架构是基于产品和技术所达成的一种共识。我不是专业的架构师,也不是经验老道的开发者。本文目的有三...

Android 开发软件架构思考以及经验总结

Android 开发软件架构思考以及经验总结,详解讲解了实际项目中的Android架构经验...
  • AMEPRE
  • AMEPRE
  • 2017年01月24日 16:11
  • 1019

Android开发软件架构思考以及经验总结

欢迎关注我的知乎:井方哥 前言架构设计,到底是什么呢?基于这段时间的学习和自己的一些思考,我认为架构是基于产品和技术所达成的一种共识。我不是专业的架构师,也不是经验老道的开发者。本文目的有三,一是整理...
  • JF_1994
  • JF_1994
  • 2016年12月25日 16:31
  • 9598

软件架构中的5视图法经典总结

 架构设计中的5视图法    最近编辑过的 2011年4月10日 架构师需要满足的要求:1、满足性能、持续可用性等方面的软件“运行期质量属性”。2、满足可扩展性、可重用性等方面的软件“开发期质量属性”...

Android开发软件架构思考以及经验总结

一、萌芽 作为一只编程经验并不怎么丰富的程序猿来讲,我一直觉得架构师是一个比较神秘的职业,架构设计就更加的高大上了。经过今年的几个项目,之前曾发文叙述我的从MVC到MVP项目重构实战经验,也曾说...

软件架构经验总结

任何一款软件,从无到有,从初级到完善,一般都会经历一个漫长的过程。在这个过程当中,架构师的水平和软件体系架构本身的灵活性,就会处于一个很关键的位置。太多的软件,因为架构的问题,造成产品发布日期延迟,或...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件架构的数据流总结(二)
举报原因:
原因补充:

(最多只允许输入30个字)