云必然是依赖于分布式技术来进行实现的,所以有必要学习和来了解分布式相关的内容
分布式计算的定义:通过网络互联的计算机都具有一定的计算能力,他们之间互相传递数据,实现信息共享,协作共同完成一个处理任务
分布式计算的特点:
分布式的主要特性就是节点分布,将计算量分配到网络中的不同计算节点上去,从而提高计算能力和加快效率。
分布式计算的关键步骤
首先需要规定分布式系统的计算模型,计算模型决定了系统中各个组件应该如何运行,组件之间如何进行消息通信,组件和节点应该如果管理。
常见的计算模型:
计算模型的内容展开又是一大堆需要学习的内容,在这里不进行展开,有兴趣可以自行研究,或者可以期待后续如果有深入学习需求也会同步更新。
分布式计算任务是需要进行分配分摊到各个节点上的,所以算法主要解决的事如何分配,怎么分配的问题。其实这里就是需要一个任务调度器,以及任务调度准备,类似于如何得到权重。
使用特定的分布式计算框架与计算模型,将分布式算法转化为实现,并且保证高效,主要考虑的问题就是计算调度,多节点通信,所以可以说,算法是整个分布式系统的主要核心内容。
ACID是数据库的四个原则:
原子性简单的理解就是,所有的内容,要嘛都成功,要嘛就都不成功。不存在某些成功,或者某些失败的结果,有一个失败就是都失败。
由一组值定义,数据库系统中的所有数据点都必须与这些值保持一致,才能正确读取和接受数据。
比如A+B=10,如果A变了的话,B也要跟随改变才可以
事务之间相互之间不会互相影响
一旦事物提交,并且处理了之后,数据就会永久保存。
ACID的优势在于稳定,并且容易实现,但是只适合在单台服务器上进行操作,如果任务量以及节点量大起来的话就没有办法满足所有的特性,从而效率变得非常差。
2000年7月 加州大学伯克利分校的埃里克·布鲁尔(Eric Brewer)教授在ACM PODC会议上提出CAP猜想。
一个分布式系统只能同时满足一致性,可用性和分区容错性的其中两项
在更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
关系型数据库要求更新过的数据,后续的访问都能看到,强一致性
容忍后续部分访问不到,就是弱一致性。
经过一段时间能够访问到更新后的数据,实际上就是做了数据同步,那么这种就是最终一致性
这个和CIA类似,就是在正常的响应时间内,对于一个可用性的分布式系统,非故障节点需要对请求做出响应。
分布式系统再遇到某节点或者网络故障的时候,依然可以满足一致性和可用性的服务。
想要数据一致性,则就会舍弃可用性
想要强数据可用性,则就会舍弃数据一致性
分区容错则在使用者想要保障那个方面而住处努力
BASE是对CAP理论的延伸,核心思想是即使无法做到强一致性,但应用可以采用适合的方式达到一致性。
DBASE指代 可用性,软件状态(Soft State),最终一致性(Eventual Consistency)
出现故障的时候,允许损失部分可用性,保证核心可用。
如那件状态指允许系统存在中间的状态,并且不会影响系统整体可用行。
在经过一段时间后,最终能够达到一致的状态,最终一致性可以理解为可能等待,但是最终的结果是一致性。
为了解决寻址问题,通过一致性散列将对象均匀的分布到节点上,在增加或者删除是,可以减少需要移动的数据量。
具有分布式能力的系统
Apache Hadoop 是一个典型的分布式软件框架。
主要涉及:
现代的分布式系统:
主要涉及5个方向:
拥有结构化的数据,比如mysql等就是典型的结构化存储的数据库
非结构化存储主要强调的是高可用性,比如分布式文件系统,这里其实很好理解就是没有结构的都可以归类为非结构化存储。
这种模式下,最典型的就是Bigtable,也就是NoSQL,数据主要是通过key-value的方式进行存储。
存储在内存中的数据,比如redis就是典型的存储在内存中的数据库
兼备RDBMS,并且拥有NoSQL的可扩展能力。Spanner
投入更多的机器数量,处理更大的数据
这个就是分布式资源调度系统。
k8s是最典型的分布式资源管理系统。