《架构风格和基于网络的软件架构设计》

发布于 2017-09-19 10:40:03

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)
    • 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)
  • REST 架构元素
    • REST是分布式多媒体系统里元素的抽象
      • 忽略组件实现细节和协议语法
      • 着眼于组件的功能角色
    • 分布式多媒体架构的三种选择
      • 发送数据的固定格式
        • 不限制数据结构
        • 客户端实现简单
        • 增加服务器压力
        • 降低伸缩性
      • 用渲染引擎封装数据
        • 限制了客户端的功能
        • 极大地增加了传输的数据量
      • 发送原始数据和元数据,接收者自主选择渲染引擎
        • 简化服务器端,提高伸缩性
        • 失去信息隐蔽性
        • 客户端、服务器必须同时理解数据类型
    • 数据元素
      • 资源
      • 资源标识符:URL、URN
      • 表示:HTLM、JPEG
        • 字节流,可能包含元信息
        • 文档、文件、HTTP消息体、实例、变种
      • 表示元信息:媒体类型、最后修改时间
      • 资源元信息:源链接、备胎、变体(vary)
      • 控制数据:if-modified-since、cache-control
    • 连接器
      • client
      • server
      • cache
      • resolver
      • tunnel
    • 组件
      • 源服务器
      • 网关
      • 代理
      • 用户代理
  • 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.

comments powered by Disqus