본문 바로가기

Dev Story/아키텍처

성능 개선에 성공한 Master-Slave Model (feat. Nginx,Docker)

파이썬 웹앱을 클라우드에 올리기 위해 Nginx, Docker 개념을 공부하다가 유사하다고 느껴졌는데

둘다 Master-Slave Model 형태를 띄는 것 같다.

 

ㅇ 마스터(Master), 주국(Primary)

     - 하나의 일을 수행하는데에 있어 동작의 주체가 되는 역할을 하는 것

        . 모든 다른 슬레이브(종국)들을 제어하고 명령하는 주체

 

  ㅇ 슬레이브(Slave), 종국(Secondary)

     - 종속적인 역할을 하는 것

        . 주로 마스터의 지시에 따라 행동

 

# Nginx

Nginx는 C10K (10,000 이상 요청에 대한 커넥션 생성이 되지 않아 성능이슈 가 발생 하는 것)  문제를 해결 하기 위해

개발 되었는데 이 문제를 Event-Driven-Model 로 성능 이슈를 해결 하였다.

 

이벤트 기반의 모델로 불려진 이유를 알아보자면 클라이언트 요청이 왔을때 처리되는 내부 구조를 보면 알수 있다.

메인 프로세스가 하나 에 그 하위에 워커 프로세스가 존재 한다.

 

메인 프로세스는 설정된 수 만큼 워커 프로세스 인스턴스 생성을 담당 하는 역할이고

 

생성된 워커 프로세스 는 각각 리슨 객체를 소유 하고 있어 클라이언트 요청 처리에 대해 서로간 이벤트 형식으로

작동 할 수 있는 계기가 되는데

 

워커 프로세스들은 단순히 커넥션 만 맺고 처리 하는게 아니라 형성된 커넥션에 아무런 요청이 없으면 새로운

커넥션을 형성하거나 이미 만들어진 다른 커넥션으로부터 들어온 요청을 처리한다.

 

이렇게 생성된 프로세스 들끼리 유기적으로 상태를 주고 받으면서 처리 한다고 해서 "이벤트 드리븐 모델" 이라고 불린다.

 

전체를 관리하는 마스터와 그 하위에 작업을 직접 처리 하는 슬레이브 Master-Slave Model 과 유사해 보인다.

 

 

#Docker

 

Docker (컨테이너) 는 앞전에 VM(가상화) 기술을 경량화 하여 효율을 높인 컨테이너 기반의 가상화 기술이다.아래 그림처럼 컨테이너는 하나의 Guest OS에 앱이 증가 되는 구조인 (* 즉 하나의 OS를 각 앱들은 공유 한다) 반면에 VM은 앱이 증가 할때 마다 Guest OS가 늘어나는 구조로 그만큼 리소스를 차지 한다.

 

 

항구에 있는 컨테이너 처럼 그 안에 소프트웨어 실행에 필요한 (라이브러리, 시스템도구, 코드, 런타임등) 필요한 모든것을 패키징 하여 담아 둔 것을 말하며 그로 인해 배포 하기도 쉽고 환경에 의한 오류를 방지 할 수 있다.

 

Docker Engine 은 컨테이너를 구동 하기 위한 이미지 빌드 및 실행에 필요한 핵심 소프트웨어이다.필자는 이 구조는 마치 Guest OS+Docker Engine 이 마스터 역할을 하고 그 하위에 App1, App2, App3 가 슬레이브 역할을 하는 모습으로 보인다.

 

# 결론

이번 블로그를 하면서 느꼇던 점은 두가지 인데 

1. 여러가지 내용을 넣기 위해 이것저것 넣다 보니 말의 두서가 없어지고 전달하고자 하는 전달력이 떨어져

그 부분을 삭제 하고 나니 글 은 단순해졌고 명확해졌다.

 

2. 한가지 기술을 정확히 알기 위해선 CS(컴퓨터사이언스) 지식, 공식문서, 실제로 구현된 코드 이 세가지를

알아야 MTO 에 대한 M(Mechanism)에 대해 자세히 알 수 있겠다.

 

* MTO 는 필자가 정의한 용어이다 개발자 실력에 도움이 될만한 3가지 요소로 뽑은 Mechanism, Test, Optimizer 약자이다.

 

# 출처

https://ssdragon.tistory.com/60

 

Nginx란?

올해 캡스톤 프로젝트에서 NGINX를 사용하게 됐는데 어떤 것인지 잘 몰라서 공부하기로 했다. 🧐 Nginx란? 트래픽이 많은 웹사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반구조의 웹 서버 프로

ssdragon.tistory.com

 

https://livlikwav.github.io/study/NGINX-inside/

 

NGINX 내부 구조 이해하기: 동시 연결 수와 이벤트 주도 설계

Apache와 NGINX의 차이, concurrent connections를 위한 event-driven architecture와 non-blocking I/O

livlikwav.github.io

 

https://velog.io/@kdaeyeop/도커-Docker-와-VM의-차이

 

도커 : Docker 와 VM의 차이

도커가 있기 이전부터 가상화 기술은 존재했었다. 당연히 도커는 기존의 가상화 기술을 기반으로 만들어졌다. 기존의 가상화 기술을 알아보고 도커와 비교해 본다면 도커를 조금 더 이해할 수

velog.io

 

https://aws.amazon.com/ko/docker/

 

Docker란 무엇입니까? | AWS

Q: Docker로 어떤 작업을 할 수 있습니까? Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. 이는 Doc

aws.amazon.com