爬虫实战6—分布式系统设计
文章说明:本文是在学习一个网络爬虫课程时所做笔记,文章如有不对的地方,欢迎指出,积极讨论。
一、分布式系统
分布式系统(distributed system):是建立在网络之上的软件系统,具有高度的内聚性和透明性。网络和分布式系统之间的区别更多的在于高层软件(特别是OS),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统,用户感觉不到数据是分布的,即用户不须知道是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。
软件系统(software systems):是指由系统软件、支撑软件和应用软件组成的计算机软件系统,它是计算机系统中有软件组成的部分。
分布式处理(distributedprocessing)和并行处理(Parallel processing)是为了提高并行处理速度采用的两种不同的体系架构。并行处理是利用多个功能部件或多个处理机同时工作来提高系统性能或可靠性的计算机系统,这种系统至少包含指令级或指令级以上的并行。分布式处理则是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机通过通信网络连接起来,在控制系统的统一管理控制下,协调地完成大规模信息处理任务的计算机系统。
处理机(processor):包括CPU、主存储器和I/O接口。处理机外接外围设备就构成完整的计算机系统。
(一)Deduce ofdistributed system
(1)A program:is the codeyou write.
(2)A process:is what youget when you run it.
(3)A message:is used tocommunicate between processes.(通讯机制)
(4)A packet:is afragment of a message that might travel on a wire.
(5)A protocol:is a formaldescription of message formats and the rules that two processes must follow inorder to exchange those messages. (1-5可以部署在单机上)
(6)A network:is the infrastructurethat links computers, workstations, terminals, servers, etc. It consists ofrouters which are connected by communication links.
(7)A component:can be aprocess or any piece of hardware required to run a process, supportcommunications between processes, store data, etc.
(8)A distributedsystem:is an application that executes a collection of protocols tocoordinate the actions of multiple processes on a network, such that allcomponents cooperate together to perform a single or small set of relatedtasks.
系统设计初期不需要一开始就按分布式系统来设计,开始时需要不断修改、重构自己的代码,且QPS没有那么高,直接就按照分布式系统进行设计会比较浪费资源。
(二)分布式系统的优势
1.高容错性能;
2.可靠性
3.可恢复性
4.持久化
5.可扩展性
(三)分布式系统的挑战
1.数据复制和迁移需要持久化
2.故障模式
3.并发性
4.异质性
5.安全性
(四)分布式爬虫系统
二、主从服务设计
(一)Master-Slave结构
1.有一个主机对所有的服务器进行管理。 (DB,并行爬取)
2.当爬虫服务器多的时候,必须能通过一个中心节点对从节点进行管理。
3.能对整体的爬取进行控制。 time_sleep
4.爬虫之间信息共享的桥梁
5.负载控制。
主板一般拥有两个IDE(integrated development environment,集成开发环境)接口,可分别连接两条IDE数据线。而每条IDE数据线上有上有两个IDE接口,可分别连接两个IDE设备,这两个IDE结构,就分别是“Master”接口和“slave”接口。
Master(主盘):系统启动首先读取并引导的盘,对于装有OS的硬盘来说,最好将它设置为“master”,这样系统才能被正确引导。简写为“MA”。
Slave(从盘):简写为“SLA”。
心跳(heartbeat):指主服务器与各设备之间通过周期性发送信息,判断设备的健康状况,判断对方是否“存活”。如果在指定的时间内仍没有收到设备的心跳信息,就可以怀疑此设备发生故障,再仔细检查确认故障是否发生,确认故障后就要采取必要的措施。
(二)Remote ProcedureCalls
(三)Socket
(1).CreateClient Socket
#create an INET,STREAMing socket
s = socket.create_connection(socket.AF_INET,socket.SOCK_STREAM)
(2).CreateServer Socket
#create an INET,SREAMing socket
serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#bind the socket to a public host , and a well_known port
serversocket.bind(socket.gethostname(),20010)
#become a server socket
serversocket.listen(5)
while True :
#acceptconnections from outside
(clientsocket ,address) = serversocket.accept()
#now do somethingwith the clientsocket
#in this case,we’llpretend this is a threaded
server ct =client_thread(clientsocket)
ct.run()
(3)Non-blockingmode listening
connection.setblocking(False),
(4)Ways to endcommunication
(四)串行化处理
为了防止数据被过度访问,可以由前端统一管理任务队列,这是,可以在前端消息请求与数据库之间再建立一层任务队列,用于隔离一部分数据更新操作。