软件架构的数据流总结(二)
来源:互联网 发布:网络调试面试题 编辑:程序博客网 时间:2024/06/06 05:23
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
- 软件架构的数据流总结(二)
- 软件架构的数据流总结(一)
- 软件架构的数据流总结(三)
- sensor总结二(软件架构)
- 监控系统的一般架构之二串行数据流接口
- 《程序员必读软件架构 Part4 可视化软件》(二)软件架构中用到的图
- 软件架构风格整理(1 数据流风格)
- SnailApp---数据流的控制(二)
- 软件架构笔记(二)
- (io)数据流的简单总结
- 数据流操作(二)
- 数据流(二)
- MapReduce数据流(二)
- MapReduce数据流(二)
- MapReduce数据流(二)
- 数据流分析(二)
- 《软件架构师的12项修炼》学习心得(二)
- 分布式架构 总结(二)
- LeetCode90:Subsets II
- 我的Android进阶之旅------>解决Your project contains error(s),please fix them
- VMware虚拟机RedHat 5 系统下ftp服务器的安装测试
- FaceNet--Google的人脸识别
- 数据结构与算法—循环链表
- 软件架构的数据流总结(二)
- 文章标题
- springMVC上传文件
- iOS 网络编程 XMPP编程
- T-SQL查询处理执行顺序
- c++运算符重载总结
- 利用 BeanUtils 实现多表单间冗余数据同步管理
- maven入门
- Android Touch事件传递机制解析