这是我参与「第五届青训营 」伴学笔记创作活动的第十二天。今天学习了有关分布式理论的课程,老师从多个方面给我们介绍了分布式理论,并引入了一个经典问题拜占庭问题来帮助我们理解。
什么是分布式系统?他是一系列有共同目标的计算机程序集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标,可分为分布式计算、分布式存储、分布式数据库等。分布式系统具有低成本、高弹性、高可靠性等优点,这让它成为了使用最广泛的系统。作为学习者分布式系统是我们后端开发必备的技能,我们要多做学习和练习,熟练掌握分布式系统。老师还介绍了分布式系统的故障模型:
- Byantine failure:节点可以任意篡改发送给其他节点的数据。
- Authentication detectable byzantine failure:节点可以篡改数据但不能伪造数据。
- Performance failure:节点未能在特定时间段收到数据。
- Omission failure:节点收到数据的时间无限晚,既收不到数据。
- Crash failure:在Omission failure的基础上增加了节点停止响应的假设,也将持续进行Omission failure。
- Fail-stop failure:在Crash failure的基础上增加了错误可监测的假设。
关于拜占庭问题,老师也举了一个形象的例子来给我们讲解这个抽象的概念,有两个将军分别带队在敌人的两侧,他们需要互通进攻时间,只有两个部队同时进攻才可以击败敌人,或者都不进攻这样没有损失,如何相互联系呢?在没有无线电的背景下只能用信使到对方军中口头传递,在越过敌人阵地的时候信使有几率被捕获,消息无法传递,由于消息有可能不能传递,传递后有可能不能接收到响应,所以两支军队理论上是无法达成共识的,这个问题完美映射了在网络中信息的传递,老师举的例子也方便我们去理解分布式系统的实现。