Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

레커

[WebServer]Nginx - Apach 본문

개발/DevOps

[WebServer]Nginx - Apach

Prism Wrecker 2024. 8. 29. 15:21

Apache

설명

  • Apache는 아파치는 월드와이드 웹 서버용 소프트웨어
  • Apache는 HTTP 아파치 서버라고도 불리고, HTTP 웹 서버
  • 리눅스나 윈도우 등 거의 모든 운영체제에서 사용할 수 있으며 구축이 쉽고 다양한 추가 기능을 가지고 있기 때문에 많이 사용된다.

동작방식

frefork
  • Apache는 새로운 요청이 왔을 떄 Parent Process가 Child Process에 생성 처리
  • Child Process를 미리 준비해두는 방식으로 동작, 미리 준비한 Child Process 다 사용 중이면 그 떄 새로운 프로세스를 생성
  • 하나의 Child Process는 1개의 스레드가 연결, Child Process는 최대 1024개 가능
  • 스레드를 통해 독립적인 메모리 확보가 가능하여 안정적이나 메모리 소비가 많음
  • 위 같은 방식을 통해 처리하기 때문에 아파치 서버는 동적 프로그램 작동 가능하고, 요청과 응답을 하나의 서버에서 처리하기 때문에 개발하기 쉽다는 장점이 있다.
worker
  • 프로세스 당 여러개의 스레드를 연결하여 작동
  • 스레드 간 메모리를 공유, 메로리 사용량이 frefork에 비해 적음

C10K (Connection 10000 Problem)

  • 컴퓨터 보급이 증가하면서 요청이 많아지면서 서버에 커넥션이 증가
  • 그 과정에서 더 이상 커넥션이 형성이 안되는 문제발생하고 이를 C10K (Connection 10000 Problem) 함
초당 요청 처리 수 vs 동시에 연견된 커넥션 수
  • 초당 요청 처리 수
    • 서버가 초당 얼마나 빨리 요청을 처리할 수 있는지 나타냄
  • 동시에 연견된 커넥션 수
    • 요청을 처리하기 위해 서버가 한 시점에 얼마나 많은 클라이언트와 관계를 형성할 수 있는지 나타냄
Connection 지속 되는 이유
  • 3-way handshake를 통해 연결을 하기 때문에 Keep Alive 기간 까지 커넥션을 유지
C10K (Connection 10000 Problem) 원인

Connection 형성을 할 때마다 하나의 프로세스를 할당하다 보니 동시에 커넥션이 증가 하면서, 서버의 메모리가 부족하고 CPU에 부하를 증가( 스위치 컨텍스트 횟수가 증가하여 불필요한 연산도 증가됨 )


Nginx

설명

  • 경량화된 소프트웨어 웹 서버이다
  • Nginx는 웹서버 이외 다영한 역할을 할 수 있다.
  • 예를 들면, 웹 서버이외 리버스 프록시,로드 밸런서, HTTP 캐시, ssl터미네이션, HSTS, CORS 처리,TCP/UDP 커넥션 부하 분산 등
  • 초창기에는 nginx는 아파치와 함께 사용하였지만, 아파치 구조적 한계가 발생되어 nginx를 사용

동작방식

  • master process가 설정파일을 읽고, 설정에 맞게 worker process 생성
  • worker process 만들어 질 떄 각자 지정된 listen socket 을 배정
  • 해당 socket으로 요청이 오게 되면, 커넥션 형성(해당 커넥션은 Keep Alive 시간동안 유지)
  • worker process는 하나의 요청만 처리하지 않고,요청이 없는 경우 새로운 커넥션을 형성 또는 이미 연결된 다른 커넥션으로부터 들어온 요청을 처리
  • Nginx 에서는 요청을 이벤트 처리하여 커널을 통해 큐형식으로 워커 프로세스에 전달
  • 큐에 있는 이벤트는 워크 프로세스가 처리할 떄가지 비동기 방식으로 대기
  • 워커 프로세스는 하나의 스레드로 이벤트를 꺼내서 처리 (워커프로세스가 쉬지 않고 계속 일을 시킬 수 있음
  • 만약 요청 중에 처리 시간이 오래 걸리는 작업(DIsk IO)있다면, Thread Pool (Nginx가 오래걸리는 작업을 하기 위해 만들어놓는다)에 해당 작업을 위임하고 다른 이벤트를 수행

▶ enent-driven model 이벤트기반 구조를 통해 동시에 연견된 커넥션 수 크게 증가할 수 있다.

Nginx는 보통 워커프로세스는 보통 CPU의 코서 수만큼 생성하고 워커프로세스를 통해 담당하는 CPU의 컨텍스트 스위칭 횟수를 줄일 수 있다.

장/단점

장점
  • 동시 커넥션 양 최소 10배 증가(일반적으로 100배~1000배)
  • 동일한 커넥션 수일 때 속도를 2배 향상
  • 프로세스가 적기 때문애 가벼움
  • Nginx 설정을 동적으로 변경이 가능
단점
  • 워커프로세스 종료 시 관리하고 있는 컨넥션과 관련된 요청을 잃어버림
  • 개발자가 모듈을 직접 만들기 어려움
  • 윈도우환경에서 성능을 급감

Nginx 가 많이 사용된 이유

  • 2008년에 스마트 폰 보급!
  • 스마트폰으로 인해 인터넷에 환경이 대격변 패치!
  • 동시 커넥션을 급격하게 증가됨
  • 웹페이지도 콘텐츠가 다양해지고 용량이 커지면서 브라우저도 리소스를 빠르게 가지고 오려고 함( TCP 커넥션을 동시에 형성 증가)

https://www.youtube.com/watch?v=6FAwAXXj5N0  영상을 보게되서 정리하게 되었다.
학교 다닐 때 아파치를 베이스로 작업을 많이 했었는데 구현하기 바빠서 그냥 선배나 검색을 통해 사용만 했던 것 같다. 
대학교 1학년 떄 Nginx라는 것을 들어봤는데 다 사용하는데 이유가 있었구나 싶다.

Nginx 를 직접 구축해봐야겠다.