分布式学习最佳实践:从分布式系统的特征开始(附思惟导图)

什么是分布式系统

  分布式系统是由一组经过网络进行通讯、为了完成共同的任务而协调工做的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机没法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据html

  首先须要明确的是,只有当单个节点的处理能力没法知足日益增加的计算、存储任务的时候,且硬件的提高(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,咱们才须要考虑分布式系统。由于,分布式系统要解决的问题自己就是和单机系统同样的,而因为分布式系统多节点、经过网络通讯的拓扑结构,会引入不少单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。网络

  在不少文章中,主要讲分布式系统分为分布式计算(computation)与分布式存储(storage)。计算与存储是相辅相成的,计算须要数据,要么来自实时数据(流数据),要么来自存储的数据;而计算的结果也是须要存储的。在操做系统中,对计算与存储有很是详尽的讨论,分布式系统只不过将这些理论推广到多个节点罢了。并发

  那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片(partition)。对于计算,那么就是对计算任务进行切换,每一个节点算一些,最终汇总就好了,这就是MapReduce的思想;对于存储,更好理解一下,每一个节点存一部分数据就好了。当数据规模变大的时候,Partition是惟一的选择,同时也会带来一些好处:分布式

  (1)提高性能和并发,操做被分发到不一样的分片,相互独立性能

  (2)提高系统的可用性,即便部分分片不能用,其余分片不会受到影响优化

 

  理想的状况下,有分片就好了,但事实的状况却不大理想。缘由在于,分布式系统中有大量的节点,且经过网络通讯。单个节点的故障(进程crash、断电、磁盘损坏)是个小几率事件,但整个系统的故障率会随节点的增长而指数级增长,网络通讯也可能出现断网、高延迟的状况。在这种必定会出现的“异常”状况下,分布式系统仍是须要继续稳定的对外提供服务,即须要较强的容错性。最简单的办法,就是冗余或者复制集(Replication),即多个节点负责同一个任务,最为常见的就是分布式存储中,多个节点复杂存储同一份数据,以此加强可用性与可靠性。同时,Replication也会带来性能的提高,好比数据的locality能够减小用户的等待时间。spa

相关文章
相关标签/搜索