# 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 端來取代，以做出有效率的測試。

```Dockerfile
FROM python:3.8
CMD python3 -m SimpleHTTPServer
EXPOSE 8080
```

# Nginx

config file

```python
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

```yaml
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 ，打完再做統計。
