SlideShare a Scribd company logo
1 of 15
NGINX Architecture
20171625 손건 – SA Homework2
What is NGINX?
Event-Driven
C10K 문제를 해결하기 위해
2004년 Igor Sysoev가
High performance
High Concurrency
Low Memory Usage
세가지에 집중해 만든
웹 서버 데몬
목표 특징 효과
3가지 특징들 덕분에
동시 접속자 수가 많은 경우
요청을 빠른 반응 속도와
효과적으로 처리할 수 있음.
Event-Driven
Asynchronous
Non-Blocking
NGINX Use Case 1
외부에서 들어오는
Request들에 대해서
Gateway의 역할을 해준다.
외부와의 통신은 https로
서버 내부에서는 http로 통신
하는 등 SSL적용도 가능하다.
NGINX Use Case 2
API Gateway의 역할로
각각 path에 맞는 서버로
Redirection 시켜준다.
MSA 구조에서 쓰이는
형태이다.
NGINX Use Case 3
Reverse Proxy로 작동을 해
각 서버에 Load Balancing을
해주는 역할을 한다.
High Level Architecture View
High Level Architecture View
Master-Worker
Model
Module System
Master ­ Worker Model
Master
Process
Worker
Process1
Worker
Process2
Worker
Process2
Master Process
권한이 필요한 작업들을 담당한다.
서버와 관련된 설정들을 읽고
port를 binding한다.
또한 CPU갯수 만큼 Worker Process를
생성하고 Resource들을 관리해준다.
Worker Process
실제 Connection과 관련된 일들을 모두
처리한다. 내부적으로는 단일 쓰레드로 동작
하지만 많은 수의 Connection을 비동기로
처리하는 event-driven run-loop가
동작한다
Compare to Apache
Apache 방식은 Connection 한 개당 프로세스 혹은 쓰레드를
한 개씩 만들어줘야한다. 이런 방식을 1000개의 Connection을 10초간
처리해줘야 할 경우 쓰레드 한 개당 1Mb를 사용하게 할 경우 약 1Gb를
사용하게 된다.
Modern Web 환경에서는 브라우저가 여러개의 Connection을 열고
리소스에 접근해야 하기 때문에 더 많은 Connection에 대해 버틸 수 있는
능력이 필요하다.
Compare to Apache
Apache
Connection 한 개당 프로세스 혹은 쓰레드를 한 개씩
만들어줘야한다.
이런 방식을 통해 1000개의 Connection을 10초간
처리해줘야 할 경우 쓰레드 한 개당 1Mb를 사용하게 할 경우
약 1Gb를 사용하게 된다.
NGINX
CPU갯수에 맞춘 프로세스가 각각 싱글스레드로 여러개의
Connection을 비동기 방식으로처리 하기 때문에
Apache의 방식에 비해 Context Switching의 비용도
적고 메모리도 적게 소모하게 된다
Modern Web 환경에서는 브라우저가 여
러개의 Connection을 열고
많은 리소스에 접근하기 때문에
더 많은 Connection에 대해
버틸 수 있는 능력이 필요하다.
C10K Problem
Dual Core Cpu, 2Gb Ram, 1Gbps Lan
표준 장비에서 어떻게 10K connection을
처리할 것 인가
Master ­ Worker Model
NGINX Modules
- NGINX Core
- NGINX Modules
- Handler
- Protocol
- Event Module
- Filter
Module System을 이용하기 때문에 다양한 기능들을 Core의 변경없이 추가 할 수 있다.
Ex. Protocol 구현 Link
Module System
NGINX Module Working
Core은 TCP Connection과 같은 매우 밑단의
작업을 해준다.
Handler와 Core 사이에는 functional module이
Protocol (HTTP)와 같은 Protocol을 구현 해 주고
Handler는 여러개의 Filter들을 통해
Header, Body를 처리하고 Response를 보내준다.
이때 Filter는 Pipe-Line 구조로 Unix Pipe와
같은 방식으로 도착한다.
Filter Ex. Encryption, Compression
NGINX
기존의 서버 구조와 다른 형태의 Event-driven 형식을 통해 빠른 처리속도를 가지고
Concurrency를 극대화 해서 여러개의 Connection을 처리 할 수 있는것이 매우 인상적
이였다.
또한 Module을 통해 단지 웹서버 뿐만 아니라 동영상 스트리밍 메일 등 다양한 프로토콜
들을 처리할 수 있게 만들 수 있는 확장성 또한 좋다.
NGINX는 Apache에 비해 다양한 이점을 가져서 앞으로도 점점 점유율이 더 높아질 것을
기대해 볼 수 있을 것 같다.
• http://www.aosabook.org/en/nginx.html
• https://velog.io/@jeff0720/2018-11-18-2111-
%EC%9E%91%EC%84%B1%EB%90%A8-iojomvsf0n
• http://www.kegel.com/c10k.html#top
• https://dzone.com/articles/inside-nginx-how-we-designed
• https://d2.naver.com/helloworld/192785
• https://blog.cloudflare.com/open-sourcing-our-nginx-http-2-
spdy-code/
Reference

More Related Content

What's hot

Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Heungsub Lee
 
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드Opennaru, inc.
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교JungWoon Lee
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요Jo Hoon
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선NAVER D2
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulSeungYong Oh
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요Jo Hoon
 
채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례John Kim
 
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)충섭 김
 

What's hot (20)

Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러
 
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
 
Istio presentation jhug
Istio presentation jhugIstio presentation jhug
Istio presentation jhug
 
채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례채팅서버의 부하 분산 사례
채팅서버의 부하 분산 사례
 
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
 

Similar to Nginx Architecture

NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 SuHyun Jeon
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)Brian Hong
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈Amazon Web Services Korea
 
Linux one brief_edm_202002
Linux one brief_edm_202002Linux one brief_edm_202002
Linux one brief_edm_202002jiyoungkim158
 
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitectureHyeonSeok Choi
 
Better Scalable Flexible Soa Platform 0.8.0
Better Scalable Flexible Soa Platform 0.8.0Better Scalable Flexible Soa Platform 0.8.0
Better Scalable Flexible Soa Platform 0.8.0Kidong Lee
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1Yong Heui Cho
 
data platform on kubernetes
data platform on kubernetesdata platform on kubernetes
data platform on kubernetes창언 정
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개Sunghyouk Bae
 
NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823
NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823
NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823Jongsoo Jeong
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개태준 문
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림우림 류
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈ymtech
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 KubernetesTommy Lee
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인VMware Tanzu Korea
 

Similar to Nginx Architecture (20)

NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
 
Linux one brief_edm_202002
Linux one brief_edm_202002Linux one brief_edm_202002
Linux one brief_edm_202002
 
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
 
Better Scalable Flexible Soa Platform 0.8.0
Better Scalable Flexible Soa Platform 0.8.0Better Scalable Flexible Soa Platform 0.8.0
Better Scalable Flexible Soa Platform 0.8.0
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1
 
data platform on kubernetes
data platform on kubernetesdata platform on kubernetes
data platform on kubernetes
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개
 
NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823
NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823
NanoQplus for EFM32 - EnergyMicro Seminar Korea 20120823
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈
 
L4교육자료
L4교육자료L4교육자료
L4교육자료
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
 

More from 건 손

소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어
소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어
소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어건 손
 
Golaksa 개발기 손건
Golaksa 개발기 손건Golaksa 개발기 손건
Golaksa 개발기 손건건 손
 
Understanding for loop
Understanding for loopUnderstanding for loop
Understanding for loop건 손
 
콕콕 발표자료
콕콕 발표자료콕콕 발표자료
콕콕 발표자료건 손
 
Item27 familiarize yourself with alternatives to overloading on universal ref...
Item27 familiarize yourself with alternatives to overloading on universal ref...Item27 familiarize yourself with alternatives to overloading on universal ref...
Item27 familiarize yourself with alternatives to overloading on universal ref...건 손
 
Item22 when using the pimpl idiom, define special memberfuctions in the imple...
Item22 when using the pimpl idiom, define special memberfuctions in the imple...Item22 when using the pimpl idiom, define special memberfuctions in the imple...
Item22 when using the pimpl idiom, define special memberfuctions in the imple...건 손
 
Modern Effective C++ Item2 Understanding Auto type deducing
Modern Effective C++ Item2 Understanding Auto type deducingModern Effective C++ Item2 Understanding Auto type deducing
Modern Effective C++ Item2 Understanding Auto type deducing건 손
 

More from 건 손 (8)

dbt 101
dbt 101dbt 101
dbt 101
 
소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어
소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어
소프트웨어에 물들다 - 소프트웨어를 만드는 프로그래밍 언어
 
Golaksa 개발기 손건
Golaksa 개발기 손건Golaksa 개발기 손건
Golaksa 개발기 손건
 
Understanding for loop
Understanding for loopUnderstanding for loop
Understanding for loop
 
콕콕 발표자료
콕콕 발표자료콕콕 발표자료
콕콕 발표자료
 
Item27 familiarize yourself with alternatives to overloading on universal ref...
Item27 familiarize yourself with alternatives to overloading on universal ref...Item27 familiarize yourself with alternatives to overloading on universal ref...
Item27 familiarize yourself with alternatives to overloading on universal ref...
 
Item22 when using the pimpl idiom, define special memberfuctions in the imple...
Item22 when using the pimpl idiom, define special memberfuctions in the imple...Item22 when using the pimpl idiom, define special memberfuctions in the imple...
Item22 when using the pimpl idiom, define special memberfuctions in the imple...
 
Modern Effective C++ Item2 Understanding Auto type deducing
Modern Effective C++ Item2 Understanding Auto type deducingModern Effective C++ Item2 Understanding Auto type deducing
Modern Effective C++ Item2 Understanding Auto type deducing
 

Nginx Architecture

  • 2. What is NGINX? Event-Driven C10K 문제를 해결하기 위해 2004년 Igor Sysoev가 High performance High Concurrency Low Memory Usage 세가지에 집중해 만든 웹 서버 데몬 목표 특징 효과 3가지 특징들 덕분에 동시 접속자 수가 많은 경우 요청을 빠른 반응 속도와 효과적으로 처리할 수 있음. Event-Driven Asynchronous Non-Blocking
  • 3. NGINX Use Case 1 외부에서 들어오는 Request들에 대해서 Gateway의 역할을 해준다. 외부와의 통신은 https로 서버 내부에서는 http로 통신 하는 등 SSL적용도 가능하다.
  • 4. NGINX Use Case 2 API Gateway의 역할로 각각 path에 맞는 서버로 Redirection 시켜준다. MSA 구조에서 쓰이는 형태이다.
  • 5. NGINX Use Case 3 Reverse Proxy로 작동을 해 각 서버에 Load Balancing을 해주는 역할을 한다.
  • 7. High Level Architecture View Master-Worker Model Module System
  • 8. Master ­ Worker Model Master Process Worker Process1 Worker Process2 Worker Process2 Master Process 권한이 필요한 작업들을 담당한다. 서버와 관련된 설정들을 읽고 port를 binding한다. 또한 CPU갯수 만큼 Worker Process를 생성하고 Resource들을 관리해준다. Worker Process 실제 Connection과 관련된 일들을 모두 처리한다. 내부적으로는 단일 쓰레드로 동작 하지만 많은 수의 Connection을 비동기로 처리하는 event-driven run-loop가 동작한다
  • 9. Compare to Apache Apache 방식은 Connection 한 개당 프로세스 혹은 쓰레드를 한 개씩 만들어줘야한다. 이런 방식을 1000개의 Connection을 10초간 처리해줘야 할 경우 쓰레드 한 개당 1Mb를 사용하게 할 경우 약 1Gb를 사용하게 된다. Modern Web 환경에서는 브라우저가 여러개의 Connection을 열고 리소스에 접근해야 하기 때문에 더 많은 Connection에 대해 버틸 수 있는 능력이 필요하다.
  • 10. Compare to Apache Apache Connection 한 개당 프로세스 혹은 쓰레드를 한 개씩 만들어줘야한다. 이런 방식을 통해 1000개의 Connection을 10초간 처리해줘야 할 경우 쓰레드 한 개당 1Mb를 사용하게 할 경우 약 1Gb를 사용하게 된다. NGINX CPU갯수에 맞춘 프로세스가 각각 싱글스레드로 여러개의 Connection을 비동기 방식으로처리 하기 때문에 Apache의 방식에 비해 Context Switching의 비용도 적고 메모리도 적게 소모하게 된다 Modern Web 환경에서는 브라우저가 여 러개의 Connection을 열고 많은 리소스에 접근하기 때문에 더 많은 Connection에 대해 버틸 수 있는 능력이 필요하다. C10K Problem Dual Core Cpu, 2Gb Ram, 1Gbps Lan 표준 장비에서 어떻게 10K connection을 처리할 것 인가
  • 12. NGINX Modules - NGINX Core - NGINX Modules - Handler - Protocol - Event Module - Filter Module System을 이용하기 때문에 다양한 기능들을 Core의 변경없이 추가 할 수 있다. Ex. Protocol 구현 Link Module System
  • 13. NGINX Module Working Core은 TCP Connection과 같은 매우 밑단의 작업을 해준다. Handler와 Core 사이에는 functional module이 Protocol (HTTP)와 같은 Protocol을 구현 해 주고 Handler는 여러개의 Filter들을 통해 Header, Body를 처리하고 Response를 보내준다. 이때 Filter는 Pipe-Line 구조로 Unix Pipe와 같은 방식으로 도착한다. Filter Ex. Encryption, Compression
  • 14. NGINX 기존의 서버 구조와 다른 형태의 Event-driven 형식을 통해 빠른 처리속도를 가지고 Concurrency를 극대화 해서 여러개의 Connection을 처리 할 수 있는것이 매우 인상적 이였다. 또한 Module을 통해 단지 웹서버 뿐만 아니라 동영상 스트리밍 메일 등 다양한 프로토콜 들을 처리할 수 있게 만들 수 있는 확장성 또한 좋다. NGINX는 Apache에 비해 다양한 이점을 가져서 앞으로도 점점 점유율이 더 높아질 것을 기대해 볼 수 있을 것 같다.
  • 15. • http://www.aosabook.org/en/nginx.html • https://velog.io/@jeff0720/2018-11-18-2111- %EC%9E%91%EC%84%B1%EB%90%A8-iojomvsf0n • http://www.kegel.com/c10k.html#top • https://dzone.com/articles/inside-nginx-how-we-designed • https://d2.naver.com/helloworld/192785 • https://blog.cloudflare.com/open-sourcing-our-nginx-http-2- spdy-code/ Reference