分布式系统必须面对的难点

1. 不可靠的时钟。

  • Time-of-day clock存在leap seconds. monotonic clock 可以被用来计算 timeout delay.
  • 不同机器上时钟不一致。
  • 计算机上的石英时钟本身就存在误差。
  • NTP server 的同步时钟数据出错。
  • 网络延迟导致NTP时钟实时性存在偏差。
  • 时间可能会跳动,出现一分钟只有59秒或61秒。
  • 虚拟机上的CPU占用导致时钟同步跳跃。
  • 终端用户的恶意修改时间。
  • Last write wins  (LWW) 存在问题。

解决方案:

  1. 配置多个NTP server。防止离群数据。
  2. logical clock. version vector 来保证event顺序。
  3. Clock readings have a confidence interval。

2. 不可靠的网络。

  • 交换机/路由器中断,网络故障,网络丢包。
  • 可能被queue在网络中,等待传输。
  • 远程节点可能已经崩溃。
  • 远程节点暂停相应。(垃圾回收,进程中断)
  • 远程节点的响应包被错误的网络配置干扰,无法送达。
  • 远程节点的响应包正在等待传输

3. 程序暂停 Process Pause

  • garbage collector
  • virtual machine suspended 
  • end-user device such as laptop
  • waiting for disk 
  • swapping to disk (paging)
  • SIGSTOP signal

解决方案:

1.  限制 gc的影响,例如node提前通知gc事件,仅仅对short-lived 对象进行gc。

4. 不可靠的队友。

  • fencing token 解决分布式锁问题。 被操作的资源本身必须check token来拒绝任何比当前处理过的token更老的操作。
  • 拜占庭将军问题。Bitcoin,和宇宙射线更改内存。

 

你可能感兴趣的:(分布式)