This 10x Engineer built an MVP that scaled to process BILLIONS of events
- 10배 엔지니어가 IP 주소에 위치 데이터를 추가하는 구글 애널리틱스 스타일 월드맵을 만들기 위해 3일 동안의 해커톤 🛠️에 참여한 기사를 작성했다.
- 사용자가 직접 데이터 파이프라인에 연결하여 이벤트 데이터에 액세스하고 수정할 수 있는 Python 코드(앱 또는 플러그인)를 작성할 수 있는 MVP가 구축되었다. 🐍
- 다양한 플러그인이 서로 다른 버전의 의존성을 필요로 하기 때문에 Python 애플리케이션 각각이 독립적인 requirements.txt 파일을 가지고 있던 문제가 발생하여 Celery와 Node.js를 사용하여 애플 플랫폼을 구축하였다. 🐇
- 사용자 정의 JavaScript 코드를 실행하고 네이티브 VM 모듈을 사용하여 백엔드에서 사용자 코드를 별도의 컨텍스트에서 실행함으로써 이를 구현했으나, VM 자체는 보안 장치가 아니므로 안전 관련 우려가 발견되었다. ⚠️
- 잠재적 악의적인 목적을 가진 코드를 실행하는 사용자에게 보안을 제공하기 위해;
isolated-vm
과 vm2
를 고려하였다. 👷
isolated-vm
은 자원 제한을 할당하지만, 표준 JavaScript API에 대한 제한을 가지기 때문에 vm2
가 선택되었다.👷
- PostHog는 사용자 코드가 악성이 아니도록 보장하기 위해 모든 앱을 검열하고, 자체 호스트 사용자에게는 자유로운 코드 사용 권한을 제공하는 기준을 세웠다. 🛡️
- 이벤트 처리를 위한 새로운 솔루션으로
index.ts
와 plugin.json
을 구성하고 kafka
를 사용하여 이벤트를 병렬 처리하여 체계를 한층 더 개선했다. 🚂
- Workload를 효율적으로 관리하기 위해 Piscina를 사용하여 Node.js 작업자의 풀을 생성하고, 각 작업자 작업 스레드는 데이터 저장소와 같은 외부 서비스에 연결할 수 있는 자원을 포함한 자바스크립트 코드를 실행하는 별도의 VM 내에서 작업을 수행한다. 🚀