본문 바로가기

Development/Tip

인스타그램이 오직 3명의 엔지니어로 1400만 사용자를 확보한 방법

원문

https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million

 

How Instagram scaled to 14 million users with only 3 engineers

Instagram's guiding principles and tech stack explained simply

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를 사용

 

자료 출처

https://news.hada.io/topic?id=10916

 

인스타그램이 오직 3명의 엔지니어로 1400만 사용자를 확보한 방법 | GeekNews

2010/10 부터 2011/11 까지 약 1년간 0명에서 1400만명 사용자에 도달. 엔지니어는 단 3명3가지 원칙을 따랐음간단하게 유지할 것 (Keep things very simple.)바퀴를 재발명하지 말 것 (Don’t re-invent the wheel.)가

news.hada.io

생각보다 단순한 스택을 사용하여 서비스를 시작했었군요..