Chapter 1 Software Architecture
- 术语
- 运行时抽象
- 元素
- 组件
- 软件指令
- 中间状态
- 接口
- 连接器
- 抽象机制
- 作用
- 沟通
- 协调
- 合作
- 数据
- 组件间传输的对象
- 组件
- 配置(configurations)
- 系统运行时各元素之间的关系架构
- 架构属性
- 架构风格
- 一组相互协调的架构约束,这些约束限制了架构元素和它们之间的关系的角色和特征
- 模式和模式语言
- 设计模式:重要且重复出现的系统构造
- 面向对象编程语言
- 类继承
- 接口组合
- 模式
- 相对复杂的交互协议可以被描述为单个抽象
- 行为约束
- 具体实现的特殊性
- 相对复杂的交互协议可以被描述为单个抽象
- 视图
- 处理过程(processing):强调组件间的数据流动(data flow)
- 数据(data):强调处理流(processing flow)
- 连接视图(connection):强调组件间的关系和沟通状态
- 设计方法
- 概念模型
- 特殊领域的软件架构
- 架构描述语言
Chapter 2 Network-based application architectures
- 只讨论基于网络的应用架构
- 基于网络和分布式的区别
- 分布式对用户来说是透明的一个整体
- 应用软件和网络软件
- 评估应用架构的设计
- 功能需求
- 约束树:提供了架构设计指引
- 最感兴趣的架构属性
- 性能
- 网络性能
- 吞吐量(throughput):组件间传输的应用数据和通信开销的速率(单位时间)
- Overhead
- 带宽(Bandwidth):单个网络连接的最大可用吞吐量
- 可用带宽:应用实际可用的带宽
- 用户感知的性能
- 延迟:刺激-响应时间差
- 应用识别事件
- 组件间交互准备时间
- 组件间传输交互的时间
- 组件处理交互的时间
- 完成转换和处理结果的时间
- 完成时间
- 例如图片传输的预渲染
- 延迟:刺激-响应时间差
- 网络效率
- 缓存
- 减少数据复制和重新连接
- 逻辑前移到客户端
- 网络性能
- 伸缩性
- 简化组件
- 交互去中心化
- 减少交互频率
- 简单性
- 通用化元素
- 通用化连接器:中间件
- 可变性
- 可进化性:改变不影响其他组件
- 伸缩性:可添加功能
- 减少耦合(例如基于事件的交互)
- 可定制性
- 同时也增加了简单性好伸缩性
- 可配置性:组件部署后的可配置性
- 可重用性
- 透明性(Visibility)
- 功能
- 监控
- 调解
- 效果
- 提升性能(共享缓存)
- 提升伸缩性(分层的服务)
- 提升可靠性(监控)
- 功能
- 便携性
- 可靠性
- 避免单点故障
- 使用冗余
- 允许监控
- 减少失败的影响到一个可恢复的范围
- 性能
Chapter 3 Network-based architectural styles
- 分类
- 数据流风格
- Pipe and Filter(PF)
- Uniform Pipe and Filter(UPF)
- 复制风格(Replication Styles)
- Replicated Repository
- 缓存(Cache)
- 分层风格(Hierarchical Styles)
- CS(client-server)
- RS(remote session)
- RDA(remote data access)
- Remote Evaluation(REV)
- LS(layered-system) && LCS(layered-client-server)
- CSS(client-stateless-server)
- C$SS(client-cache-stateless-system)
- LC$SS
- Mobile code styles
- VM
- COD(code on demand)
- LCODC$SS
- MA(mobile agent)
- CS(client-server)
- P2P风格
- EBI(event-based-inegration)
- C2:EBI+LCS
- Distributed Objects
- Brokered Distributed Objects
- 数据流风格
Chpater 4 Designing the web architecture: problems and insights
Chapter 5 Representinal State Transfer(REST)
- 架构设计
- 建筑
- 从白板开始
- 软件
- 从把所有的系统需求作为一个不包含任何约束的整体开始
- 然后添加约束同时保证和系统兼容
- 强调限制和理解系统上下文
- 约束状态
- Null Style
- 系统组件间没有明显的界限
- Client-Server
- 通过简化系统组件来增加伸缩性
- Stateless
- 特征
- 请求包含所有信息
- 服务端不存储上下文
- 会话状态存储在客户端
- 引入了透明性、可靠性、伸缩性
- 反映了设计取舍
- 缺点
- 可能增加网络压力,因为需要传输重复的数据
- 减少了服务器对客户端应用的控制能力,因为存在不同的客户端版本
- 特征
- Cache
- 客户端缓存
- 部分或全部地消除了一些交互
- 提高了效率、伸缩性和用户感知的性能
- Uniform Interface 统一接口
- 和其他基于网络的架构风格不一样的是:统一的组件间接口
- 应用了一般的软件工程原理
- 标准化的通用性降低了效率
- 约束要素
- 资源的识别
- 通过表现层(representation)来操纵资源
- 自描述信息
- 多媒体作为应用状态引擎
- Layered System 分层系统
- 增加底层独立性
- 增加额外开销、延迟,降低用户感知的性能
- 添加了pipe-and-filter风格的架构属性
- 语义自描述性,对中间人透明
- Code on demand(optional)
- Null Style
- 建筑
- REST 架构元素
- REST是分布式多媒体系统里元素的抽象
- 忽略组件实现细节和协议语法
- 着眼于组件的功能角色
- 分布式多媒体架构的三种选择
- 发送数据的固定格式
- 不限制数据结构
- 客户端实现简单
- 增加服务器压力
- 降低伸缩性
- 用渲染引擎封装数据
- 限制了客户端的功能
- 极大地增加了传输的数据量
- 发送原始数据和元数据,接收者自主选择渲染引擎
- 简化服务器端,提高伸缩性
- 失去信息隐蔽性
- 客户端、服务器必须同时理解数据类型
- 发送数据的固定格式
- 数据元素
- 资源
- 资源标识符:URL、URN
- 表示:HTLM、JPEG
- 字节流,可能包含元信息
- 文档、文件、HTTP消息体、实例、变种
- 表示元信息:媒体类型、最后修改时间
- 资源元信息:源链接、备胎、变体(vary)
- 控制数据:if-modified-since、cache-control
- 连接器
- client
- server
- cache
- resolver
- tunnel
- 组件
- 源服务器
- 网关
- 代理
- 用户代理
- REST是分布式多媒体系统里元素的抽象
- REST
- 分布式多媒体系统的架构风格
- 强调
- 组件交互的伸缩性
- 接口的通用性
- 组件部署的独立性
- 中间组件
- 降低交互延迟
- 增强安全性
- 封装遗留系统
Chapter 6 Experience and evaluation
- HTTP对象模型(HTTP object model)
- 介绍了如何把前述理想的模型应用到HTTP上,主要就是HTTP方面的东西了。
- 可扩展性
- 协议版本
- 可扩展的协议元素
- 通用
- URI schemes
- media types
- MIME header field names
- charset values
- languages tags
- HTTP特有
- 请求方法名
- 响应状态码
- non-MIME header field names
- values within standard HTTP header fields
- 通用
- Upgrade
- 自描述信息
- 主机
- Layered encodings
- 内容编码
- 传输编码
- 语义独立性
- 传输独立性
- Content-Type
- “chunked”
- 大小限制
- 缓存控制
- 内容协商
- 性能
- 持久连接
- Write-through caching
- REST和HTTP不匹配的地方(REST mismatches in HTTP)
- 区分非授权请求
- cookies
- 强制扩展?
- 混合元信息和控制信息
- MIME语法
- 使响应匹配请求
- 依赖传输层连接来匹配
- HTTP/1.1
- 同步模式
- 异步模式
- 广播
- 多播
- 可扩展性
- 部署经验(略)
- HTTP不是RPC
- RPC 远程过程调用
- RMI 远程方法调用
- RPC mechanisms, in contrast, are defined in terms of language APIs, not network-based applications.
- HTTP不是传输层协议
- HTTP的透明性允许HTTP通过防火墙?
- 媒体类型的设计
总结
REST是一组互相协调的架构约束,尝试最小化延迟和网络交流,同时最大化组件实现的独立性和伸缩性。
克里斯托佛·亚历山大(Christopher Alexander)
加州大学伯克利分校的终身教授,同时也是建筑师。“以人为中心”的设计影响了建筑、城市设计、软件、社会学等等。
Each one of us has, somewhere in his heart, the dream to make a living world, a universe. Those of us who have been trained as architects have this desire perhaps at the very center of our lives: that one day, somewhere, somehow, we shall build one building which is wonderful, beautiful, breathtaking, a place where people can walk and dream for centuries.
Links
- 《Architectural styles and the design of network-based software architectures》
- Simple API Development with Laravel
- 《建筑的永恒之道》?