分布式系统(2)-架构

体系结构的样式

不同的软件体系结构:不同软件组件是如何组织的,它们应如何相互作用。下面根据组件和连接器(connector)的使用来划分

  • 分层体系结构:客户端-服务器模型(从上往下请求流+从下往上响应流,类似OSI网络协议)
    • 通信协议:HTTP、HTTPS;AJAX(异步请求);RPC
  • 基于对象的体系结构:分布式对象系统(对象与对象之间通过方法调用)
  • 以数据为中心的体系结构:共享数据空间结构
  • 基于事件的体系结构:Pub/Sub结构(有一根事件总线,在各个组件间连接)

系统体系结构:确定软件组件、这些组件的交互以及它们的位置,软件体系结构的最终实例

  • 集中式体系结构
  • 非集中式体系结构
    • 垂直分布:系统逻辑分层,不同层次分布在不同的机器上
    • 水平分布:客户或服务器在物理上分成逻辑相等的几个部分,每个部分相对独立,且分布在不同机器上
    • 点对点系统:去中心化
  • 混合体系结构
    • 边界服务器:CDN
    • 协作分布式系统:BitTorrent

RESTful(Representational State Transfer)架构:将分布式系统看做资源的集合,由组件独立管理。这些资源可以由应用程序添加、删除、检索和修改。

  • 资源可以通过命名机制标识
  • 所有服务提供相同的接口
  • 从一个服务发出或者传入的消息是完全自描述的
  • 执行完操作后,执行组件不再记录调用者信息

样例:Amazon’s S3

  • 对象(objects)放在桶(buckets)中
  • 桶是不能嵌套的

传统三层应用视图:

  • 用户接口层:系统与用户直接交互的单元,如显示管理
  • 应用处理层:包含应用的主要函数,不与具体数据绑定
  • 数据层:管理应用使用的实际数据

非集中式体系结构

P2P系统

  • 结构化P2P:结点按特定的分布式数据结构组织
    • 超立方体结构
    • Chord结构
    • CAN结构
  • 无结构化P2P:结点邻居随机选择
  • 混合P2P:系统中某些结点具有良好组织方式

Chord结构

  • 分布式哈希表(DHT)
  • 节点和数据项的key值在同一个随机空间中生成(160位标识符)
  • 数据项键值与节点标识符一一对应,满足
    • 键值为\(k\)的数据项保存在满足\(id\geq k\)的最小节点上
    • 环可以通过结点之间的捷径(shortcuts)进行扩展,找到最大的捷径跳转过去

chord

上下文可编址(Content Addressable Network, CAN)结构

将节点组织成\(d\)维空间,令每一个节点在一个特定的区域负责特定的任务。当有新的节点加入时,将区域进一步划分。

非结构的点对点系统

  • 每个节点维持一个动态随机的邻接表
  • 目标构建一个随机图
  • 部分视图:从当前节点集合中随机选择出\(c\)个活节点
  • 边\(<u,v>\)存在的概率为\(P(<u,v>)\)
  • 节点P周期性地从部分视图中选择节点Q,并且交换信息

P2P系统数据搜索方式:

  • 泛洪:请求发出节点u会其向其所有邻居节点发出数据搜索请求。如果之前已收到节点请求,则请求会被忽略。否则节点会继续查找数据项。请求会迭代传递下去。(有TTL限制、通信代价高)
  • 随机游走:请求发出节点u从其邻居节点中随机选择一个节点,然后进行本地搜索。如果没有完成,继续从其邻居节点中选择一个随机节点向下进行。(需要一种停止机制)

覆盖网络拓扑管理

两层方法

  • 在最底层维护随机的部分视图
  • 在较高层的部分视图上进行表项选择

样例: 给定一个大小为\(N\times N\)的逻辑网格,每个节点维护一个含有\(c\)个最近邻节点的列表。 节点\((a1,a2)\)和\((b1,b2)\)之间的距离定义为

\[d1+d2,di=min(N-|ai-bi|,|ai-bi|)\]

超级对等节点

核心思想:

  • 非结构化的点对点系统中,数据项的定位非常困难
  • 打破点对点网络的对称性
  • 设置代理程序

超级对等节点

  • 维护一个索引或充当一个代理程序的节点
  • 在非结构化的P2P进行搜索时,索引服务器会提高性能
  • 通过代理程序可以更加有效地决定在哪里放置数据

supernode p2p

超级对等节点作用:维护索引;监控网络状态;建立连接

Skype中A连接B的原理(P2P系统结点之间连接方式)

  • A和B均在公共网络上
    • A和B之间建立TCP连接用于控制报文的传输
    • A和B之间实际通过UDP协议在商定的端口之间通信
  • A在防火墙内,而B在公网上
    • A和超级对等节点S之间建议TCP连接用于控制报文的传输
    • S与B节点建立TCP连接用于中继报文的传输
    • A和B之间直接通过UDP协议传输数据
  • A和B都在防火墙后面
    • A与在线的超级对等节点S通过TCP连接
    • S通过TCP协议与B连接
    • 对于实际的呼叫,另外一个超级对等节点R作为中继节点:A和B均会和R建立连接
    • 所有的音频数据通过R以及两个TCP连接转发

分布式系统的自我管理

自适应中间件

  • 要点分离
    • 将实现功能的部分与非功能的部分如可靠性等分开
  • 计算反射
    • 程序在运行时检查调整自己行为
  • 基于组件的设计
    • 通过组件的不同组合来支持自适应。系统可以在设计时静态配置,或运行时动态配置

自主计算通常通过反馈控制循环实现自适应性