故障与部分失效

要使分布式系统可靠工作,就必然面对部分失效,这就需要依靠软件系统来提供容错
机制。

不可靠的网络

通过网络连接到各个节点,但是现实生活中网络会遇到各种各样的问题。

  1. 请求丢失(有人拔了网线)
  2. 请求正在队列中等待
  3. 远程接受节点失效

    不可靠的时钟

    应用中的有些功能十分依赖于时钟,如果时钟发现问题,一般都是隐式问题,往往不容易发现。

    单调时钟和墙上时钟

    单调时钟:Java 中的 System.nanoTime()
    墙上时钟:返回的是一个时间戳,Java中的 System.currentTimeMillis()

多数决定权

分布式系统中,存在多个节点,某个节点的行为依赖于多个节点来判断,即半数以上才是正确的。例如5个,存在3个就行。

主节点与锁

  • 只允许一个节点作为数据库分区的主节点。防止脑裂。
  • 同一时间,只允许一个客户端执行事务或获取锁。