TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 24 READS

네트리파이, 엣지 함수를 파이어크래커 마이크로VM으로 재구축…중앙값 5배 빨라진 이유

네트리파이, 엣지 함수를 파이어크래커 마이크로VM으로 재구축…중앙값 5배 빨라진 이유
SOURCE IMAGE · HACKER NEWS

네트리파이(Netlify)가 자사 엣지 함수(Edge Functions) 실행 인프라를 밑바닥부터 다시 만들었다. 핵심은 요청을 외부 실행 서비스로 내보내던 기존 방식을 걷어내고, 자체 엣지 네트워크 안에서 파이어크래커(Firecracker) 마이크로VM 위에 함수를 직접 돌리도록 바꾼 것이다. 회사 측 설명에 따르면 이 전환으로 중앙값 기준 약 5배 빠른 응답을 확보했고, 개발자가 코드를 작성하고 배포하는 방식은 전혀 바뀌지 않았다. URL 임포트, npm 패키지, Node 내장 모듈, netlify.toml 선언, 로컬 개발 환경 모두 이전과 동일하게 동작한다.

엣지 함수는 사이트 앞단에서 매 요청마다 실행되는 코드다. 여기서 소비되는 시간은 곧 최종 사용자가 기다리는 시간이므로, 다른 어떤 계층보다 밀리초 단위가 민감하다. 네트리파이는 하루에 약 10억 건의 엣지 함수를 처리한다고 밝혔다. 순웹(Sunweb)의 페이지 개인화, 로토-퀘벡(Loto-Québec)의 쿠키 검사 기반 트래픽 라우팅을 비롯해 수십만 개 사이트가 개인화, 라우팅, 인증 등에 이 기능을 쓴다. 초당 수만에서 수십만 건을 처리하면서 요청 라우팅, 컴퓨트 할당, 플랫폼 코드와 고객 코드 부팅을 모두 밀리초 안에 끝내야 하는 것이 기술적 과제였다.

요청이 지나가는 경로

모든 요청은 클라이언트에 가장 가까운 엣지 노드에 도착한다. 엣지 노드는 TLS 연결을 종료하고 요청 경로를 해당 배포의 엣지 함수 라우트와 대조한다. 일치하는 라우트가 없으면 요청은 평소처럼 캐시와 오리진으로 흘러간다. 일치하면, 과거에는 이 지점에서 요청이 네트리파이 네트워크를 벗어나 인터넷을 거쳐 함수를 실행한 뒤 되돌아왔다. 새 구조에서는 네트워크 내부의 컴퓨트 노드로 그대로 전달된다.

요청이 이동하기 전, 엣지 노드는 함수를 실행할 머신 사양(spec)을 기록한다. 이 사양에는 런타임, 플랫폼 이미지, 엣지 함수 이미지라는 세 가지 이미지가 명시되고 CPU·메모리·연결 수 제한이 설정된다. 사양의 해시와 사이트별 정보를 조합해 서비스 ID를 만드는데, 이것이 격리의 출발점이다. 코드나 환경 변수가 다른 두 배포는 서로 다른 서비스가 되어 결코 같은 마이크로VM을 공유하지 않는다. 컴퓨트 노드는 해당 ID의 서비스가 이미 있으면 요청을 그 안의 마이크로VM으로 넘기고, 없으면 새로 만들면서 필요한 이미지가 디스크에 없을 경우 엣지 노드에서 가져온다. 덕분에 그 지역에서 실제 트래픽을 받는 함수 이미지만 내려받게 된다.

캐시 적중과 핫스팟 사이의 균형

각 지역에는 컴퓨트 노드 그룹이 있고, 엣지 노드는 랑데부 해싱(rendezvous hashing)으로 서비스마다 노드를 고른다. 같은 서비스는 항상 같은 노드로 향하므로 마이크로VM이 따뜻하게(warm) 유지되고 코드가 디스크와 캐시에 남는다. 다만 이 고정성(stickiness)은 양날의 검이다. 한 서비스가 지역 트래픽의 큰 비중을 특정 노드에 고정시키면 그 노드가 포화되어 같은 노드에 배정된 다른 서비스의 자원을 잠식한다. 네트리파이는 일정 임계치를 넘으면 고정성을 완화해 서비스를 여러 노드에 분산시키는 방식으로, 단일 고객의 급격한 트래픽 급증을 흡수한다.

실제 실행은 함수마다 별도의 파이어크래커 마이크로VM에서 이뤄진다. 이 VM은 1밀리초 안에 생성되고 p99 기준 약 2밀리초에 시작한다. 완전한 운영체제가 아니라 최소화된 리눅스 환경을 띄우기 때문이다. 함수 파일은 압축하지 않은 EROFS 이미지로 마운트해 메모리 매핑하므로, 번들 전체를 적재하지 않고 실제로 쓰는 부분만 읽는다. 자바스크립트 서버가 포트를 열기 시작하면 그 시점의 스냅샷을 찍어두고, 호출이 없을 때는 유휴 상태로 두는 대신 0으로 축소(scale to zero)한다. 다음 호출 때는 스냅샷에서 새 VM을 복원하는데, 이 역시 메모리 매핑이라 전체를 다 읽기 전에 실행을 시작할 수 있다. 부팅·스냅샷·복원·축소로 이어지는 VM 생애주기는 유니크래프트(Unikraft)의 제품이 담당했고, 네트리파이는 마이그레이션 내내 이들과 협업해 자사 트래픽 규모에서 견디는지 검증했다.

실무자가 눈여겨볼 지점과 한계

따뜻한 인스턴스에서 이 전체 경로가 더하는 시간은 약 6밀리초이며, 어떤 단계도 네트워크를 벗어나지 않는다. 콜드 호출은 전체의 약 1.2%에서 발생하고 평균 약 9밀리초가 걸린다. 어떤 컴퓨트 노드도 본 적 없는 지역에 요청이 처음 들어올 때 관련 이미지를 먼저 가져와야 하기 때문이다. 눈여겨볼 대목은 격리 모델이다. 잠재적으로 침해된 배포가 별도 마이크로VM에서 돌기 때문에, 설령 런타임을 탈출하더라도 다른 고객이나 컴퓨트 계층 자체를 오염시킬 수 없다. 네트리파이는 이름과 달리 V8 아이솔레이트(isolate)는 이 수준의 격리를 제공하지 못한다고 못박았는데, 서버리스 실행 환경의 보안 경계를 고민하는 팀이라면 참고할 만한 판단이다.

운영 관점의 교훈도 공유됐다. 가상 스위치의 포트 고갈, 그리고 DNS 문제까지 겪었고, 이에 대응해 컴퓨트 노드마다 로컬 DNS 리졸버를 두고 부팅 시간·첫 포트 개방까지의 시간·사용자 코드 시작 시간 같은 지표를 확대 수집했으며, 노드를 신속히 우회·폐기하는 서킷 브레이커를 여럿 넣었다. 배포 안정성 측면에서는 새 플릿(fleet)을 기존 것과 나란히 띄워 상태가 건강해진 뒤에야 트래픽을 넘기는 방식으로 빠른 롤백 여지를 확보했다. 다만 이 발표는 자체 벤치마크에 기반한 회사 측 수치이며, '5배'라는 개선폭이 모든 지역·워크로드에서 동일하게 재현된다는 보장은 없다는 점은 감안할 필요가 있다. 그럼에도 실행 인프라를 외부 서비스에서 자체 네트워크로 끌어온 이번 변화는, 추가 비용이나 마이그레이션 없이 이미 프로덕션 트래픽에 적용됐다는 점에서 엣지 컴퓨트의 통제권을 플랫폼이 직접 쥐는 방향의 사례로 읽힌다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://www.netlify.com/blog/edge-functions-firecracker-micr...
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...