1. 程式人生 > >ProxyApi-大資料採集用的IP代理池

ProxyApi-大資料採集用的IP代理池

用於大資料採集用的代理池 在資料採集的過程中,最需要的就是一直變化的代理ip。 自建adsl為問題是隻有一個區域的IP。 買的代理存在的問題是不穩定,影響採集效率。 雲vps不允許安裝花生殼等,即使有花生殼,它的解析也不及時,跟不上3分鐘變一次。 本專案的作用是將目前的雲vps,安裝代理軟體,然後使用指令碼每隔3分鐘撥號一次,返回當前可用的ip給代理池,代理池記錄後,提供給API介面給採集程式呼叫。

一共有幾個板塊:代理主機撥號返回ip,代理池接受ip並記錄然後提供給採集程式,統計代理主機的數量、每臺提供的ip數量等,檢查代理ip是否異常並展示到網頁,簡單的認證,網頁執行命令管理雲主機。

專案有個巧妙的地方分享給大家,就是對於後端的採集程式對於api的呼叫的頻率是極高的,每秒可達幾百上千次。因為資料量不大,所以全放記憶體執行,資料庫只是接收到新ip地址後在改變了記憶體裡面的變數的同時寫到資料作為備份,如果程式出錯,啟動的時候先載入資料庫的資料到記憶體。

代理池的程式在ProxyApi.tar中,使用的django框架,當時急用沒有寫註釋,供大家參考。

1、安裝軟體:

我們使用的雲立方的雲vps,每季度打折後200元不到。推薦系統用centos,它自動將adsl的賬號密碼弄好。

yum -y install squid

yum install -y httpd-tools

yum install -y openssl

2、設定代理的賬號和密碼:

touch /etc/squid/squid_passwd

chown squid /etc/squid/squid_passwd

htpasswd /etc/squid/squid_passwd proxy #會提示輸入兩次密碼

3、寫入配置檔案:

/etc/squid/squid.conf

4、設定開機啟動和重啟squid:

systemctl enable squid && systemctl restart squid

5、寫入撥號指令碼:

adsl.py

6、啟動撥號指令碼:

#也可以寫到/etc/rc.d/rc.local,記得把/etc/rc.d/rc.local設定可執行許可權,不然不起作用。

nohup python adsl.py

7、查詢方式,API的介面: 因為公司有幾種語言,使用的代理格式不一樣,所以這裡只返回一個ip地址,代理的埠、使用者名稱、密碼是固定的,採集程式自己寫。

http://ip:port/getip 所有隨機

http://ip:port/getip?ip=雲主機名稱 按雲主機名稱查詢

http://ip:port/getip?addr=重慶移動,重慶電信&tof=f 按地區隨機,addr可以是單值,也可以使多值,多值用小寫的,分割,tof (true or false),不寫預設為t,傳值f表示非

8、管理:

 http://ip:port/checkip ,狀態查詢,可以只看故障的主機(只是時間有底色表示最近三次IP重複,暫時不可用,如果前面ip和時間都有底色,表示雲主機沒有繼續提供新ip了,需要排查。),點選主機名稱可以看單個主機最近提供的ip,和總的提供的ip及不重複的ip。

http://ip:port/shell ,可以在網頁上執行命令,主要是檢視和執行和重啟等,vi什麼的需要互動的命令是用不了的,top的話,記得用top -n 1;進入之前會有一個認證,後臺可以改變密碼,主機加入到代理池,程式會自動把雲主機的名字寫到主機管理裡面,但是管理ip及埠、賬號、密碼需要手動新增,配置後才能網頁執行命令。

主機管理,一頁可以完成增刪改查,沒有做那麼的限制和頁面。可以檢視所有的,也可以分組檢視,方便後期在選擇vps區域的時候參考。

執行命令這裡,講一下,做的還算完善,看註釋,如果選擇了主機的話,就有ip,然後就執行這一個主機,如果只選分組,不選主機就分組內的機器全部執行,然後按順序返回,如果執行多條命令,會分別新增到相應的黑色區域,然後你也可以在主機的下面分別執行命令。部分主機除錯好了,也可以關閉,不會影響其他主機的視窗。如果顯示太多了,還可以清屏。

專案地址:https://github.com/xuyingzhong/ProxyApi