1回答

0收藏

spiderProxyHa

信息分享 信息分享 1398 人阅读 | 1 人回复 | 2021-04-18

SpiderProxyHa
这是一个面向爬虫(抓取)业务的代理IP中间件,使用他可以让你采购的代理ip不会出现离线或者不可用的情况。可以理解为一个高性能的代理IP资源池
[/url]核心功能[url=https://github.com/virjar/SpiderProxyHa#1%E7%A1%AE%E5%AE%9A%E7%9A%84%E6%8E%A5%E5%85%A5%E5%85%A5%E5%8F%A3]1.确定的接入入口
不再像代理云这类ip供应商,每次提供一个ip列表,而且确定的ip:port进行代理访问。对于群控场景,app/网页启动的时候获取ip将会有比较大的成本的
[/url]2. 高可用保证
ip列表方式,代理ip过期时间不准确、代理ip出现再列表中但是实际上无法连接、代理ipTTL高无法快速探测,代理突然中断无法感知。

SpiderProxyHa通过tcp层面连接会话保持,可以再毫秒级时间内感知代理服务器掉线。并且再代理服务器掉线之后立即切换到其他可以代理ip源上

所以 SpiderProxyHa上面提供的所有代理一定是永远可以使用的
[url=https://github.com/virjar/SpiderProxyHa#3-%E9%AB%98%E6%80%A7%E8%83%BD%E4%BD%8E%E9%85%8D%E7%BD%AE%E8%A6%81%E6%B1%82]
3. 高性能低配置要求
不用说了,全程NIO,最低配学生服务器都可以跑的很完美
[/url]4. 请求加速
SpiderProxyHa虽然中间增加了中间层,但是实际上的代理访问速度不会变慢,甚至有较好的调优之后会变得更快。因为对于所有的代理ip都会提前创建连接。 SpiderProxyHa到上游代理之间会有一层tcp连接池。

SpiderProxyHa将代理请求发出点收拢到固定服务器,并以固定服务器作为基准探测ip ttl。ttl高的代理ip节点则自动排在ip池的尾部,ttl越高的ip被使用到的概率会越低。SpiderProxyHa会优先选择质量好的ip资源

SpiderProxyHa可以探测热点target(Pro版本才会支持),并且提前创建到最终host的连接。这个机制可以使得SpiderProxyHa的速度比原生代理ip更快一些

在抢单场景下,提前连接池功能可以得到加快几十毫秒
[url=https://github.com/virjar/SpiderProxyHa#%E4%BD%BF%E7%94%A8]
使用[/url]依赖
基于netty,java生态。要求jdk1.8
[url=https://github.com/virjar/SpiderProxyHa#%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E8%A6%81%E6%B1%82]
系统配置要求
要求不高,1核2G的Linux服务器即可
[/url]构建
mac/linux
./mvnw -Pprod  clean -Dmaven.test.skip=true package appassembler:assemble
windows
mvnw.cmd -Pprod  clean -Dmaven.test.skip=true package appassembler:assemble
之后得到文件夹:
  1. target/dist-spider-proxy-ha-1.0
复制代码
即为可执行文件
[url=https://github.com/virjar/SpiderProxyHa#%E9%85%8D%E7%BD%AE]
配置
本项目不是代理ip产生服务器,而是对代理ip资源进行高可用的中间层服务。也即他是一个代理ip的代理服务器。 使用当前服务之前,需要配置你采购的代理ip。SpiderProxyHa的主要配置文件在
  1. conf/config.ini
复制代码
配置项如下:
[global]
type = global
refreshUpstreamInterval = 30
# 连接池中缓存的连接数量
cache_connection_size = 3
# 连接池中缓存的连接时间,太久可能会僵死
cache_connection_seconds = 30

# 唯一的名称,可以配置多个采购的代理ip源,或者为业务配置独立的ip源。保证各业务ip使用的资源独立
[source_dly_virjar]
# 配置类型,只能是source
type = source
# 一个代理源的描述
name = 代理云virjar代理源
# 对应的代理支持的协议,目前SpiderProxyHa只支持 http/https/socks4/socks5
# 同时SpiderProxyHa只会做同协议转发,而不会做http over socks(至少开源版本不会做)
protocol = http/https/socks4/socks5

# 非常重要,为你加载ip的数据源,需要是ip:port\nip:port结构,如果不是那么你需要自己实现一个中间服务进行格式转换
# 这里的代理比如代理云或者其他类似的代理ip厂商
source_url = http://dailiyun.v4.dailiyun.com/query.txt?key=WQ5D646245&word=&count=200&rand=true&detail=false
# 本地服务组,SpiderProxyHa会在mapping_space对应的端口上开启代理服务,最终的代理请求则是转发到上游代理资源上
# 需要注意,这里的端口范围不能太大,正常应为source_url返回结果数量的 65%,因为上游加载的ip数量可能有一部分无法使用。另外上游ip出问题的时候,需要留下一定buffer实现软切
mapping_space = 36000-36149

## 注意下,如果你的上游代理ip是通过ip白名单鉴权,或者不需要鉴权,那么这里的密码不需要配置
# 上游代理服务器的账户,你的代理供应商会提供给你
upstream_auth_user = your_proxy_use
# 上游代理服务器的密码,你的代理供应商会提供给你
upstream_auth_password = your_proxy_password[/url]启动
配置好之后,启动脚本
  1. bin/SpiderProxyHa.bat
复制代码
或者
  1. bin/SpiderProxyHa.sh
复制代码
[url=https://github.com/virjar/SpiderProxyHa#%E4%B8%9A%E5%8A%A1%E4%BD%BF%E7%94%A8]
业务使用
直接将你业务的代理服务器配置到运行SpiderProxyHa的服务器,端口为 mapping_space配置的端口。

每个端口都会对应一个特定的上游代理ip资源,正常情况下,除非检测到上游ip掉线。否则不会修改mapping关系
[url=https://github.com/virjar/SpiderProxyHa#%E4%BA%8C%E5%BC%80%E5%92%8Cpro%E5%8A%9F%E8%83%BD][/url]二开和Pro功能
本项目开源免费,但是他只是一个基础,还有很多牛逼功能可以做。需要的就主动来找我了(微信 virjar1)
  • 业务API和数据库,可以通过http调用手动修改mapping关系(可以理解为完成ip重播,并且效果是实现秒拨)
  • MITM,中间人攻击。这是核心功能。可以在SpiderProxyHa层面修改http请求和返回。实现抓取数据返回拦截,js/图片资源注入。甚至可以解决当前SekiroJs跨域问题
  • 鉴权,目前在SpiderProxyHa层面,没有实现代理的权限模块。







https://github.com/virjar/SpiderProxyHa






分享到:
回复

使用道具 举报

回答|共 1 个

小跟班

发表于 2021-4-18 22:51:44 | 显示全部楼层

渣总牛逼
回复

使用道具 举报