“这是我自学算力大集群相关知识的第2篇笔记。”
摘要
- 线程
什么是线程,它有什么用?线程是用来管理程序并发性的一种方式,其具体是在CPU不同活动进程的交叠,使得当一项活动等待时,其他活动可以继续进行。
线程的特性
1.并行性
即利用机器上所有核心的CPU周期。可以在后台执行某些任务,或者某些任务需要定期执行,比如定期检查节点存活情况。
2.协调性
主要功能是实现数据从一个线程到另一个线程的传递,并等待数据传输完成。
3.锁定/解锁
线程可以设定数据的锁定状态,这样可以保证一个数据不会同时被不同的线程或任务进行编辑,从而保证数据的一致性。
但需注意锁死的问题,即一个线程(此处指线程1)正在等待线程2产生某些东西。然而,T2正在等待线程1执行某项操作。
线程与进程的关系
进程指的是正在运行的单一程序及其对应的单一地址空间,即进程所独有的一组内存。在一个进程内部,可能拥有多个线程。
在任何一个程序内部,线程可以共享内存, 并通过通道进行同步,但使用互斥锁等机制。但在进程之间,不存在任何交互。
*网络爬虫的工作原理
首先抓取首页,从中提取出该页面链接中提及的所有URL,进而抓取这些链接指向的页面,并在这些页面中查找它们所引用的URL,如此循环往复。直至遍历完所有网页之后便应停止。
爬虫的任务之一是记住已爬取或已开始抓取的 页面,并避免对任何已开始抓取的页面启动第二次抓取(否则将会陷入无限循环,导致任务不能终止)。
- GFS
大型存储系统
其目的是提升并行性能、容错性、复制及一致性。
技术难点包含:
1.分片存储,将数据分散存储在大量服务器上,以便能够并行读取众多服务器的数据——提升读取性能;
2.需要具备自动容错能力,主要是增加副本,但可能存在多副本数据不同步问题。具体为若追求一致性,便需以牺牲性能为代价。如系统需要在确保一次更新后所有副本的数据均保持一致才可进行下一次的数据更新。
此外,强一致性指构建一个系统,其对应用程序或客户端的表现,就如同与单一服务器通信时所期待的那样。即使在简单的系统中,也存在模糊性,无法仅凭服务器输入的跟踪记录来确定应有的输出(如两个客户端同时请求对某个变量赋予不同的值)。所能判断的仅仅是某些结果集是否与可能的执行过程保持一致。需要采取任何措施来确保各个服务器按照相同的顺序处理这同时接收到的请求。
GFS的目标
1. big,即需要满足对于单个文件,拥有比任何单个磁盘都要大的单个文件存储与读取;
2. fast,通过将每个文件自动分割并分布在多个服务器上的形式,使得写入和读取操作能够自动快速完成;
3.自动故障恢复;
4.够在副本之间相距甚远的情况下正常工作,如副本存储在不同机柜或不同地域的服务器上;
5.优化适用于大规模数据处理,即大规模的顺序访问,而非随机访问。这里的“大规模”指的是以T字节或G字节计量的数据量。
对于数据一致性的要求
系统对于错误数据的容忍度远高于银行等机构。通过应用程序随其数据附带校验和,并清晰标记记录边界的方式达到一定程度上的补救。这样做的目的是沩了让应用程序能够从GFS提供的数据中恢复,即使这些数据可能并不完全准确。
GFS的工作方式
1.通过一个主节点进行分配,主服务器负责命名和知道数据块的位置(每个数据块都有一个当前版本号),而数据块服务器则存储实际的数据,同时主节点对每次变更均以日志方式进行记录;
2.在读取数据时,系统会优先寻找最近的块服务器;
3.通过租约的方式,确保不会同时出现两个主节点。
* “脑裂”故障“脑裂”故障指在分布式系统中,多个副本因主节点故障而无法同步数据,导致系统出现多个活跃节点的情况(即,可能因无法同步数据而独立运行,导致数据不一致。)。这一现象通常由于网络分区,即某些网络错误导致主节点无法与主数据库通信,但主数据库仍能与客户端通信的情况。
需要排除错误地为同一数据块指定两个主节点的可能性。主节点的实现方式是,当它指定一个主节点时,会给予该主节点一个租约,这意味着该节点有权在特定时间内作为主节点。 如果租约到期,主节点知道它已到期,并将简单地停止执行客户端请求。
因此,若主节点无法与主服务器通信,且主节点希望指定新的主服务器,则主节点必须等待原主服务器的租约期满,从而避免“脑裂”故障的发生。