TechRoad_书山天道_Arc_<POSA>_卷4
《面向模式的软件架构-卷4 分布式计算的模式语言》笔记
目标:学习理解分布式系统的设计原理机制。
2020-12-08
1. Chapter 17.8 Message
提供一种方式通过网络交换信息,而又不引入具体组件类型及其接口的依赖.
分布式对象像并列的组件一样协作,调用彼此的服务并互相交换数据。但是,HTTP这样的网络协议只支持比特流这种最简单的数据传输形式,
并不能识别服务调用和数据类型。
需要以类型化和结构化的形式在网络中传输服务请求,调用参数,服务处理结果以及其他信息如异常消息。否则,发送和接收消息的组件无法了解
它们收到的比特流具有什么语义。
解决方案:将需要通过网络传输的方法请求与数据结构封装到Message中:比特流包含一个信息头,定义了传输的信息类型,其来源,目标,大小以及其他
结构信息,然后是负载(payload), 包含了实际的信息内容。
最大好处是其包含的信息结构以一种“扁平(flat)” 的形式来保存。 Message 提供了对松耦合的支持: 只要两者就共用的Message格式达成一致,发送者可以不依赖于接收者的接口。
Message 应基于一个通用的Canonical Data Model, Command message 表示请求调用接收者的某个方法或子程序, Document Message可以将一个数据的集合传给接收者, Event Message 表示将发送者状态的变化通知接收者。
Message 应包含 Return Address, 响应也应封装在一个Message中, 形成一个 request-reply 场景, 消息头的 Correlation Identifier 基本上是一个 Asynchronous Completion Token 模式实现,指明了响应Message 的接收者。 Message Sequence 大小, Message Expiration。
Command Processor 将特定Message 或队列转换为对接收者具体方法的调用, 提供更多请求处理支持, 多重取消/重做,调度和日志功能。
2020-12-19
Pipes and Fileter 模式适用于处理数据流的应用,或者组件通过交换数据流来通信的场合,图像处理是一个典型的例子.
其是应用服务之间组织协作的一种机制,而非交换信息的一种方式。在 Pipes and Filters 实现中,交换信息是由消息来完成。
消息同远程方法调用和发布者/订阅者一样重要,共同构成三种最主要的通信方式.

Layer 架构根据(子)系统及属性定义了软件功能的横向划分,从而将每组功能都清晰地封装起来以便独立改进。
具体的划分标准可以通过各种不同的维度来定义,如抽象性,粒度,硬件距离,变化率。
将架构划分为表现层,应用逻辑层 和 持久化数据层的分层方法 是从抽象性维度划分的;
引入业务对象层,其内部实体单元供业务处理层使用,这种分层机制是按粒度来划分的;
而将系统分为操作系统抽象层,通信协议层和应用功能层的分层机制是按照硬件据里来划分的
将应用分解为表现层,应用逻辑层 和持久化数据层是一种结合了 抽象和变化率两种维度的分层机制。
用户界面比应用逻辑层更容易发生变化,而应用逻辑比数据格式-如关系数据库中的表结构--变化的快。
层内自我完备且内聚的职责会被实现为一个的单独的 Domain object, 将同一层进一步划分为易于处理的部分,以便进行
独立的开发和升级。
为每一层定义一个Explicit Interface, 将 Domain Object 的接口公开给其他层访问,并将Explicit Interface连接到实现
相应功能的 Encapsulated Implementation 之上。 这种分离关注点的方式减小了不同层之间的耦合,各层均依赖接口,这样
可以改进层内部的实现而不会对其他层产生影响,为远程访问层的功能提供了可能性。
Bridge或Object Adapter 能帮助我们将同一层的 Explicit Interface 与 Encapsulated Implementation 分离开。
控制和数据流可以在分层系统中双向进行。
数据能在分层协议栈的相邻层之间交换,如TCP/IP 或 UDP/IP。
Layer 定义了一个非循环的向下依赖关系:低层必须不依赖于高层提供的功能。
因此,由下而上的控制流通常通过基于 Observer 回调基础设施来触发。
低层可以通过由 Command 或 Message 方式实现的通知机制将数据和服务请求传递给高层,而不必依赖于
高层接口的特定功能。

浙公网安备 33010602011771号