计算机网络管理上机报告

上机报告

一、上机题目

1.1 题目要求

利用Apache netty构建爬虫服务器,爬取一定数目的网页,将抓取的网页中的文本内容发送给客户端,客户端将数据存储到Apache kafka消息队列或redis数据库中。

1.2 题目分析

根据题目要求可知,完成该题目需要在Linux环境进行,部署Apache Kafka、Apache Zookeeper、Apache Netty以及Redis。

计算机网络管理上机报告_第1张图片

由上图可知,Netty构建的crawler sever服务器有两项功能,一是服务器中有多个爬虫爬取Internet上的网页信息并提取网页文本和url信息,二是监听客户端的连接状态并将网页信息传输至客户端。

客户端的功能是将从服务端获取的信息发送到消息队列或redis数据库中。

可以写测试类,从Kafka消息队列中取出消息,以及从redis中取出信息。

二、环境配置

初始环境:ubuntu18.04 LTS Desktop Edition+orcale JDK8/openJDK8

IDE:Jetbrains IntelliJ IDEA Ultimate Edition 2019.03

项目管理工具:maven

2.1 Zookeeper配置

由于Kafka是一个分布式的消息队列,依赖Zookeeper对分布式的系统的管理。Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。

可以在Zookeeper的官网下载最新版本的Zookeeper。获取到 Zookeeper 的压缩包并解压到某个目录如:/home/zookeeper-3.5.6 下,Zookeeper 的启动脚本在 bin 目录下,Linux 下的启动脚本是 zkServer.sh。

Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper 在启动时会找这个文件作为默认配置文件。

计算机网络管理上机报告_第2张图片

zoo.cfg配置
- tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 - dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。 - clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

当这些配置项配置好后,你现在就可以启动 Zookeeper 了,启动后要检查 Zookeeper 是否已经在服务,可以通过 netstat – ano 命令查看是否有你配置的 clientPort 端口号在监听服务。

计算机网络管理上机报告_第3张图片

Zookeeper的启动与停止
## 2.2 Kafka配置

Kafka是一个分布式流处理系统,流处理系统使它可以像消息队列一样publish或者subscribe消息,分布式提供了容错性,并发处理消息的机制。

Kafka专为分布式高吞吐量系统而设计。 Kafka往往工作得很好,作为一个更传统的消息代理的替代品。 与其他消息传递系统相比,Kafka具有更好的吞吐量,内置分区,复制和固有的容错能力,这使得它非常适合大规模消息处理应用程序。

计算机网络管理上机报告_第4张图片

Kafka原理图
kafka属于发布订阅模型。发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。

Kafka 对消息保存时根据 Topic 进行归类,发送消息者称为 Producer,消息接受者称为 Consumer,此外 kafka 集群有多个 kafka 实例组成,每个实例(server)成为 broker。在单机环境下,不需要考虑broker的问题。

但是,无论是 kafka 集群,还是 producer 和 consumer 都依赖于 zookeeper 集群保存一些meta 信息,来保证系统可用性。

从kafka的官网获取最新版本的kafka进行解压,kafka的二进制包中已经包含了默认配置的zookeeper。kafka启动过程如下:

#切换到kafka目录下
$ cd kafka_xxxx
#启动zookeeper
$ bin/zookeeper-server-start.sh config/zookeeper.properties
#启动kafka
$ bin/kafka-server-start.sh config/server.properties

2.3 Redis配置

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

redis在linux环境下,安装十分简单,执行以下命令:

#更新所有依赖
$sudo apt-get update
#安装redis-server
$sudo apt-get install redis-server

三、模块设计

3.1 爬虫模块

netty原生仅支持http协议,若需支持https协议必须添加ssl证书。使用netty原生HttpRequest写爬虫服务不可行。因此,采用Apache Httpcomponents下的子模块Httpclient对网页进行抓取,使用jsoup对抓取的网页进行细致分析或利用正则表达式对网页进行简要的处理,例如获取文本信息。

由于大多数网站都设置了反爬机制,我们需要模拟浏览器的浏览行为进行抓取。因此,需要设置代理甚至设置cookies信息,代理和cookies信息可从浏览器中获得。

你可能感兴趣的:(CUG之旅,学习,netty,kafka,redis)