채팅방에서 hate speech를 탐지하는 봇을 만들어야 햔다.
flask로 nlp를 수행하는 실시간 서비스를 만들어야 했다.
우리의 목표는 정확히 기억이 안나는데
초당 엄청 많은 요청을 수행 해야 했다.
python은 cpu 바운드에서 싱글스레드로 작동한다.
대충 GIL을 보면 안다.
그래서!
프로세스를 늘리고 비슷한 요청이 오면 캐시에 저장된 값을 줄 예정이다.
구현은 다음과 같이 할 계획이다.
아무튼 핵심은 컨테이너를 여러개 띄울 예정이다.
구현은 어찌어찌 됐는데 문제는 배포였다.
그래서 사용한게 docker-compose다
docker-compose를 사용하면
여러 컨테이너 간의 종속성과 구성을 정의하고, 한 번에 시작하고 정지할 수 있다.
시작해보자
vi docker-compose.yml
version: '3'
api: # 서비스 이름
container_name: flask-container
build: . # Dockerfile 일때
entrypoint: gunicorn --timeout=30000 -w 3 --bind 0.0.0.0:5000 "app:create_app()"
env_file:
- .env
ports: # 포트설정
- '5000:5000'
memcached:
image: memcached:latest # docker image일때
container_name: memcached-container
entrypoint:
- memcached
- -m 64
ports:
- "11211:11211"
expose: # 컨테이너간 통신 포트
- "11211"
depends_on: # 서비스 실행 순서
- api
nginx:
image: nginx:latest
container_name: nginx-container
ports:
- "80:8080"
volumes:
- ./nginx:/etc/nginx/conf.d
depends_on:
- api
version: '3'
services:
api: # 서비스 이름
container_name: flask-container
build: . # Dockerfile 일때
entrypoint: gunicorn --timeout=30000 -w 3 --bind 0.0.0.0:5000 "app:create_app()"
env_file:
- .env
ports: # 포트설정
- '5000:5000'
memcached:
image: memcached:latest # docker image일때
container_name: memcached-container
entrypoint:
- memcached
- -m 64
ports:
- "11211:11211"
expose: # 컨테이너간 통신 포트
- "11211"
depends_on: # 서비스 실행 순서
- api
nginx:
image: nginx:latest
container_name: nginx-container
ports:
- "80:8080"
volumes:
- ./nginx:/etc/nginx/conf.d
depends_on:
- api