Docker-compose + Nginx as Load Balancer
前言
之前測過 Nginx 當 Load Balancer 在某些條件下分配是否均勻,由於並沒有要測試效能,所以直接在本機寫了個 docker-compose 。以下紀錄設定檔案大概怎麼寫。
目標
用一個 docker-compose 和一些 Dockerfile ,組成一個這樣的架構
實作
所以,會需要兩種容器
- Nginx 和 lb.conf
server_i
的 Dockerfile
server_i
這部分我們直接使用 SimpleHTTPServer
作為示範,並沒有用其他統計機制。
事實上這裏可以用更快(例如 go server 、 green event … )的 server 端來取代,以做出有效率的測試。
FROM python:3.8
CMD python3 -m SimpleHTTPServer
EXPOSE 8080
Nginx
config file
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server server1:8080;
server server2:8080;
server server3:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass <http://backend>;
}
}
}
docker-compose
version: '3'
services:
lb:
image: nginx
volumes:
- ./lb/server.conf:/etc/nginx/nginx.conf
ports:
- 8080:80
depends_on:
- server1
- server2
- server3
server1:
build: server/
server2:
build: server/
server3:
build: server/
測試
這裏並沒有把測試 Script 擺上,不過細節說一下,為了可以測的更快速,建議在 Server 端和 Client 端都使用有 async 機制的方式。例如: Python 使用 green event + grequest。
然後用 Logger 紀錄打到的 Request ,打完再做統計。