发帖  主题  评论  推荐  标签 用户 查搜   用户 密码 自动 注册  
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 CQRS

分布式系统指南大纲

  本大纲旨在向软件工程师介绍现实中分布式系统的基础知识,以便让大家获得对分布式系统中关键术语的直观理解,并探讨生产中问题。

什么是分布式系统?

Lamport, 1987:

A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.

一个分布式系统是那种发生问题后,你都不知道发生在那里,最终导致你的计算机变得无法访问和使用。

我们称分布式系统的每个部分为一个节点node,也有称为处理processeagent,  actor

 

什么是节点Node?

  • 有典型延迟latency特征
    • 一个节点中的操作是快的
    • 节点之间通讯操作是慢的
    • 快慢是相对的取决于系统在做什么任务。
  • 节点是逻辑条理的coherent
    • 你能够知道什么时候发生问题
    • 发生的事情都是有序的
    • 典型的建模为单线程状态机
  • 一个节点自己也能成为一个分布式系统
    • 只要系统整体提供“快速有逻辑条理的”操作,我们就可以将其看作为一个单节点。

 

网络作为消息流

  • 节点之间交互通过网络
    • 人类交流通过讲话
    • 计算机交互通过IP, 或 UDP, 或 SCTP, ...
  • 我们建模这种交互作为节点之间离散的消发送。
  • 消息随时间广播
    • 这是分布式系统的缓慢部分
    • 我们称这为“延迟latency"

 

因果关系

  • 我们可以将节点和网络之间的交互作为一种diagram
    • 时间在流逝作为横坐标
    • 节点被空间垂直分离,作为纵坐标
    • 消息沿着时空结合斜线路径连接各个节点

 

同步网络

  • 在一个锁中执行
  • 在切换延迟上有固定值
  • 精确的全局时钟
  • 易于证明有关
    • 在异步网络上不能确定的事情,通过同步网络能够确定性证明该功能是否在网络下正常运行。


异步网络

  • 无论什么时候都是独立互相不依赖地执行
  • 无法界定消息延误时间
  • 无全局时钟
  • IP 网络确定是异步的
    • 但是实践中真正不理智的事情不会发生
    • 大多数网络会在数秒到几周时间内恢复,不会发生永远不恢复的事情。
      • 人类时间尺度也是建立在数秒到数周的这个序列中。
      • 这样我们就不能假装延迟而没有恢复的问题没有发生。

 

当网络出错了

  • 异步网络允许
    • 重复Duplicate
    • 延误Delay
    • 丢失Drop
    • 重新排序Reorder
  • 丢失和延误是无法分辨的
  • 拜占庭网络就是被无数个消息搞混乱了
    • 包括重写消息内存
    • 它们在实际网络中大部分不会发生

 

下篇时钟

分布式系统专题

 

解道移动版 | 关注解道 | 联系解道 | 关于解道 | 广告联系 | 网站地图 | 设为首页

沪ICP证12033263 如有意见请与我们联系 Powered by JdonFramework
返回顶部