青训营课程笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天,今天主要学习了分布式理论分布式系统。
分布式
分布式系统简单来说就是一种软硬件组件散布于不同网络计算机之间,相互间仅以消息传递方式通讯与协调的体系。该系统具有具有去中心化,低成本,弹性大,资源共享和可靠性高等5个优点,且该系统一般用于解决通讯异常,网络分区,三态,节点故障等问题。
理论基础
cap理论
一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个基本需求,最多只能同时满足其中的两项。
acid理论
我们知道事务在前面课程中的重要性,类似一个开关,能够保证一个事务中的所有操作要么全部执行,要么全都不执行,数据库事务拥有四个特性ACID:原子性、一致性、隔离性和持久性。
BASE理论
即使无法做到强一致性,但分布式系统可以根据自己的业务特点,采用适当的方式来使系统达到最终的一致性。
分布式事务
分别学习了二阶段提交、三阶段提交、MVCC三种方法
共识协议
Quorum NWR模型+RAFT协议+Paxos协议
分布式实践
我们需要做一个离线技术框架MapReduce来实践分布式系统。首先我们要知道MapReduce核心思想是分而治之:把一项庞大而又复杂的作业或任务分解为若干个小任务并行地处理并最终归并。这时候我们需要借助hadoop来实现mapreduce
我们需要抽象概念模型map和reduce,MapReduce中定义了如下的Map和Reduce两个抽象的编程接口,由用户去编程实现:
map: [k1,v1] → [(k2,v2)]
reduce: [k2, {v2,…}] → [k3, v3]
Map和Reduce为我们提供了一个清晰的操作接口抽象描述。通过以上两个编程接口,可以看出MapReduce处理的数据类型是<key,value>键值对。
MapReduce最为突出之处在于,它通过抽象模型和计算框架,把要执行的任务(what)与具体任务(how)分开,为程序员提供了抽象和高层编程接口和框架。程序员只需关心他们在应用层上的特定计算,仅需编写少量的处理应用本身计算问题的程序代码。