这是我参加[第五届青训营]伴学笔记创作活动的第八天
一.什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等
- 优势:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
- 挑战:
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
二.分布式的使用(Why - How - What)
- 使用者视角:
Why:
- 数据爆炸,对存储和计算有大规模运用的述求
- 成本低,构建在廉价服务器之上
How:
- 分布式框架
- 成熟的分布式系统
What:
- 理清规模,负载,一致性要求等
- 明确稳定性要求,制定技术方案
- 学习者视角:
Why:
- 后端开发必备技能
- 帮助理解后台服务器之间协作的机理
How:
- 掌握分布式理论
- 了解一致性协议
What:
- 把要点深入展开,针对难点搜索互联网资料进行学习
- 将所学知识运用于实践
三.常见的分布式系统
- 分布式存储
- Google File System (GFS):google分布式文件系统
- Ceph:统一的分布式存储系统
- Hadoop HDFS:基于GPS架构的开源分布式文件系统
- Zookeeper:高可用的分布式数据管理与系统协调框架
- 分布式数据库
- Google Spanner:g0ogle可扩展的、全球分布式的数据库
- TIDB:开源分布式关系型数据库
- HBase:开源NosqI数据库
- MongoDB:文档数据库 **
- 分布式计算
- Hadoop:基于MapReduce分布式计算框架
- Spark:在Hadoop基础之上,使用内存来存储数据
- YARN:分布式资源调度
四. 拜占庭将军问题
引入:两将军问题(Two Generals Problem):两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识。
结论是,两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识。
方案一:同时发送N个信使,任何一个达到对方军队,都算成功。
方案二:设置超时时间,发送后未在一定时间返回,则加派信使。
共识与消息传递的不同:即使保证了消息传递成功,也不能保证达成共识
TCP三次提手是在两个方向确认包的序列号,增加了超时重试,是两将军问题的一个工 程解。
拜占庭将军考虑更加普适的场景,例如3个将军ABC互相传递消息,消息可能丢失,也可能被篡改,当有一个将军是“叛徒”(即出现拜占庭故障)时,整个系统无法达成一致。 如果没有”叛徒”,无论各自观察到怎样的敌情,总能达成一致的行动。
由于”叛徒”C的存在,将军A和将军B获得不同的信息。这样将军A获得2票进攻1票撤退的信息,将军B获得1票进攻2票撤退的信息,产生了不一致。
考虑当4个将军,只有1个叛徒的场景。将军D作为消息分发中枢,约定如果没收到消息则执行撤退。
-如果D为“叛徒”,ABC无论收到任何消息,总能达成一致
-D为”忠将”,ABC有2人将D的消息进行正确的传递,同样能保证最终决策符合大多数。
进而能够证明,当有3m+1个将军,其中m个”叛徒”时,可以增加m轮协商,最终达成一致