如果我们用 Splash 来做 JavaScript 动态渲染的页面的抓取的话,如果爬取的量非常大,任务非常多,如果我们用一个 Splash 服务来处理的话未免压力太大了,所以我们可以考虑搭建一个负载均衡器来把压力分散到各个服务器上,这样相当于多台机器多个服务共同参与任务的处理,可以减小单个 Splash 服务的压力。
1. 配置Splash服务
要搭建 Splash 负载均衡首先我们需要有多个 Splash 服务,假如在这里我在四台远程主机的 8050 端口上都开启了 Splash 服务,它们的服务地址分别为:41.159.27.223:8050、41.159.27.221:8050、41.159.27.9:8050、41.159.117.119:8050,四个服务完全一致,都是通过 Docker 的 Splash 镜像开启的,访问任何一个服务都可以使用 Splash 服务。
2. 配置负载均衡
接下来我们可以选用任意一台带有公网 IP 的主机来配置负载均衡,首先需要在这台主机上装好 Nginx,然后修改 Nginx 的配置文件 nginx.conf,添加如下内容:
这样我们通过 upstream 字段定义了一个名字叫做 splash 的服务集群配置,least_conn 代表最少链接负载均衡,它适合处理请求处理时间长短不一造成服务器过载的情况。
或者我们也可以不指定配置,配置如下:
这样默认以轮询策略实现负载均衡,每个服务器的压力相同,此策略适合服务器配置相当,无状态且短平快的服务使用。
另外我们还可以指定权重,配置如下:
我们通过 weight 指定了各个服务的权重,权重越高分配到处理的请求越多,假如不同的服务器配置差别比较大的话,就可以使用此种配置。
最后还有一种 IP 哈希负载均衡,配置如下:
服务器根据请求客户端的 IP 地址进行哈希计算,确保使用同一个服务器响应请求,这种策略适合有状态的服务,如用户登录后访问某个页面的情形。不过对于 Splash 来说不需要。
我们可以根据不同的情形选用不同的配置,配置完成后重启一下 Nginx 服务:
sudo nginx-sreload
这样直接访问 Nginx 所在服务器的 8050 端口即可实现负载均衡了。
3. 配置认证
现在 Splash 是公开访问的,如果我们不想让其被公开访问还可以配置认证,仍然借助于 Nginx 即可,可以在 server 的 location 字段中添加一个 auth_basic 和 auth_basic_user_file 字段,配置如下:
在这里使用的用户名密码配置放置在 /etc/nginx/conf.d 目录,我们需要使用 htpasswd 命令创建,例如创建一个用户名为 admin 的文件,命令如下:
htpasswd-c.htpasswdadmin
接下就会提示我们输入密码,输入两次之后,就会生成密码文件,查看一下内容:
cat.htpasswd
admin:5ZBxQr0rCqwbc
配置完成之后我们重启一下 Nginx 服务,运行如下命令:
sudo nginx-sreload
这样访问认证就成功配置好了。
4. 测试
最后我们可以用代码来测试一下负载均衡的配置,看看到底是不是每次请求会切换IP,利用 http://httpbin.org/get 测试即可,代码实现如下:
这里的 URL 中的 splash 请自行替换成自己的 Nginx 服务器 IP,在这里我修改了 Hosts 添加了 splash 别名。
多次运行代码之后可以发现每次请求的 IP 都会变化:
如第一次的结果:
41.159.27.223
第二次的结果:
41.159.27.9
这就说明负载均衡已经成功实现了。
5. 结语
本节我们成功实现了负载均衡的配置,配置了负载均衡之后可以多个 Splash 服务共同合作,减轻单个服务的负载,还是比较有用的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 3分钟了解负载均衡,分清二层负载均衡和三层负载均衡
- 负载均衡策略之有限负载一致性哈希
- 负载均衡之软硬件负载均衡的优缺点
- 医疗信息系统高负载如何应对?找准东华负载均衡
- 性能大比拼-真实世界工作负载vs实验室综合工作负载
- 负载均衡有多神密?来研究下ShareWAF的开源负载均衡!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。