论文摘要
绪论
第1章 软件架构
1.1 运行时抽象
1.2 元素
1.2.1 组件
1.2.2 连接器
1.2.3 数据
1.3 配置
1.4 属性
1.5 风格
1.6 模式和模式语言
1.7 视图
1.8 相关工作
1.8.1 设计方法学
1.8.2 设计、设计模式、模式语言手册
1.8.3 参考模型和特定于领域的软件架构
1.8.4 架构描述语言
1.8.5 形式化的架构模型
1.9 小结
第2章 基于网络的应用的架构
2.1 范围
2.1.1 基于网络 vs. 分布式
2.1.2 应用软件 vs. 网络软件
2.2 评估应用软件架构的设计
2.3 关键关注点的架构属性
2.3.1 性能(Performance)
2.3.1.1 网络性能(Network Performance)
2.3.1.2 用户可觉察的性能(User-perceived Performance)
2.3.1.3 网络效率(Network Efficiency)
2.3.2 可伸缩性(Scalability)
2.3.3 简单性(Simplicity)
2.3.4 可修改性(Modifiability)
2.3.4.1 可进化性(Evolvability)
2.3.4.2 可扩展性(Extensibility)
2.3.4.3 可定制性(Customizability)
2.3.4.4 可配置性(Configurability)
2.3.4.5 可重用性(Reusability)
2.3.5 可见性(Visibility)
2.3.6 可移植性(Portability)
2.3.7 可靠性(Reliability)
2.4 小结
第3章 基于网络的架构风格
3.1 分类方法学
3.1.1 选择哪些架构风格来进行分类
3.1.2 风格所导致的架构属性
3.1.3 可视化
3.2 数据流风格(Data-flow Styles)
3.2.1 管道和过滤器(Pipe and Filter,PF)
3.2.2 统一管道和过滤器(Uniform Pipe and Filter,UPF)
3.3 复制风格(Replication Styles)
3.3.1 复制仓库(Replicated Repository,RR)
3.3.2 缓存(Cache,$)
3.4 分层风格(Hierarchical Styles)
3.4.1 客户-服务器(Client-Server,CS)
3.4.2 分层系统(Layered System,LS)和分层-客户-服务器(Layered-Client-Server,LCS)
3.4.3 客户-无状态-服务器(Client-Stateless-Server,CSS)
3.4.4 客户-缓存-无状态-服务器(Client-Cache-Stateless-Server,C$SS)
3.4.5 分层-客户-缓存-无状态-服务器(Layered-Client-Cache-Stateless-Server,LC$SS)
3.4.6 远程会话(Remote Session,RS)
3.4.7 远程数据访问(Remote Data Access,RDA)
3.5 移动代码风格(Mobile Code Styles)
3.5.1 虚拟机(Virtual Machine,VM)
3.5.2 远程求值(Remote Evaluation,REV)
3.5.3 按需代码(Code on Demand,COD)
3.5.4 分层-按需代码-客户-缓存-无状态-服务器(Layered-Code-on-Demand-Client-Cache-Stateless-Server,LCODC$SS)
3.5.5 移动代理(Mobile Agent,MA)
3.6 点对点风格(Peer-to-Peer Styles)
3.6.1 基于事件的集成(Event-based Integration,EBI)
3.6.2 C2
3.6.3 分布式对象(Distributed Objects,DO)
3.6.4 被代理的分布式对象(Brokered Distributed Objects,BDO)
3.7 局限
3.8 相关工作
3.8.1 架构风格和模式的分类方法
3.8.2 分布式系统和编程范例
3.8.3 中间件
3.9 小结
第4章 设计Web架构:问题与洞察力
4.1 万维网应用领域的需求
4.1.1 低门槛
4.1.2 可扩展性
4.1.3 分布式超媒体
4.1.4 Internet规模
4.1.4.1 无法控制的可伸缩性
4.1.4.2 独立部署
4.2 问题
4.3 推导方法(Approach)
4.4 小结
第5章 表述性状态转移(REST)
5.1 推导REST
5.1.1 从“空”风格开始
5.1.2 客户-服务器
5.1.3 无状态
5.1.4 缓存
5.1.5 统一接口
5.1.6 分层系统
5.1.7 按需代码
5.1.8 风格推导小结
5.2 REST架构的元素
5.2.1 数据元素(Data Elements)
5.2.1.1 资源和资源标识符(Resources and Resource Identifiers)
5.2.1.2 表述(Representations)
5.2.2 连接器(Connectors)
5.2.3 组件(Components)
5.3 REST架构的视图
5.3.1 过程视图(Process View)
5.3.2 连接器视图(Connector View)
5.3.3 数据视图(Data View)
5.4 相关工作
5.5 小结
第6章 经验与评估
6.1 Web标准化
6.2 将REST应用于URI
6.2.1 重新定义资源
6.2.2 操作影子(Manipulating Shadows)
6.2.3 远程创作(Remote Authoring)
6.2.4 将语义绑定到URI
6.2.5 REST在URI中的不匹配
6.3 将REST应用于HTTP
6.3.1 可扩展性
6.3.1.1 协议版本控制
6.3.1.2 可扩展的协议元素
6.3.1.3 升级
6.3.2 自描述的消息
6.3.2.1 主机
6.3.2.2 分层的编码
6.3.2.3 语义独立性
6.3.2.4 传输独立性
6.3.2.5 尺寸限制
6.3.2.6 缓存控制
6.3.2.7 内容协商
6.3.3 性能
6.3.3.1 持久连接
6.3.3.2 直写式(write-through)缓存
6.3.4 REST在HTTP中的不匹配
6.3.4.1 区分非权威的响应
6.3.4.2 Cookie
6.3.4.3 必需扩展(Mandatory Extensions)
6.3.4.4 混合元数据(Mixing Metadata)
6.3.4.5 MIME语法
6.3.5 将响应匹配到请求
6.4 技术迁移
6.4.1 libwww-perl的部署经验
6.4.2 Apache的部署经验
6.4.3 开发顺从于URI和HTTP/1.1的软件
6.5 架构上的教训
6.5.1 基于网络的API的优势
6.5.2 HTTP并不是RPC
6.5.3 HTTP并不是一种传输协议
6.5.4 媒体类型的设计
6.5.4.1 一个基于网络的系统中的应用状态
6.5.4.2 增量处理
6.5.4.3 Java vs. JavaScript
6.6 小结
结论
参考文献