Study - Apache vs Nginx

박건희·2021년 9월 1일
0

Web Server VS WAS

Web Server

  • 개념적 구분 : sw / hw

    • sw : 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 컴퓨터 프로그램
    • hw : 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 컴퓨터 프로그램
  • 기능

    • HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스 하는 기능을 담당한다.
      • static 자원 제공
      • 클라이언트의 요청을 WAS로 전달, WAS로 부터 응답을 다시 클라이언트에게 전달
      • reverse proxy
      • 로드밸런싱
      • 캐싱
      • 보안

Apache

  • 1995년에 만들어진 HTTP 웹 서버

  • 동작 방식 : MPM(Multi Processing Module)

  • Prefork, Worker, Event(Ver 2.4)

    1) Prefork

    Prefork

  • 자식 프로세스가 싱글 쓰레드로 동작하며 요청당 하나의 프로세스가 처리하는 방식

  • 장점 : 요청별로 프로세스가 fork되고, 프로세스간 메모리가 독립적이므로 한 프로세스의 오류가 다른 프로세스에게 영향을 주지 않음

  • 단점 : 프로세스 fork시 cpu, memory 소비 & process context switching 비용 증가

  • 오래된 소프트웨어와의 호환을 위해 사용..

    2) Worker

    Worker

  • 자식 프로세스가 멀티 쓰레드로 동작하며 각 요청당 하나의 쓰레드가 처리하는 방식

  • 장점 : 쓰레드가 요청을 처리하므로 Prefork 방식보다 자원 사용량이 적음 -> 통신량이 많은 서버에 적절

  • 단점 : 쓰레드간 공유 자원 -> Race Condition

    http-mpm.conf 파일
    <IfModule mpm_worker_module>
      StartServers              10 << 아파치 시작시 기본 프로세스 수
      ServerLimit               128 << 구성 가능한 child 프로세스의 제한 수
      MaxClients                2000 << 최대 동시 접속자 수 ( <= ServerLimit * ThreadPerChild)
      MinSpareThreads           75 << 최소로 유지할 스레드 수
      MaxSpareThreads           250 << 최대로 유지할 스레드 수
      ThreadsPerChild           25 << 하나의 자식프로세스가 가질 수 있는 스레드 수
      MaxRequestsPerChild       0 << 자식 프로세스가 살아있는 동안 요청을 받을 수 (0은 무한대, 메모리누수의 경우 메모리 사용량 제한가능)
    </IfModule>

    MaxClients 수치를 초과하여 온 요청들은 ListenBackLog에 의해 Queueing

    Prefork VS Worker

  • 성능 비교
    prefork

worker

worker가 context switching 부담이 덜 하므로, 요청에 따른 유연한 반응 속도를 보인다.

Nginx

  • 2004년 출시

  • Apache의 10K 문제를 해결하기 위해 등장(많은 동시접속자를 위해 자원할당-메모리 부담)

    • 단일 Thread Event Loop 기법 : Process/Thread의 과도한 생성을 방지하여 Kernel Memory 절약, Context Switching Overhead 등의 성능적 이점
  • 동시성문제 해결

    • 이벤트기반
    • Non blocking (CPU vs I/O bound)
    • 비동기
  • 단점 : 긴 I/O처리가 필요한 작업의 경우 시스템 큐에 요청이 쌓이게되어 성능이 저하 될 수 있음. 복잡한 처리나 대용량 데이터처리가 필요한 서비스 등에서는 적합하지 않을수 있음.


    Blocking 문제!!!!


0개의 댓글