您好,登錄后才能下訂單哦!
如果我們用 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 服務共同合作,減輕單個服務的負載,還是比較有用的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。