首页 > 其他 > 详细

DDIA学习笔记5——chapter8:分布式系统的麻烦

时间:2020-01-21 17:45:19      阅读:82      评论:0      收藏:0      [点我收藏+]

DDIA_Chapter8  学习笔记

 

故障与部分失效:

当我们在单机上编写程序时,我们所编写的程序只有两种确定的状态——功能完好or完全失效。

而当我们在分布式系统上编写程序时(例如微服务系统),我们所编写的程序会存在不确定的状态。例如,当服务A调用服务B时,没有响应,可能存在的结果包括:1、服务B失效了  2、服务B没失效,但是存在网络问题,请求没发送至服务B 3、服务B没失效,请求发送到了服务B,但服务B返回的响应丢失了。

技术分享图片

 

 

因此,我们在分布式系统上的程序执行结果是不确定的,这种不确定性和部分失效的可能性,使得分布式系统难以工作。如果要使分布式系统工作,就必须接受部分故障的可能性,并在软件中建立容错机制。换句话说,我们需要从不可靠的组件构建一个可靠的系统。

不可靠的网络

不可靠的时钟

进程暂停(JAVA GC——STOP THE WORLD)

技术分享图片

 

技术分享图片

 

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

? 在上图中,客户端1以33的令牌获得租约,但随后进入一个长时间的停顿并且租约到期。客户端2以34的令牌(该数字总是增加)获取租约,然后将其写入请求发送到存储服务,包括34的令牌。稍后,客户端1恢复生机并将其写入存储服务,包括其令牌值33.但是,存储服务器会记住它已经处理了一个具有更高令牌编号(34)的写入,因此它会拒绝带有令牌33的请求。

DDIA学习笔记5——chapter8:分布式系统的麻烦

原文:https://www.cnblogs.com/ybonfire/p/12222430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!