DungProxy

DungProxy是一个代理IP服务,他包括一个代理IP资源server端和一系列适配中心IP资源得客户端。server负责代理IP资源的收集维护。client则是一系列方便用户使用得API,他屏蔽了代理IP下载、代理IP选取、IP绑定、IP切换等比较复杂逻辑。用户只需要引入client即可方便使用代理IP服务

  • 特别声明 :本项目服务器已下线,默认客户端无法获取代理ip,最近半年没有启用计划。你可以自建server,或者就不要使用被本项目了

广告:dungproxy-client后续主要对vscrawler提供支持,vscrawler中,代理的切换策略会变得更加灵活,vscrawler地址

server设计说明

DrungProxy的代理IP都是从互联网收集,他是架设在一个高度不可用的资源上面的服务。server会负责对这些资源进行清洗、校验、打分,最终输出可以被客户端使用的IP资源。IP资源从入库到最终判定可用生命流程如下

  1. IP抓取 server监听了很多代理IP网站,这些网站包括国内外十几家,有意思的是drungProxy的IP爬虫是一系列网站模版。五六行配置即可实现一个简单的网站模版,然后我们有一个上层调度模块将会负责调起模版进行数据抓取。
  2. IP消重 需要消重的原因是程序运行到一定时间之后,大量IP都是数据库里面已经存在的了,这个时候如果在数据库进行消重逻辑将会导致大量数据库读写,实际上我们的服务器是一个1块钱的腾讯云(曾经是),看起来是撑不住这么大的请求的(平均每天可以有10K量级)。最后在入库前设置了一个bloomFilter消重模块,能够高效的检测资源是否被入库过。
  3. 位置信息完善 这个逻辑不大,通过taobaoIp接口获取地址信息,完善IP资源元数据。taobaoIP
  4. IP验证 IP验证分为好几个步骤。我们的IP总资源有80W,检验一个IP是否可用一般来说需要20秒左右的时间,因为代理IP本身响应比较慢,我们会把超时时间设置得比较长。所以可以计算一下80W数据走一轮将要消耗得时间,即使在多线程并行环境下时间也是很多的。为了在一定资源下完成校验,我们设计了如下步骤
  • 端口开启校验,在进行可用性校验前,首先需要检查IP端口是否开启。调研发现大量资源其实端口都不通,所以专门设计一个任务验证端口是否开启,端口开启验证超时时间为5秒。由于大多数资源端口都没有开启,所以大部分资源的校验时间下降到5秒了。
  • 可用性校验,进行可用性校验的需要先进行端口开启校验,系统中端口开启的资源大概3W,所以校验可用性的总资源有3W左右。可用性校验存在如下问题,很多代理IP其实不是代理网站,想他发送请求最终不是我们预期的数据,比如他返回给我们一个代理IP认证网页。所以我们不能根据是否能够请求到数据来判定IP是否可用。我们的做法是在公网放置一个API接口,然后控制代理IP访问我们自己的接口,如果能够拿到符合我们接口的预期数据,那么认为IP可用。
  • domain可用该校验,可用性校验通过之后IP还不是真正可用,悲伤的发现代理IP是和域名相关的。所以同一个IP在不同域名下表现可能不一样。所以我们维护了一个域名IP池,这里面存储各个域名下可用IP
  1. IP分发 IP分发是根据客户请求分配可用IP。分发逻辑现在还没有完全完善,但是已经实现了最迫切和有校的分发方案。分发逻辑设计是:先尝试查询domainIP池,再根据其他请求参数做条件匹配,再查询系统可用IP,再随机选择可用填充。四个步骤如果有一个步骤得到的IP超过请求参数期待数目,则不进行接下来的动作。

IP验证模型

再IP验证的时候,我们设计了一个模型用来确定哪些IP应该优先验证。模型描述如下:长期可用IP检测频率低,长期不可用IP检测评率低。不稳定IP和刚加入的IP检测频率高。我们使用优先队列来实现这个逻辑,所有IP根据分值放在不同优先队列中,每次校验的时候再不同优先队列中拿出一定资源进行校验(不同优先级拿出的资源数目不一样,高优先级的对象拿出更多资源),对于同一个优先队列,我们根据最后验证时间排序。使上次更新时间最久的资源被优先选择。

分发去重

分发资源的时候,设计去重问题,也就是根据相同条件,每次分发得到的IP很大可能会重复。为了规避这个问题,每次分发都会相应的下发一个资源签名,他会记录分发过的IP。在下次请求的时候,客户端需要带上这个签名,服务器会根据签名过滤,同时会重新对新分发的IP资源做再次签名.

server部署

server端使用java编写,使用maven管理项目,使用mysql作为数据库。相关技术包括springMVC,spring,tomcat,mybatis,guava,fastjson,httpclient等。 运行server的方式很简单

  1. 在项目根目录执行maven命令(需要提前安装maven,maven安装方式略)mvn install -Dmaven.test.skip=true
  2. 在server目录执行maven命令 mvn tomcat7:run

server配置

直接运行项目使用的是我们的默认数据库,同时使用的是默认配置。实际上server存在一些配置用来设置运行参数。合理的运行参数能够合理使用机器资源以及达到更好的运行效果。 项目主要有两个配置文件需要配置:

  1. mysql.properties 用来配置数据库信息
  2. config.properties 配置其他启动参数,主要需要关注里面几个url地址,还有 system.thread.的参数项。system.thread用于指定某一种类型的任务执行的线程数,如果数据小于1,则这个模块不会启动。但是如果这个模块接收到了任务请求,那么他会转发到其他服务器上面(也就是上面的两个forward相关的url,没办法服务器都是腊鸡服务器 )

其他的应该没有了把,哦对了,项目存在多个profile,也就是resources.local,resources.beta,resources.prod等。他们叫做profile,是maven里面的概念,默认是resources.local生效的。如果想使用其他profile下面的配置,则增加 -Pprofile参数,如运行server mvn -Pskyee clean tomcat7:run

server接口事例

http://115.159.40.202:8080/proxyipcenter/av?usedSign=&checkUrl=http%3A%2F%2Ffree-proxy-list.net%2F&domain=free-proxy-list.net&num=10

{ "data": { "data": [ { "id": 257, "ip": "203.192.12.148

sql server代理无法启动_DungProxy代理资源服务系统,相关推荐

  1. SQL Server代理服务无法启动的处理方法(转载)

    原文地址::http://www.cnblogs.com/scwyh/archive/2013/07/17/3195348.html 相关文章 1.关于sql server 2008 R2中遇到的sq ...

  2. Sql Server 2008 无法启动T-Sql调试问题的解决方案

    Sql Server 2008 无法启动T-Sql调试问题的解决方案 参考文章: (1)Sql Server 2008 无法启动T-Sql调试问题的解决方案 (2)https://www.cnblog ...

  3. sql express 无法启动服务_在Windows2012下安装SQL Server 2005无法启动服务的解决办法...

    因为安装了Windows2012操作系统,的确很不错,唯一的遗憾就是不支持Sql Server 2005的安装.找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的办法了,和大家分享一下. ...

  4. SQL SERVER 2014无法启动T-SQL调试的解决方法(亲自实践)

    SQL SERVER 2014无法启动T-SQL调试的解决方法(亲自实践) 参考文章: (1)SQL SERVER 2014无法启动T-SQL调试的解决方法(亲自实践) (2)https://www. ...

  5. Windows 不能在 本地计算机 启动 SQL Server (MSSQLSERVER)。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代

    问题: 前几天生产工控机上启动SQL Server 的时候出现"Windows 不能在 本地计算机 启动 SQL Server (MSSQLSERVER).有关更多信息,查阅系统事件日志.如 ...

  6. [数据库系统综合实验]电子图书资源服务系统

    开源项目:book-house-swing 开发时间:2021.11 - 2021.12 文章目录 一.快速开始 二.背景调查 三.需求分析 四.功能描述 1.客户端功能 2.服务端功能 五.数据库概 ...

  7. “新型冠状病毒国家科技资源服务系统”入选全球15项世界互联网领先科技成果...

    11月23日至24日世界互联网大会·互联网发展论坛在浙江乌镇举行,本次论坛由世界互联网大会组委会主办,主题为"数字赋能,共创未来--携手构建网络空间命运共同体". 中国科学院微生物 ...

  8. SQL Server 2008 Integration Services 用代理加入job的例子

    注意事项: 一.建SSIS包 1.页面属性(Package)设置 1.1.ProtectionLevel:EncryptSensitiveWithPassword(使用密码加密敏感数据).默认Encr ...

  9. sql server (mssqlserver)无法启动,事件查看器提示SQL Server 无法生成 FRunCM 线程

    SQL Server服务无法启动时,时常会遇到以下提示: 本地计算机上的MSSQLSERVER服务启动后又停止了.一些服务自动停止,如果它们没有什么可做的,例如"性能日志和警报"服 ...

  10. SQL Server 2017无法启动,提示“系统找不到指定的文件”【虚拟机内安装的】

    虚拟机装了一个win10的,然后它就自动更新了 太烦人了啊,现在没办法了,我这虚拟盘又不够,哪能再更新?!!!辣鸡啊... 结果取消之后就出现问题了... 又是SQLServer的,唉 -- 标题:  ...

最新文章

  1. Android多线程
  2. Redis之跳跃表(面试重点容易考)
  3. 什么叫云服务器_什么叫云计算,云计算是什么,最通俗的解释是这样的
  4. 正确理解ContentPresenter
  5. mysql 执行sql error 2,Mysql:执行source sql脚本时,出现:error 2
  6. 基于matlab的电子时钟,基于LCD1602电子时钟毕业设计报告.doc
  7. win7/win8/win8.1 telnet命令无法使用的解决方案(提示不是内部命令或外部命令)
  8. 360企业版使用感受
  9. 13. PHP 表数据入口(table data gateway)
  10. 爬虫 requests模块的其他用法 抽屉网线程池回调爬取+保存实例,gihub登陆实例
  11. echarts中国地图根据数据对省份渲染不同的颜色
  12. 智慧城市运营典型模式特征分析
  13. Updating Scoop 遇到问题
  14. 【Arduino】继电器控制水泵抽水
  15. 计算机一级标题底纹,2017年计算机一级考试MSOffice考点解析:幻灯片背景的设置...
  16. 汉诺塔自动解题动画中的iOS开发技巧
  17. 安卓模拟器设置网速和延迟
  18. 【今日CV 计算机视觉论文速览 第101期】Wed, 17 Apr 2019
  19. 机器学习------L1、L2规范化(L1 Regularization、L1 Regularization)
  20. 前端开发规范:CSS 代码规范指南

热门文章

  1. 将ant Design本地化,可通过link以及script直接引入html中使用
  2. 【译】BMP格式与JPG格式之间的区别
  3. Pyinstaller使用教程
  4. 基于麻雀搜索算法的极限学习机(ELM)分类算法-附代码
  5. 【C++】指针遍历二维数组若干种方法小结
  6. python_dataframe总结1
  7. springboot简单的整合swagger
  8. 求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身
  9. SSH项目搭建-02-配置文件
  10. 爱奇艺Android移动客户端app瘦身经验