Facebook 웹사이트 속도는 회사에서 가장 중요한 업무 중 하나로 꼽힙니다. 2009년에 우리는 Facebook 웹사이트 속도를 3배로 높이는 데 성공했습니다. 이를 가능하게 하는 것은 우리 엔지니어 팀의 몇 가지 주요 혁신입니다. 이 기사에서는 BigPipe 라고 하는 훌륭한 기본 기술인 비밀 소스 중 하나를 소개하겠습니다.
BigPipe는 새롭게 디자인된 기본 동적 웹 서비스 시스템입니다. 일반적인 아이디어는 웹 페이지를 Pagelet이라는 작은 조각으로 나눈 다음 웹 서버와 브라우저를 통해 파이프라인을 구축하여 다양한 단계에서 실행을 관리하는 것입니다. 이는 대부분의 최신 마이크로프로세서의 파이프라인 실행 프로세스와 유사합니다. 즉, 여러 명령 파이프라인이 서로 다른 프로세서 실행 장치를 통과하여 최적의 성능을 달성합니다. BigPipe는 기존 서비스 네트워크 인프라 프로세스를 재설계한 것이지만, 기존 웹 브라우저나 서버에 대한 변경이 필요하지 않으며, 전적으로 PHP와 JavaScript를 사용하여 구현됩니다.
동기 부여
BigPipe를 더 잘 이해하기 위해서는 기존의 동적 웹 서비스 시스템을 살펴볼 필요가 있습니다. 그 역사는 월드와이드웹(World Wide Web) 초기까지 거슬러 올라갈 수 있지만, 지금은 초기에 비해 크게 변하지 않았습니다. 현대 웹사이트는 10년 전보다 훨씬 더 역동적인 효과와 상호작용성을 갖고 있지만 기존 웹 서비스 시스템은 오랫동안 오늘날의 인터넷 속도 요구 사항을 따라잡지 못했습니다. 기존 모델에서 사용자 요청의 수명 주기는 다음과 같습니다.
많은 시스템의 작동 순서가 서로 겹칠 수 없기 때문에 전통적인 모델은 현대 웹 사이트에서 매우 비효율적입니다. 일부 제한 사항을 극복하기 위해 JavaScript 지연 로딩 및 병렬 다운로드와 같은 일부 최적화 기술이 온라인 커뮤니티에서 널리 채택되었습니다. 그러나 이러한 최적화로는 웹 서버와 브라우저의 실행 순서로 인해 발생하는 병목 현상이 거의 해결되지 않습니다. 웹 서버가 페이지를 생성하는 동안 브라우저는 유휴 상태이므로 아무 작업도 하지 않고 주기를 낭비합니다. 웹 서버가 페이지 생성을 마치고 이를 브라우저로 보내면 브라우저는 성능 병목 현상이 발생하고 웹 서버는 도움을 줄 수 없습니다. 웹 서버의 생성 시간과 브라우저의 렌더링 시간을 겹쳐서 최종 시간 지연을 줄일 수 있을 뿐만 아니라 웹 페이지에서 사용자가 볼 수 있는 영역을 사용자에게 더 일찍 표시할 수 있게 하여 사용자가 지연에 대해 인식하는 것을 크게 줄입니다.
이는 웹 서버의 생성 시간이 브라우저의 렌더링 시간과 겹치는 Facebook과 같이 콘텐츠가 풍부한 사이트에 특히 유용합니다. 일반적인 Facebook 웹 페이지에는 친구 목록, 친구 업데이트, 광고 등 다양한 소스의 데이터가 포함되어 있습니다. 기존 웹 페이지 렌더링 모드에서 사용자는 이러한 쿼리 데이터가 반환되고 최종 파일이 생성되어 사용자의 컴퓨터로 전송될 때까지 기다려야 합니다. 쿼리 지연으로 인해 전체 최종 파일 생성 속도가 느려집니다.
BigPipe 작동 방식
웹 서버와 브라우저 간의 병렬성을 활용하기 위해 BigPipe는 먼저 웹 페이지를 호출 가능한 여러 Pagelet으로 나눕니다. 파이프라인 마이크로프로세서가 명령어의 수명 주기를 여러 단계(예: "명령어 가져오기", "명령어 디코딩", "실행", "레지스터에 다시 쓰기" 등)로 나누는 것처럼 BigPipe의 페이지 생성 프로세스는 다음과 같이 나뉩니다. 다음 단계:
출처: isd