Architectural Styles介绍

主要介绍各种Architectural Styles, 例如C/S, 以及一系列奇奇怪怪的styles。

为了避免翻译失真,所有风格都保留英文单词。同时为了应付考试,我会在每个style后面列出英文关键词。

Traditional, language-influenced styles

Main program and subroutines

这个Style感觉就是C语言的面向过程的思想。项目中包含主程序子过程(函数)等组件。组件之间使用函数调用连接。

关键词: procedure-oriented, main program, subroutines, procedure calls

Object-oriented

所有的组件都是Object, Object之间用Method invocation通信。

关键词: ObjectMethod invocation

Layered

Virtual machines

Virtual machines中,存在层级关系,每一层都有一些列服务或者接口,供上一层调用。下图就是一个例子。
关键词: layer offers a set of services, services accessed by layer above it

virtual-machine.jpg

Client server

是一个特殊的virtual machine。 只有两层(C和S),并通过网络协议连接。如下图。
关键词: two layers virtual machine with network connection

c-s.jpg

Data-flow styles

Batch sequential

是一种因计算设备限制而提出的一种古老技术。在这种技术中,我们会将一个大问题简化为几个小部分,每个部分用磁带交互。现在该技术应该被淘汰了。
关键词: data processing when limitations fo computing equipment, subdivided into severable components,transfer by magnetic tapes

batch-seq.jpg

Pipe and filter

各个filter program间通过stream连接。灵活弱耦合但是效率略低。
关键词: filter program connects by stream

pipe-filter.jpg

Shared memory

Blackboard

很有意思的一个Styles,这里可以通过一个故事来讲解。有几个专家解决一个问题。每个专家解决一个小问题后可以将内容写到黑板上,然后其他专家可以根据黑板上的内容继续解决问题,然后写到黑板上,知道整个问题被彻底解决。

在这个Style中,有一个共享的黑板用于交流信息,因此叫做Blackboard。下图中也可以看到三个专家共享一个黑板

关键词: experts,one blackboard

blackboard.jpg

Rule based

在这里,共享的是knowledge base。这是一个包含很多事实并能产生规则的数据库。这些规则就像if .. then语句。该系统有两个功能:插入数据(事实)查询。个人感觉就是一个数据库,内部存储一系列数据,然后我们去查询是否有满足特定条件的数据,然后返回true/false
Prolog就是基于rule based的语言,具体可以看这里

关键词: knowledge base,contains facts and production rules, query the goal

下图就是一个例子,factburnrate; goal是查询是否landed。我们需要不断修改burnrate值,然后通过查询,看当前是否满足规则<=(a,0),<(v,3)。满足的话就说明land成功。
rule-base.jpg

Interpreter

Basic interpreter

就像linux指令的解释器。输入一条指令,inference engine解析指令,然后执行。

关键词: inference engine parse a command, performs variable resolution

Mobile code

在这里,我们会把代码传输到一个远程主机解析。

举例来说,在分布式系统中,如果需要处理大量数据,我们更倾向于把代码传输到含有数据的主机上执行,这样效率更高。

关键词: code transmitted to a remote host for interpretation

Implicit invocation

Event-based

不同独立的部分通过在event bus上发送event来交互。当组件接受到一个event,会决定是接收或者无视。

最初的Event-based中,所有组件共享一个event bus,这样效率很低。因此现在的event-based只会向感兴趣的组件发送event。所以,现在event-basedpublish-subscribe没有本质区别了。

关键词: send event, event bus, react or ignore an event

Publish-subscribe

很经典的style,这里不多解释。

关键词: publisher create information, subscriber be informed of the information

Peer to peer

在一个网络中有很多松耦合的节点。两两节点可以交互。每个节点既是client也是server

关键词: loosely coupled autonomous peers, act both as client and server

Derived styles

这部分应该不会考到,暂且先搁置一边。

C2

CORBA

SOA