Python3爬虫里关于Splash负载均衡配置详解

用Splash做页面抓取时,如果爬取的量非常大,任务非常多,用一个Splash服务来处理的话,未免压力太大了,此时可以考虑搭建一个负载均衡器来把压力分散到各个服务器上。这相当于多台机器多个服务共同参与任务的处理,可以减小单个Splash服务的压力。

1. 配置Splash服务

要搭建Splash负载均衡,首先要有多个Splash服务。假如这里在4台远程主机的8050端口上都开启了Splash服务,它们的服务地址分别为41.159.27.223:8050、41.159.27.221:8050、41.159.27.9:8050和41.159.117.119:8050,这4个服务完全一致,都是通过Docker的Splash镜像开启的。访问其中任何一个服务时,都可以使用Splash服务。

2. 配置负载均衡

接下来,可以选用任意一台带有公网IP的主机来配置负载均衡。首先,在这台主机上装好Nginx,然后修改Nginx的配置文件nginx.conf,添加如下内容:

http {
    upstream splash {
        least_conn;
        server 41.159.27.223:8050;
        server 41.159.27.221:8050;
        server 41.159.27.9:8050;
        server 41.159.117.119:8050;
    }
    server {
        listen 8050;
        location / {
            proxy_pass http://splash;
        }
    }
}

这样我们通过upstream字段定义了一个名字叫作splash的服务集群配置。其中least_conn代表最少链接负载均衡,它适合处理请求处理时间长短不一造成服务器过载的情况。

当然,我们也可以不指定配置,具体如下:

upstream splash {
    server 41.159.27.223:8050;
    server 41.159.27.221:8050;
    server 41.159.27.9:8050;
    server 41.159.117.119:8050;
}

这样默认以轮询策略实现负载均衡,每个服务器的压力相同。此策略适合服务器配置相当、无状态且短平快的服务使用。

另外,我们还可以指定权重,配置如下:

upstream splash {
    server 41.159.27.223:8050 weight=4;
    server 41.159.27.221:8050 weight=2;
    server 41.159.27.9:8050 weight=2;
    server 41.159.117.119:8050 weight=1;
}

这里weight参数指定各个服务的权重,权重越高,分配到处理的请求越多。假如不同的服务器配置差别比较大的话,可以使用此种配置。

最后,还有一种IP散列负载均衡,配置如下:

upstream splash {
    ip_hash;
    server 41.159.27.223:8050;
    server 41.159.27.221:8050;
    server 41.159.27.9:8050;
    server 41.159.117.119:8050;
}

服务器根据请求客户端的IP地址进行散列计算,确保使用同一个服务器响应请求,这种策略适合有状态的服务,比如用户登录后访问某个页面的情形。对于Splash来说,不需要应用此设置。

我们可以根据不同的情形选用不同的配置,配置完成后重启一下Nginx服务:

sudo nginx -s reload

这样直接访问Nginx所在服务器的8050端口,即可实现负载均衡了。

3. 配置认证

现在Splash是可以公开访问的,如果不想让其公开访问,还可以配置认证,这仍然借助于Nginx。可以在server的location字段中添加auth_basic和auth_basic_user_file字段,具体配置如下:

http {
    upstream splash {
        least_conn;
        server 41.159.27.223:8050;
        server 41.159.27.221:8050;
        server 41.159.27.9:8050;
        server 41.159.117.119:8050;
    }
    server {
        listen 8050;
        location / {
            proxy_pass http://splash;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
        }
    }
}

这里使用的用户名和密码配置放置在/etc/nginx/conf.d目录下,我们需要使用htpasswd命令创建。例如,创建一个用户名为admin的文件,相关命令如下:

htpasswd -c .htpasswd admin

接下来就会提示我们输入密码,输入两次之后,就会生成密码文件,其内容如下:

cat .htpasswd 
admin:5ZBxQr0rCqwbc

配置完成后,重启一下Nginx服务:

sudo nginx -s reload

这样访问认证就成功配置好了。

4. 测试

最后,我们可以用代码来测试一下负载均衡的配置,看看到底是不是每次请求会切换IP。利用http://httpbin.org/get测试即可,实现代码如下:

import requests
from urllib.parse import quote
import re
lua = '''
function main(splash, args)
  local treat = require("treat")
  local response = splash:http_get("http://httpbin.org/get")
  return treat.as_string(response.body)
end
'''
url = 'http://splash:8050/execute?lua_source=' + quote(lua)
response = requests.get(url, auth=('admin', 'admin'))
ip = re.search('(\d+\.\d+\.\d+\.\d+)', response.text).group(1)
print(ip)

这里URL中的splash字符串请自行替换成自己的Nginx服务器IP。这里我修改了Hosts,设置了splash为Nginx服务器IP。

多次运行代码之后,可以发现每次请求的IP都会变化,比如第一次的结果:

41.159.27.223

第二次的结果:

41.159.27.9

这就说明负载均衡已经成功实现了。

本节中,我们成功实现了负载均衡的配置。配置负载均衡后,可以多个Splash服务共同合作,减轻单个服务的负载,这还是比较有用的。

到此这篇关于Python3爬虫里关于Splash负载均衡配置详解的文章就介绍到这了,更多相关Python3 Splash负载均衡配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3学习之Splash的安装与实例教程

    前言 Splash是一个javascript渲染服务.它是一个带有HTTP API的轻量级Web浏览器,使用Twisted和QT5在Python 3中实现.QT反应器用于使服务完全异步,允许通过QT主循环利用webkit并发. 一些Splash功能: 并行处理多个网页 获取HTML源代码或截取屏幕截图 关闭图像或使用Adblock Plus规则使渲染更快 在页面上下文中执行自定义JavaScript 可通过Lua脚本来控制页面的渲染过程 在Splash-Jupyter 笔记本中开发Splash

  • Python3爬虫中Splash的知识总结

    Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介绍 ·利用Splash,我们可以实现如下功能: ·异步方式处理多个网页渲染过程: ·获取渲染后的页面的源代码或截图: ·通过关闭图片渲染或者使用Adblock规则来加快页面渲染速度: ·可执行特定的JavaScript脚本: ·可通过Lua脚本来控制页面渲染过程: ·获取渲染的详细过程并通过HAR(

  • Python3爬虫里关于Splash负载均衡配置详解

    用Splash做页面抓取时,如果爬取的量非常大,任务非常多,用一个Splash服务来处理的话,未免压力太大了,此时可以考虑搭建一个负载均衡器来把压力分散到各个服务器上.这相当于多台机器多个服务共同参与任务的处理,可以减小单个Splash服务的压力. 1. 配置Splash服务 要搭建Splash负载均衡,首先要有多个Splash服务.假如这里在4台远程主机的8050端口上都开启了Splash服务,它们的服务地址分别为41.159.27.223:8050.41.159.27.221:8050.41

  • Linux 系统 nginx 服务器安装及负载均衡配置详解

    nginx(engine x) 是一个 高性能 的 HTTP 和 反向代理 服务器.邮件代理服务器以及通用的 TCP/UDP 代理服务器.其特点为轻量级(占用系统资源少).稳定性好.可扩展性(模块化结构).并发能力强.配置简单等. 本文主要介绍在测试环境中通过 nginx 实现基本的 负载均衡 功能. nginx 可以提供 HTTP 服务,包括处理静态文件,支持 SSL 和 TLS SNI.GZIP 网页压缩.虚拟主机.URL 重写等功能,可以搭配 FastCGI.uwsgi 等程序处理动态请求

  • nginx七层负载均衡配置详解

    目录 一.负载均衡介绍 二.nginx下载安装 1.下载nginx源码包 2.安装并启用 三.nginx七层负载均衡配置 real server设置: 客户端设置: 四.nginx扩充调度算法(sticky) 1.下载扩展包 2.编译前做一些优化: 3.重新编译 一.负载均衡介绍 1)四层负载均衡 所谓四层就是基于IP+端口的负载均衡 四层负载均衡,是指OSI七层模型中的传输层,传输层已经支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载. 2)七层负载均

  • nginx sticky实现基于cookie负载均衡示例详解

    目录 前言 思考 1.cookie_jsessionid 负载均衡 1.1 后端准备 1.2 hash $cookie_jsessionid;配置 2.nginx sticky 负载均衡 2.1 下载 sticky 2.2 重新编译升级nginx 2.3 upstream 配置 sticky 2.4 修改后端不再创建session 2.5 再次 多次请求 3.sticky 其他用法 总结 前言 sticky 是一个nginx的第三方模块 它不在nginx发行版中 需要额外编译这个模块的, 它的思

  • Tomcat多实例与负载均衡示例详解

    目录 一.Tomcat多实例 1.1 安装好 jdk 1.2 安装 tomcat 1.3 配置 tomcat 环境变量 1.4修改tomcat2中的主配置文件 1.5修改启动脚本和关闭脚本 1.6启动tomcat并查看 二.Nginx+Tomcat负载均衡.动静分离 2.1 部署Nginx 负载均衡器 2.2部署第一台Tomcat 2.3部署第二台Tomcat 2.4nginx 配置 一.Tomcat多实例 1.1 安装好 jdk 在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是

  • nginx负载均衡配置,宕机自动切换方式

    严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问. 下面列出这两个模块中相关的指令: 语法: proxy_connect_timeout time; 默认值: proxy_connect_timeout 60s; 设置与后端服务器建立连接的超时时间.应该注意这个超时一般不可能大于75秒. 语法

  • Linux上搭载Nginx负载均衡配置使用案例详解

    目录 1,这里我们来说下很重要的负载均衡, 那么什么是负载均衡呢? 2, 负载均衡的种类 3, 这里我们只来说Nginx(其他的大家有兴趣可以自行查阅相关文档) 4, 创建两台Nginx服务器 5, 搭建Nginx 搭建Keepalived:(Keepalived需要依赖openssl) 1,这里我们来说下很重要的负载均衡, 那么什么是负载均衡呢? 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担.在此

  • Nginx负载均衡配置简单配置方法

    背景 当一个网站从小到大,访问量逐渐增大现有的服务器已经支撑不住,一般的解决方案就是缓存.加服务器.数据库读写分离.实行负载均衡分布式等等,本人对这些技术方案都没有在项目中具体的实践过, 但是一直听同事过说起,利用空闲时间自我学习了解下: 负载均衡 什么是负载均衡,就是当快要承受不住的时候,又给你一台服务器来分担压力,请求会分配到两台服务器上,两台服务器上部署相同的内容相当于一个分身,可以处理相同的事情: Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转

  • linux下Nginx+Tomcat负载均衡配置方法

    Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/ 下. #然后配置

  • Nginx+Tomcat+Https 服务器负载均衡配置实践方案详解

    由于需要,得搭建个nginx+tomcat+https的服务器,搜了搜网上的发现总是有错,现在整理了些有用的,备忘. 环境:Centos6.5.JDK1.8.Tomcat8.Nginx1.10.1 准备材料: 1.JDK1.8安装包jdk-8u102-linux-x64.tar.gz 2.Tomcat8安装包apache-tomcat-8.0.37.tar.gz 3.Nginx1.10安装包nginx-1.10.1.tar.gz 1.JDK安装配置 解压并安装到/usr/local/jdk [r

随机推荐