GN⁺: 인스타그램이 오직 3명의 엔지니어로 1400만 사용자를 확보한 방법
(engineercodex.substack.com)- 2010/10 부터 2011/11 까지 약 1년간 0명에서 1400만명 사용자에 도달. 엔지니어는 단 3명
- 3가지 원칙을 따랐음
- 간단하게 유지할 것 (Keep things very simple.)
- 바퀴를 재발명하지 말 것 (Don’t re-invent the wheel.)
- 가능하면 입증된 견고한 기술을 사용할 것 (Use proven, solid technologies when possible.)
사용자 관점에서 간단하게 스택 살펴보기
- 초기 인프라는 AWS EC2에서 Ubuntu Linux
- 인스타그램 앱은 iOS만 먼저 나왔고, Swift 발표 전이라 Objective-C + UIKit 일 가능성이 높음
- 로드 밸런싱을 위해 Amazon의 Elastic Load Balancer와 3개의 NGINX 인스턴스를 사용하
- 백엔드
- 어플리케이션 서버는 파이썬으로 개발되어서 Django 와 WSGI 서버로 Gunicorn
- Fabric 을 이용해서 여러 인스턴스에서 같은 명령을 동시 실행. 이를 통해 코드를 몇 초 안에 배포
- 25대의 고성능 CPU Extra-Large 머신을 구동. 모두 Stateless라서 필요하면 쉽게 더 추가 가능
- 일반 데이터 저장소
- 관련된 포토 ID, 해당 ID의 실제 사진, 사진에 대한 사용자 데이터
- 어플리케이션 서버가 PostgreSQL로 부터 데이터 가져오기
- Django 와 PostgreSQL 간에 pgbouncer로 풀링
- 인스타그램은 시간으로 정렬가능한 ID를 이용함 : 41비트 밀리초 + 13비트 샤드ID + 10비트 자동 증가 시퀀스
- 사진 저장소 : S3와 Cloudfront
- 캐싱: Redis 와 Memcached
- 스마트한 해싱을 통해서 3억개의 키 매핑을 5GB 이하의 공간에 저장
- 그리고 2년후에 페이스북은 Memcached를 스케일해서 초당 수십억건의 요청을 확장한 방법에 대한 논문을 발표
- Postgres와 Redis 모두 Master-Replica 모드로 실행. Amazon EBS 스냅샷으로 계속 백업
- Push Notification 과 Async Task : 노티는 pyapns. Gearman 태스크 큐
- 오류를 실시간으로 모니터링하기 위해 오픈 소스 Django 앱인 Sentry를 사용하였으며, 시스템 전체 메트릭스를 위해 Munin을 사용하였고, 외부 서비스 모니터링을 위해 Pingdom 과 PagerDuty를 사용
인스타그램이 초창기에는 (고집스럽게 아이폰만 지원하던 시절) 팬시한 이미지 필터앱 정도의 느낌이었는데 말이죠. 이렇게 대박이 날줄은 상상도 못했습니다. (저의 상상력이 그정도였어요;;;)
Exit까지 경험한 제품들 비교 중에서 인스타그램이 1인당 엑싯 금액이 상당히 높은 상태였던 것을 본 기억이 있네요. 배울 점이 많다고 생각합니다.
Hacker News 의견
- Instagram이 단 세 명의 엔지니어로 1400만 사용자를 확보하는 방법에 대한 기사
- Instagram이 Objective-C와 UIKit으로 작성되었다고 가정하는 언어에 대한 논쟁
- Instagram의 기술 스택의 단순성을 칭찬하는 일부 댓글, 많은 회사들이 비슷한 접근법으로 이익을 볼 수 있음을 제안
- "적절한 사람들을 선택하면 몇 명만 필요합니다. 그렇지 않으면 모두 필요하게 됩니다."라는 한 댓글에서 강조하는 팀원 선택의 중요성
- Instagram이 수백만 사용자의 피드를 즉시 업데이트하는 방법에 대한 호기심, 분산 시스템에서 읽기를 확장하는 것보다 더 도전적인 작업으로 간주
- Django, Postgres, Redis, 하드웨어 속도의 발전을 고려할 때 Instagram이 현대 기술로 얼마나 확장할 수 있었을지에 대한 추측
- 엔지니어링 팀의 크기에 대한 논의를 촉발하는 기사, 기본 CRUD 앱을 가진 일부 조직이 왜 수천 명의 엔지니어를 필요로 하는지 이해하기 어려워하는 일부 사람들
- Instagram의 자신만의 버전을 만들고 싶다는 욕구를 표현하는 일부 독자들 사이에서 영감의 감각
- Instagram의 초기 날에는 iOS 앱이라는 하나의 프론트엔드만 있었으며, 현대의 소셜 미디어 플랫폼보다 기능이 적었다는 점이 언급
- Instagram의 인프라 위에 Meta의 Threads 앱을 개발하는 최근의 내부자 경험 공유, 앱의 성공과 관련 팀의 크기 강조