Skip to content

기능 정의

Laura edited this page Feb 7, 2022 · 9 revisions

master

  • 설정 파일을 읽을수 있다.

  • thread pool과 event queue를 생성 할 수 있다.

  • woker, cache loader, cache manager를 생성할 수 있다.

  • config

    • 컨피그 파일은 표준규격 사용
    • nginx에 등록할 수 있는 server name 개수
    • worker 개수
    • access/error 로그 경로

worker

  • 공통으로 사용하는 multiplexing IO system call (함수 ex select epoll ..)에 자신을 등록 할 수 있다.

  • 각 요청을 async하게 처리할 수 있다.

  • file read/write인 작업에 관련된 요청인 경우 thread pool에게 위힘 할 수 있다.(evnet queue)

    • 위임 후 처리 과정(?)
  • sendfile 및 TCP_CORK를 지원 할 수 있다.

  • Loadbalance

    • 알고리즘에 따른 행동 전략
  • config

    • sendfile 이용 유무 및 TCP_CORK 설정 유무 flag
    • kqueue|epoll|poll|select|/dev/poll
    • worker가 이용할 수 있는 최대 file descriptor와 connection 개수 (default 1024)

thread pool

  • queue에서 event를 가져 올 수 있다.
  • 완료된 작업에 대한 메시지를 보낼 수 있다(main loop?)

Cache Process

  • Nginx Cache Process 는 Cache Loader와 Cache Manager 라는 두 개의 Process로 구성된다.
  • 두 개의 Cache Process는 Master Process에 의해 실행된다.
  • Config에 Path 설정이 있을 경우에만 실행된다.
  • Cache의 Key와 Meta 정보를 공유 메모리(Shared Memory) 영역에 로드한다.
  • Cache의 Data는 File에 저장된다.

Cache Loader

  • NGINX가 시작된 후 Master Process 에 의해 한 번만 실행된다.
  • File로 저장된 Cache의 Data를 바탕으로 공유 메모리(Shared Memory) 영역에 Cache된 Key와 Meta를 설정하는 역할을 수행한다.
  • 모든 캐시 정보가 한 번에 로드되면 많은 리소스를 소모하기 때문에 NGINX가 느려진다. 이를 방지하기 위해 아래 config를 사용할 수 있다.
    • loader_threshold: 각 로드 실행 시간 지정
    • loader_files: 매번 로드되는 최대 파일 수
    • loader_sleeps: 각 로드의 지연 시간

Cache Manager

  • 주기적으로 실행되어 캐시 파일 저장소의 상태를 확인한다.
  • Cache Size 및 Expiration 을 관리한다.
    • TTL 적용
    • LRU(Least Recently Used) 알고리즘에 의해 가장 나중에 이용된 Cache의 Data부터 삭제
  • 요청에 의해 Cache Data를 찾을 수 있다.
    • 데이터가 없는 경우 Cache Miss 를 보낸다.