「读书」数据密集型应用 Day 15

81 阅读3分钟

暂停进程

所有这些事件都可以随时抢占(preempt)正在运⾏的线程,并在稍后的时间恢复运⾏,⽽线程甚⾄不会注意到这⼀点。这个问题类似于在单个机器上使多线程代码线程安全:你不能对时机做任何假设,因为随时可能发⽣上下⽂切换,或者出现并⾏运⾏。

响应时间保证

某些软件的运⾏环境要求很⾼,不能在特定时间内响应可能会导致严重的损失:⻜机主控计算机,⽕箭,机器⼈,汽⻋和其他物体的计算机必须对其传感器输⼊做出快速⽽可预测的响应。在这些系统中,软件必须有⼀个特定的截⽌时间(deadline),如果截⽌时间不满⾜,可能会导致整个系统的故障。这就是所谓的硬实时(hard real-time)系统。

限制垃圾收集的影响

知识、真相与谎言

本章到⽬前为⽌,我们已经探索了分布式系统与运⾏在单台计算机上的程序的不同之处:没有共享内存,只有通过可变延迟的不可靠⽹络传递的消息,系统可能遭受部分失效,不可靠的时钟和处理暂停。

真理由多数所定义

领导者与锁定

防护令牌

我们假设每次锁定服务器授予锁或租约时,它还会返回⼀个防护令牌(fencing token),这个数字在每次授予锁定时都会增加(例如,由锁定服务增加)。然后,我们可以要求客户端每次向存储服务发送写⼊请求时,都必须包含当前的屏蔽令牌。

拜占庭故障

Web应⽤程序确实需要预期受终端⽤户控制的客户端(如Web浏览器)的任意和恶意⾏为。这就是为什么输⼊验证,清理和输出转义如此重要:例如,防⽌SQL注⼊和跨站点脚本。但是,我们通常不使⽤拜占庭容错协议,⽽只是让服务器决定什么是客户端⾏为,⽽不是允许的。在没有这种中⼼授权的对等⽹络中,拜占庭容错更为重要。

弱谎言形式

系统模型与现实

安全性和活性

区分安全性和活性属性的⼀个优点是可以帮助我们处理困难的系统模型。对于分布式算法,在系统模型的所有可能情况下,要求始终保持安全属性是常⻅的【88】。也就是说,即使所有节点崩溃,或者整个⽹络出现故障,算法仍然必须确保它不会返回错误的结果(即保证安全性得到满⾜)。

将系统模型映射到现实世界

证明算法正确并不意味着它在真实系统上的实现必然总是正确的。但这迈出了很好的第⼀步,因为理论分析可以发现算法中的问题,这种问题可能会在现实系统中⻓期潜伏,直到你的假设(例如,时间)因为不寻常的情况被打破。理论分析与经验测试同样重要。