主从设备模式根据名字来说就知道,拥有一主一从。对他的操作就有主有次。这种模式主要有两部分组成,主设备和从设备。主设备组件在相同的设备组件中分配工作,并计算最终结果,而这些结果是以后从设备返回的。

主从设备模式又称主仆模式这种模式的核心思想试讲一个原始的任务,变为不同的子任务,就像一个主人把任务分配给自己的多个仆人一样进行完成,当仆人完成各自的子任务之后再交还结果给自己的主人,主人再把所有仆人的结果整合到一起,得到一个真正的综合结果,这就是大概的运行思路,但是要仆人进行运算就得给仆人时间和场地,所以程序还要专门的生出让仆人工作的场地,就是说要提供专门的线程来让子程序进行运算,所以我们可以看出来,主从模式实际是一种多线程模式。

多线程模式就有多线程模式的好处,首先因为线程较多,我们程序中的仆人可以一起进行运算,这就导致了运行效率的提高,也提高了程序的性能,让程序运行的资源利用率提高,进而造成的结果就是程序运行速度的提高,计算精度的提高,由于线程之多,我们程序的容错率也大大提高。

但同时这也造就了一些无法改变的缺点,由于线程的不断增多,会导致硬件的内存会被不断的占用,导致内从在运行大程序时不一定够用,而且由于主仆之间不断地进行数据的交流,交流必然需要时间,这就导致了时间上会产生一些问题,主人要一直协调与不同仆人之间的时间交流问题,导致了数据交换和运行的不及时性,仆人之间也会互相争夺资源来进行自己的运算。

评价:提高计算效率,又实现了信息隐藏。

使用场景

在数据库复制中,主数据库被认为是权威的来源,并且要与之同步
在计算机系统中与总线连接的外围设备(主和从驱动器)

并行计算,以提升计算性能

容错处理,以提升计算的可靠性

计算精度,以提高计算的精确程度

收集子任务处理结果的2种方法:
1)Master和Slave使用同一个存储仓库
2)使用Future模式
可靠性与异常处理:
可以捕获子任务异常,可以考虑由其自身重新执行处理失败的子任务,即在客户端线程执行。

 

在分布式的系统中,这个模式还是比较常用的,简单的说,主从(Master-Slave)与进程-线程的关系类似,Master只有一台机器作为Master,其他机器作为Slave,这些机器同时运行组成了集群.Master作为任务调度者,给多个Slave分配计算任务,当所有的Slave将任务完成之后,最后由Master汇集结果,这个其实也是MapReduce思想所在。

例如在Hadoop中,HDFS采用了基于Master/Slave主从架构的分布式文件系统,一个HDFS集群包含一个单独的Master节点和多个Slave节点服务器,这里的一个单独的Master节点的含义是HDFS系统中只存在一个逻辑上的Master组件。一个逻辑的Master节点可以包括两台物理主机,即两台Master服务器、多台Slave服务器。一台Master服务器组成单NameNode集群,两台Master服务器组成双NameNode集群,并且同时被多个客户端访问,所有的这些机器通常都是普通的Linux机器,运行着用户级别(user-level)的服务进程.

 

在上图中展示了

我们可以把主从模式认为是一种一对多的模式,由一个主模式对应着多个它下属的从模式。这种模式我们首先可以利用它来进行数据库标的设计,建立一个数据库的主从表,而最基本的就是一个主表,一个从表。进而利用这种结构就可以完成一种最简单的程序的搭建,比如说百度贴吧的最简化搭建,每个人都可以在贴吧里帖子,每一个不同的吧就可以看做是一个主表,每个人发的帖子就可以看做是一个从表。从这个例子中,我们很明显的就可以知道主从关系是什么对应关系了,主表就是贴吧,从表就是吧里发的帖子,这两者就是一种一对多的关系,不但如此,每个帖子因为有人可以回复,一个帖子就拥有了多个回复,这又构成了一个新的主从关系表,凡是类似这种的都可以利用主从模式来进行数据库的建立。

优点:准确性——将服务的执行委托给不同的从设备,具有不同的实现。

缺点:从设备是孤立的:没有共享的状态。主-从通信中的延迟可能是一个问题,例如在实时系统中。这种模式只能应用于可以分解的问题。