원문
https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million
- 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
생각보다 단순한 스택을 사용하여 서비스를 시작했었군요..
'Development > Tip' 카테고리의 다른 글
JetBrains가 조사한 2023년 개발자 에코시스템 현황 (0) | 2023.11.23 |
---|---|
[Tip] mac에서 마우스를 트랙패드 처럼 사용하기! Mac Mouse Fix (0) | 2023.09.24 |
무엇이 개발자를 생산적으로 만드는가 (0) | 2023.09.14 |
[Docker]docker, docker swarm, docker compose 간단 정리 (0) | 2023.06.21 |
[특강] 기술 전환점에서의 오픈소스와 개발자 - 래블업 신정규 대표님 (0) | 2023.05.16 |