17、go语言:分布式爬虫
1、分布式系统简介: 多个节点: 容错性 可扩展性(性能) 固有分布性 消息传递: 节点具有私有存储 易于开发 可扩展性(功能) 对比:并行计算 完成特定的需求: 消息传递的方法: REST(动作、URL) RPC(序列化传输、远端序列化后调用) 中间件(可以存储消息、一对多、消息队列) 一般消息传递的方法: 对外:REST 模块内部:RPC 模块之间:中间件,REST 分布式架构VS为微服务架构 分布式:指导节点之间如何通信 微服务:鼓励按业务划分模块 微服务架构通过分布式架构来实现 多层架构VS微服务架构 微服务架构具有更多的“服务” 微服务通常需要配合自动化测试,部署,服务发现等 目前我们倾向于微服务架构 2、分布式爬虫架构: 并发版爬虫的架构: 目前的问题: 限流问题 去重问题 数据存储问题(固有分布式) 解决限流问题: 单节点能够承受的流量有限–> 将worker放到不同的节点 每个机器都可以起很多worker,任务不一定分发到本机的worker 解决去重问题: 单节点能承受的去重数据量有限 无法保存之前去重结果 基于Key-Value Store(如Redis)进行分布式去重 每来一个请求都要去连接一次去重服务,容易被卡住,所以需要把去重的工作交给worker,worker卡住 没关系,可以起很多个goroutine的worker 解决存储问题: 存储部分的结构