320x100
320x100

Nginx

: 트래픽이 많은 웹 사이트의 웹 애플리케이션 서버 (WAS) 구축을 위한 비동기 이벤트 기반 웹 서버

: 고성능, 확장성, 고가용성 웹 서버, 역방향  프록시 서버 및 웹 가속기 (HTTP 로드밸런서, 콘텐츠 캐시 등 기능 결합)을 제공

 

※ WAS (Web Application Server)

: 웹 서버와 클라이언트 사이에서 동적 처리를 수행한 후 결과를 응답하는 서버

: 웹 서버의 기능과 함께 서버단에서 필요한 작업을 처리하는 서버

- 만들어진 배경

: 아파치 서버의 경우 요청이 들어올때마다 커넥션 생성을 위해 프로세스를 생성하여 다양한 모듈을 빠르게 배포할 수 있게 하였는데, 서버 트래픽량이 많아지는 경우 커넥션을 더 생성할 수 없다는 문제가 발생했었음 (C10K 문제)

: 동시에 수많은 커넥션을 처리하기엔 아파치 서버의 구조는 부적합하였는데, 이를 개선할 수 있는 새로운 구조의 서버로 Nginx가 탄생

 

- Nginx의 구조 (Event Driven Model, 이벤트 기반 구조)

: 마스터 프로세스가 워커 프로세스를 생성하여 요청을 처리하는 구조

: 워커 프로세스는 각자 Listen 소켓을 부여받고 새로운 요청이 들어오면 커넥션을 생성하고 처리

: 커넥션은 정해진 Keep Alive 시간만큼 유지되며, 생성된 커넥션에 아무런 요청이 없으면 제거 되거나 다른 커넥션으로 부터 들어온 요청을 대신 처리

: 커넥션 생성과 제거, 새로운 요청을 처리하는 것을 '이벤트' 라고함

: 이벤트들은 OS 커널에서 큐 형식으로 워커 프로세스에게 전달하며, 큐에 담긴 워커 프로세스가 요청을 처리할때까지 비동기 방식으로 대기

: 만약 큐에 담긴 요청중 하나가 시간이 오래걸리는 경우, 스레드 풀을 만들어 따로 수행하도록 함

: 워커 프로세스는 처리할 요청이 시간이 오래걸릴 것 같으면 스레드 풀에 이벤트를 위임하고 다른 이벤트를 처리

: 워커 프로세스는 보통 CPU 코어 수 만큼 생성되며, 코어가 담당하는 프로세스 횟수를 줄이기 때문에 CPU의 컨텍스트 스위칭을 줄임

 

- 장점

: 프로세스를 적게 만들기 때문에 가벼움

: 개발자가 설정 파일을 변경하고 Nginx에 적용만 하면 마스터 프로세스가 거기에 맞게 워커 프로세스를 새로 생성하기 때문에 설정이 편함

 

- 단점

: 개발자가 모듈을 직접 다루기가 까다로움 

 

- NGINX의 기능

: 웹 서버

: 로드 밸런서

: 프록시 서버

: 웹 서버 가속기

: SSL 터미네이션 (클라이언트와 https 통신 후 서버와 http 통신)

: 캐싱

: HSTS (HTTP Strict Transport Security, 웹 사이트 접속 시 HTTPS로만 접속하게 강제)

: CORS 처리 (Cross-Origin Resource Sharing, 교차 출처 리소스 공유)

: TCP/UDP 커넥션 부하 분산

: HTTP/2 등 지원

 

※ CORS

: 추가 HTTP 헤더를 사용하여 한 출처에서 실행중인 웹 애플리케이션이 다른 출처의 자원에 접근하는 것에 대해 브라우저에서 권한을 부여하도록 제어하는 시스템

: 즉, 다른 다른 A 웹 사이트에서 http 헤더를 조작하여 B 웹 서버로 B 웹 사이트에서 요청이 온 것처럼 패킷을 위장하는 것을 방지

 

 

 

 

 

 

 

HAProxy

:  하드웨어 기반의 L4/L7 스위치를 대체하기 위한 오픈소스 소프트웨어 솔루션

: TCP 및 HTTP 기반 애플리케이션을 위한 고가용성, 로드밸런싱 및 프록시 기능을 제공하는 매우 빠르고 안정적인 무료 역방향 프록시

 

※ 역방향 프록시

: 웹 서버 앞에 위치하여 클라이언트의 요청을 웹 서버에 전달하는 프록시 서버

: 보안, 성능, 안정성을 향상하기 위해 사용

 

※ 정방향 프록시

: 클라이언트 시스템 그룹 앞에 위치하여 클라이언트가 서비스를 요청하면 요청을 가로채고 해당 클라이언트를 대신하여 웹 서버와 통신하는 프록시

 

- L4 로드밸런싱

: 전송 계층에서 로드밸런싱을 수행하는 것으로, 사용자가 로드 밸런서에 접속하고 로드 밸런서는 정의된 웹 서버 중 한 곳으로 접속을 전달

: IP와 Port를 기반으로 트래픽 전달을 수행하며, 보통 라운드로빈 (순차적 처리) 방식으로 처리

 

- L7 로드밸런싱

: 응용 계층에서 로드밸런싱을 수행하는 것으로, 사용자 요청 내용에 따라 다른 백엔드 서버로 요청을 전달

 

 

 

 

 

 

NGINX와 HAProxy의 차이

: 많은 양의 트래픽을 처리하기 위해서는 역방향 프록시가 여러 CPU 코어를 활용하도록 확장할 수 있어야함

: 확장에는 멀티 프로세싱과 멀티 스레딩이 있음

: NGINX와 HAProxy는 모두 멀티 프로세싱을 지원하지만, HAProxy의 경우 프로세스가 메모리를 공유하지 않음

: HAProxy는 멀티 프로세싱의 대안으로 멀티 스레딩을 도입하여 상태 공유 문제를 해결했으나, 성능에서 멀티 프로세스 모드 보다 좋지 않음

 

- 프로세스가 메모리를 공유하지 않아 발생하는 문제

: 구성 매개 변수 (제한, 통계 및 속도 등)를 포함하여 각 프로세스에 대해 별도로 정의해야함

: 성능 지표는 프로세스 별로 수집 되는데, 이를 결합하기 위해서는 추가 구성이 필요

: 각 프로세스는 상태 점검을 개별적으로 처리하기 때문에 대상 서버는 예상대로 서버 별이 아닌 프로세스 별로 probe 됨

: 세션 지속성 사용 불가

: HAProxy Runtime API를 통한 동적 구성 변경은 단일 프로세스에 적용되므로 각 프로세스에 대해 API 호출을 받복해야함

=> 이러한 문제로 HAProxy는 다중 처리 구현의 사용을 권장하지 않음 

 

- 기타사항

: NGINX의 경우 유료 버전인 NGINX Plus를 사용하지 않으면 헬스 체크가 불가능

: HAProxy의 경우 헬스 체크를 지원

 

- 결론

: NGINX 자체의 로드밸런싱 기능도 우수하지만, 웹 서버의 기능이 필요하지 않다면 가벼우면서 헬스 체크를 지원하는 HAProxy를 사용하는게 좋을듯 하다

 

 

 

 

 

 

Refence

 

[데브옵스 개발자 로드맵 2020] WAS (Web Applicatiob Server)의 종류

Web Application Server (WAS, 앱서버) - 웹 서버와 애플리케이션 사이의 동적인 정보를 생성하는 미들웨어 : 웹 서버와 클라이언트 사이를 중계하는 서버 ※ 미들웨어 = 클라이언트와 서버 간의 통신을

2mukee.tistory.com

 

Nginx란?

2022.02.21 게시글 등록 2022.10.03 수정 및 추가 - 오타 수정 - Q&A 추가 - 기존글 수정 및 추가 올해 캡스톤 프로젝트에서 NGINX를 사용하게 됐는데 어떤 것인지 잘 몰라서 공부하기로 했다. 🧐 Nginx란?

ssdragon.tistory.com

 

HSTS(HTTP Strict Transport Security) 기능

HSTS(HTTP Strict Transport Security) HSTS(HTTP Strict Transport Security)는, ...

blog.naver.com

 

CORS란 무엇인가?

처음으로 팀프로젝트에서 미니프로젝트를 진행하면서 CORS라는 것을 알게되었다. 그리고 그것이 무엇인지, 어떻게 사용하는지, 왜 사용하는지, 누가 사용하는지, 언제 사용하는지, 어디서 사용

velog.io

 

 

HAProxy 설치 및 로드밸런싱 설정 - MySQL 로드밸런싱 및 Client HA 구성

 

hoing.io

https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/

 

HAProxy vs NGINX: 클라우드 프록시 성능 비교

HAProxy 와 NGINX는 모두 다중 처리를 지원하지만 중요한 차이점이 있습니다. HAProxy의 구현에서는 프로세스가 메모리를 공유하지 않습니다. 하지만 NGINX는 공유 합니다. 이번 포스트에서는 둘의 성

nginxstore.com

 

[HAProxy] Load Balancer 기능 비교 (Nginx vs HAProxy)

NGINX Nginx 는 대표적인 웹서버인 Apache 의 문제점을 해결하면서 만들어진 웹서버로 비동기 방식...

blog.naver.com

 

300x250
728x90