Rest Notes-基于网络应用的架构

摘要: 本文为Rest论文的第二章节基于网络应用的架构学习总结,该章同第一章软件架构一样继续讨论论文的背景,主要是对论文要讨论的范围进行一个定义

正文:

基于网络应用的架构

范围

本文讨论的范围限制在基于网络应用的架构风格

基于网络 VS 分布式

基于网络的架构组件之间的通信仅限于消息传递或者消息传递的等价物

Tanenbaum和van Renesse是这样区分两者:基于网络的系统有能力跨越网络运行,分布式好像是普通的集中式系统,但是运行在多个独立的CPU上

应用软件 VS 网络软件

应用软件的架构是对于整个系统的一种抽象,用户动作的目的可以被表示为功能性的架构属性,而网络抽象目的则是将bit从一个地点移动到另一个地点,不关心为何移动

只有在应用的层面上我们才可以拿到详细的运行参数(交互参数、应用状态参数、吞吐量等)等去评估设计上的权衡,所以我们讨论的范围需要限制在对应用软件架构的讨论

关键关注点的架构属性

性能(Performance)

基于网络应用的性能首先取决于应用的需求,然后是所选择的交互风格,接下来是实现架构,最后是每个组件的实现

  • 网络性能(Network Performance)

    • 吞吐量 信息在组件之间移交的速率
    • 开销 分为初始化开销和每次交互产生的开销
    • 带宽 特定网络连接上可用的最大吞吐量
    • 可用带宽 应用实际可用的那部分带宽
  • 用户感知的性能(User-perceived Performance)

    • 延迟 指从最初的触发请求到得到最早的响应指示之间持续的时间
    • 完成时间 完成一个应用动作所花费的时间

    延迟与完成时间区别在于一个能够增量的处理数据一个是全部处理完。例如页面的异步加载与全部加载完毕

  • 网络效率(Network Efficiency)

    最佳的应用性能是通过不适用网络而获得的,对于基于网络的应用来说有效的减少网络交互才是最高效的架构风格

    我们可以利用缓存、对数据的迁移路径缩短减少某些交互的必要性

可伸缩性(Scalability)

我们可以通过以下方法来改善可伸缩性:简化组件、将服务分布到很多组件(对交互去中心化)、以及通过监控对交互和配置进行一般控制

影响

  • 交互的频率
  • 组件负载随时间的分布
  • 强一致性or弱一致性
  • 同步or异步
  • 环境

可修改性(Modifiability)

可修改性包括可进化性(一个组件改变不会对其他组件产生负面影响)、可扩展性、可定制性(临时定义的支持)、可配置性(部署之后修改的支持)、可重用性,我们在对一个已部署的应用做出改变时候,不应该去停止和重新启动整个系统,还要准备好应对随着时间的变化产生的兼容性

可见性(Visibility)

可见性是指一个组件对于其他两个组件之间的交互进行监视和斡旋(wo xuan)的能力

拥有了可见性之后,就能够通过多个交互共享的缓存来改善性能、通过分层服务来改善可伸缩性、通过反射式监控来改善性能、通过允许防火墙等中间件对交互做检查来改善安全性

可移植性(Portability)

这里的可移植性指的是软件能够在不同环境下运行,例如虚拟机架构风格以及那些限制只使用标准格式的数据元素的架构风格

可靠性(Reliability)

从应用的架构角度来说,可靠性可以被看作架构元素出现故障影响的程度

可以通过避免单点故障、增加冗余、允许监视、以及将故障的范围缩小到一个可恢复的动作