天天看點

代理池搭建代理池文檔

代理池文檔

項目配置

1.項目總體架構

代理池搭建代理池文檔
采用了Django+Uwsgi+apscheduler,主要支援并發,自動任務,API接口提供。
子產品如下:
	apscheduler   自動任務包 pip安裝或直接拉包都可以
	ipredis    	  初始ip放入redis         #自動任務執行
	other     	  存放一些工具類,異步自動任務以及日志工具
	Proxy     	  項目檔案 存放全局配置setting  url分發
	requestsPull  Client端調用,支援最短時延,成功标記,響應碼,最優,随機先進先出,代理類型等。
	···············多種調用方案。已更新為負載均衡模式。
	responsePush  Client端回傳,将标記的ip回傳,或者直接回傳redis,效果一樣。
	sortCount     此子產品為一些排序邏輯算法以及去重和存入mongo  #等待後續可視化
	spider_functool 日志工具以及工具類 上下文管理以及逾時的裝飾器 待後續使用
	static        靜态檔案存放 js-css-html-txt-日志等
	step_task     自動任務檔案 已廢棄轉移到Proxy下
	templates     html檔案 後續廢棄掉
	manage.py     本地調式模式
	requirements.txt 批量安裝環境包   # pip install -r requirements.txt
	uwsgi.ini     Uwsgi啟動程式 配置線程程序等   #uwsgi --ini uwsgi.ini
	README.md    項目使用文檔
	
           

2. 配置項

  1. 共享配置
# 日志檔案路徑
VISIT_LOGGING = os.path.join(os.path.join(static_path, "logger"), "visit_logging.txt")
# ######################## 郵件配置 ########################
# 接受郵件的賬号
RECEIVE_EMAIL_ADDR = [
    '47****[email protected]',                    #日志郵件接收清單  接收直接放入下面清單郵箱位址
]
# 郵件端口
EMAIL_PORT = 587
# 郵件發送者
EMAIL_HOST_USER = '25*****[email protected]'    

# 日志儲存最大值
MAX_LOG_FILE_SIZE = 10 * 1024 * 1024      # 10MB 可自動調配

           
  1. 開發配置
# 本地模式為True
DEBUG = True
# 允許所有通路
ALLOWED_HOSTS = ['*']
# Mongo的IP和端口
MONGODB_HOST = "127.0.0.1"           #本地
MONGODB_HOST = "xxxxxxxx"      #線上
MONGODB_POST = 27017

           
  1. 線上配置
# 線上日志配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'default': {
            'format': '%(asctime)s  %(funcName)s(%(levelno)s)  %(message)s'
        }
    },
    'handlers': {
        'stu_hanlders': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
             # 儲存到的檔案位址
            'filename': TEST_LOG,
            'formatter': 'default'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['stu_hanlders'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}

# 開發模式為False
DEBUG = False

# 調整 允許 IP 通路
ALLOWED_HOSTS = ['*']


# ######################## Mongodb配置 ########################
MONGODB_HOST = "xxxxxxxx"
MONGODB_POST = 27017
           

代理池API(負載均衡)----調用方案

先進先出:

用于 擷取先進先出(随機) 擷取

eg: http://127.0.0.1:5000/pull/?method=XX

請求方式: GET

請求協定:

參數位于 URL 路徑當中 
{
    method: 任務名 #任務名為必填選項   預設走先進先出
}
           

響應資料:

Success:
{
    method: "XX",  		# 任務名
    t_proxy: "WD", 		# 代理類型
    level: 2,  			# 任務等級  預留
    status_code: 200,   # 狀态碼
    timeval: 2587,      # 響應時延
    appcode: 0,         #成功辨別狀态碼  1->成功 0->失敗
    insert_date: 1594704627.4346092,  #插入時間
    ip: "127.0.0.1",     #代理ip
    start: 1595213278.7285383, #開始時間  ->時間戳
    timeOut: 0                 #逾時  ->s機關
}

error:
{
    code: 500,
    msg: "IP回傳參數擷取失敗"
}
worring:
{
	 
}
           

最短時延:

用于 逐個擷取最短時延ip

eg: http://127.0.0.1:5000/pull/?method=XX&sortTime=1

請求方式: GET

請求協定:

參數位于 URL 路徑當中
{
    method: 任務名
    sortTime: 1/0 True->False 預設False   #是否擷取最短時延辨別
}
           

響應資料: 同上。

成功辨別:

優先擷取成功辨別為1的。

eg: http://127.0.0.1:5000/pull/?method=XX&sortSuccess=1

請求方式: GET

請求參數:

參數位于 URL 路徑當中
{
    method: 任務名
    sortSuccess: 1/0 True->False 預設False   #是否擷取成功辨別
}
           

響應傳回: 同上

響應狀态碼:

優先擷取短位狀态碼

eg: http://127.0.0.1:5000/pull/?method=XX&sortResponseCode=1

請求方式: GET

請求參數:

參數位于 URL 路徑當中
{
    method: 任務名
    sortResponseCode: 1/0 True->False 預設False   #是否擷取最小狀态碼辨別
}
           

響應資料: 同上

完美最優:

去重 >> 最短時延 >> 最小狀态碼 >> result

eg: http://127.0.0.1:5000/pull/?method=XX&sortPerfect=1

請求方式: GET

請求參數:

參數位于 URL 路徑當中
{
    method: 任務名
    sortPerfect: 1/0 True->False 預設False   #是否擷取最優辨別
}
           

響應傳回: 同上

代理類型:

注 : 若搭配排優算法,請單獨填寫對應參數。

用于 擷取指定代理類型

eg: http://127.0.0.1:5000/pull/?method=XX&ipType=XX

請求方式: GET

請求參數:

參數位于 URL 路徑當中
{
    method: 任務名
    ipType: MY# 代理類型,預設螞蟻代理,MY 螞蟻;WD 豌豆;HW 華為;FREE 免費
}
           

響應資料: 同上

代理池API----回傳方案

eg: http://127.0.0.1:8000/push/?ip=xxx

請求方式: GET

請求參數:
{"ip":'{"method": "XX",  		#目前任務
         "t_proxy": "MY",       #目前使用代理類型
         "level": 2, 			# 任務級别 0最進階别 1其次級别 2最低級别
         "status_code": 200,	#目前http狀态碼
         "timeval": 2587,      #目前請求響應時延  機關毫秒
         "appcode": 1,         #辨別成功  # 任務執行狀态碼 1.成功  0.失敗
         "insert_date": 1594704627.4346092, #寫入時間
         "ip": "139.159.220.133",  #代理ip
         "start": 1595213278.7285383, #請求開始時間
     	 "timeOut":0              #逾時時間  機關秒
	}'
}

           

響應資料:

{
    code: 200,
    msg: "Success"
}
           

代理池性能方面

Django+Uwsgi 》》目前經過測試,1s支援200個并發。(1G1核)

[uwsgi]
#使用nginx連接配接時使用
;socket=0.0.0.0:8000
#直接做web伺服器使用
http=0.0.0.0:5000
#服務停止時自動移除unix Socket和pid檔案
vacuum = true
#項目目錄
chdir= /opt/app/Proxy
#項目中wsgi.py檔案的目錄,相當于項目目錄
wsgi-file=Proxy/wsgi.py
static-map=/static=/opt/app/Proxy/static
# 通過該端口可以監控 uwsgi 的負載情況
stats = 0.0.0.0:9999
# 設定一個逾時,用于中斷那些超過伺服器請求上限的額外請求
;harakiri=60
# 代碼修改後自動重新開機
py-autoreload = 1
# 最大緩存
;buffer-size = 32768
processes=2
threads=100
# 主程序
master=True
#設定每個工作程序處理請求的上限,達到上限時,将回收(重新開機)程序,可以預防記憶體洩漏
;max-requests=5000
#pid檔案, 用于腳本啟動,停止
pidfile=uwsgi.pid
daemonize=uwsgi.log
           

#uwsgi --ini uwsgi.ini 啟動項目

# uwsgi --stop uwsgi.pid 關閉項目

本地單程序測試 push回傳 平均120/s , pull調用代理平均120/s >> 測試為負載均衡+随機先進先出。

redis庫内(300個ip,調用400次,後100為固定螞蟻代理。)

排序3683個代理ip,排序需要2.5s ,500個代理ip排序需要 0.2s 。

4000個調用pull,需要時間29s 。平均138/s。

回傳ip , 3683個需要30s , 平均122/s。

總結:回傳和調用ip,單線程 保守均值 100/s 。

​ 排序算法:不穩定因素,越少排的越快。

代理池搭建代理池文檔