nginx

2 개의 포스트

Netflix Live Origin. Xiaomei Liu (새 탭에서 열림)

넷플릭스의 라이브 오리진(Live Origin)은 클라우드 라이브 스트리밍 파이프라인과 자사 콘텐츠 전송 네트워크(CDN)인 오픈 커넥트(Open Connect) 사이에서 콘텐츠 공급을 조율하는 핵심 마이크로서비스입니다. 이 시스템은 다중 파이프라인 구조와 지능적인 세그먼트 선택 로직을 통해 실시간 방송 중 발생할 수 있는 데이터 손실이나 지연을 효과적으로 방지합니다. 결과적으로 넷플릭스는 라이브 환경에서도 VOD 수준의 안정성과 고품질 시청 경험을 전 세계 사용자에게 제공할 수 있게 되었습니다. **다중 파이프라인 기반의 탄력적인 아키텍처** 라이브 스트리밍은 실시간 특성상 프레임 누락이나 세그먼트 손실 같은 결함이 발생할 가능성이 높습니다. 라이브 오리진은 이를 극복하기 위해 다음과 같은 전략을 사용합니다. * **이중화된 파이프라인:** 서로 다른 클라우드 리전에서 독립적으로 운영되는 중복 파이프라인을 운영하여, 한쪽 경로에 결함이 생겨도 다른 경로의 정상 세그먼트를 즉시 선택할 수 있습니다. * **지능적 후보 선택:** 패키저에서 수행된 미디어 검사 메타데이터를 활용하여, 여러 후보 세그먼트 중 가장 품질이 좋은 것을 결정론적 순서에 따라 선택합니다. * **에포크 로킹(Epoch Locking):** 클라우드 인코더 단계부터 적용된 에포크 로킹 기술을 통해 오리진이 여러 파이프라인의 세그먼트 중 최적의 결과물을 일관되게 식별하고 조합할 수 있도록 합니다. **오픈 커넥트와의 스트리밍 최적화** 기존 VOD에 최적화되어 있던 오픈 커넥트(Open Connect) 인프라를 라이브에 맞게 확장하여 효율적인 전송 구조를 구축했습니다. * **요청 병합(Request Collapsing):** 동일한 세그먼트에 대해 수많은 클라이언트 요청이 동시에 몰릴 때, 오리진에는 단 하나의 요청만 보내고 나머지는 응답을 기다리게 하여 서버 부하(Thundering Herd 문제)를 방지합니다. * **세그먼트 템플릿 활용:** 오픈 커넥트 가전(OCA)은 라이브 이벤트 설정 데이터를 기반으로 유효한 세그먼트 범위를 미리 파악하며, 범위를 벗어난 잘못된 요청을 사전에 차단합니다. * **적응형 채우기(Adaptive Fill):** 오리진은 응답 헤더를 통해 OCA에 백업 파이프라인 위치를 알려줍니다. 특정 리전의 오리진에 문제가 발생하면 OCA가 스스로 다른 리전의 오리진으로 전환하여 데이터를 가져옵니다. **효율적인 저장소 관리 및 관찰 가능성** AWS EC2 인스턴스에서 동작하는 라이브 오리진은 대규모 트래픽과 데이터를 관리하기 위해 정교한 리소스 관리 기법을 도입했습니다. * **계층화된 스토리지:** 실시간으로 자주 액세스되는 세그먼트는 RAM에 저장하고, 상대적으로 덜 빈번한 데이터는 SSD에 저장하는 계층 구조를 통해 응답 속도를 극대화했습니다. * **자동 가비지 컬렉션:** 라이브 이벤트의 진행 상황에 맞춰 오래된 세그먼트를 자동으로 삭제하는 시간 기반 가비지 컬렉션을 수행하여 스토리지 공간을 효율적으로 유지합니다. * **실시간 모니터링:** 수천 개의 지표를 실시간으로 수집하여 파이프라인의 건강 상태를 추적하며, 장애 발생 시 즉각적인 대응이 가능한 가시성을 확보하고 있습니다. 라이브 오리진은 단순한 저장소를 넘어 라이브 스트리밍의 안정성을 결정짓는 지능형 브로커 역할을 수행합니다. 실시간 방송의 불확실성을 소프트웨어 계층의 이중화와 지능적 선택 로직으로 해결하고자 하는 기술적 접근은 대규모 라이브 서비스를 설계할 때 중요한 이정표가 됩니다. 특히 클라이언트의 복잡도를 낮추면서 서버 측에서 장애를 복구하는 설계 방식은 사용자 경험을 최우선으로 하는 서비스 기획에 필수적인 요소입니다.

Nginx 설정 통합과 Loki 연동으로 설계한 유연한 멀티사이트 아키텍처 (새 탭에서 열림)

LINE NEXT는 빠르게 확장되는 글로벌 서비스 환경에 대응하기 위해 파편화된 웹 서버 인프라를 중앙 집중형 네이티브 Nginx 멀티사이트 구조로 전환했습니다. 기존의 수동 구성 방식과 Ingress Nginx의 제약을 극복하고자 Ansible 기반의 자동화와 설정 통합을 도입했으며, 이를 통해 서비스 론칭 리드 타임을 80% 이상 단축하고 고급 Nginx 기능을 유연하게 구현할 수 있는 환경을 마련했습니다. **Nginx 인프라 아키텍처의 3단계 진화** * **PMC 기반 초기 구조**: 사내 배포 도구인 PMC와 `rsync`를 이용해 서비스별로 독립된 Nginx 서버와 로드밸런서를 운영했습니다. 하지만 서버 발급부터 설정까지 최대 2주의 시간이 소요되었고, 보안망 내 SSH 포트 개방 리스크와 설정 파편화로 인한 유지보수 어려움이 있었습니다. * **Ingress Nginx 기반 구조**: 쿠버네티스 환경에서 헬름 차트를 통해 도메인과 설정을 추상화하여 배포 속도를 높였습니다. 그러나 로드밸런서 프락시 모드 사용 시 클라이언트의 실제 IP(Remote Address) 확인이 어렵고, GeoIP 등 Nginx 네이티브 모듈 활용에 제약이 발생하는 한계가 있었습니다. * **네이티브 Nginx 멀티사이트 구조(현재)**: Ingress Nginx의 설정 중심 방식과 네이티브 Nginx의 기능적 자유도를 결합한 하이브리드 모델입니다. 별도의 Ansible 배포 서버를 구축하여 공통 설정은 유지하되 서비스별로 유연한 기능을 탑재할 수 있도록 개선했습니다. **효율적인 관리와 확장성을 위한 설정 통합** * **마스터 설정과 서버 블록 분리**: Apache의 구성 방식에서 영감을 얻어 `events` 및 `http` 블록의 공통 설정(timeout, log format 등)을 마스터 설정으로 추출하고, 서비스별 가상 호스트 설정은 `sites-available` 디렉터리 내 개별 파일로 관리합니다. * **멀티사이트 아키텍처**: 단일 Nginx 인스턴스에서 다수의 도메인과 서비스를 동시에 서빙할 수 있도록 구조화하여, 신규 서비스 추가 시 설정 파일만 배포하면 즉시 반영되는 환경을 구축했습니다. * **환경별 독립 관리**: 알파, 베타, RC, 프로덕션 등 각 배포 환경에 맞는 설정을 독립적인 리포지터리 구조로 관리하여 운영 안정성을 높였습니다. **Ansible 기반의 안정적인 배포 자동화** * **자동화 프로세스**: 사용자가 타깃 서버와 환경을 지정하면 Ansible이 최신 설정을 클론하여 배포하며, `Nginx Verify`를 통한 문법 검사와 프로세스 상태 체크를 자동으로 수행합니다. * **롤링 배포(Rolling Deployment)**: 서비스 중단을 방지하기 위해 순차적으로 배포를 진행하며, 특정 단계에서 오류가 발생하면 즉시 배포를 중단하여 서비스 영향을 최소화합니다. * **고급 기능 통합**: GeoIP 모듈을 통한 국가별 트래픽 처리, Loki 연동을 통한 실시간 로그 수집, SSL 인증서 자동화 등 복잡한 요구사항을 공통 템플릿 내에서 손쉽게 관리할 수 있게 되었습니다. 다수의 도메인을 운영하고 빠른 서비스 론칭이 필요한 환경이라면, 클라우드 네이티브의 편의성과 네이티브 소프트웨어의 제어권을 모두 챙길 수 있는 'Ansible+네이티브 Nginx' 조합의 멀티사이트 구조 도입을 적극 권장합니다. 이를 통해 인프라 리드 타임 감소는 물론, 보안과 로그 수집 같은 공통 요구사항을 표준화된 방식으로 해결할 수 있습니다.