故障与部分失效
要使分布式系统可靠工作,就必然面对部分失效,这就需要依靠软件系统来提供容错
机制。
不可靠的网络
通过网络连接到各个节点,但是现实生活中网络会遇到各种各样的问题。
- 请求丢失(有人拔了网线)
- 请求正在队列中等待
- 远程接受节点失效
不可靠的时钟
应用中的有些功能十分依赖于时钟,如果时钟发现问题,一般都是隐式问题,往往不容易发现。单调时钟和墙上时钟
单调时钟:Java 中的 System.nanoTime()
墙上时钟:返回的是一个时间戳,Java中的 System.currentTimeMillis()
多数决定权
分布式系统中,存在多个节点,某个节点的行为依赖于多个节点来判断,即半数以上才是正确的。例如5个,存在3个就行。
主节点与锁
- 只允许一个节点作为数据库分区的主节点。防止脑裂。
- 同一时间,只允许一个客户端执行事务或获取锁。