toplogo
Sign In

Pinterest의 6명의 엔지니어로 1,100만 명의 사용자를 확보한 방법


Core Concepts
Pinterest는 단순하고 안정적인 기술을 선택하여 급격한 사용자 증가에 대응했다.
Abstract
Pinterest의 확장 과정은 4단계로 나눌 수 있다: 자신을 찾는 시대: 소규모 엔지니어링 팀이 빠른 프로토타이핑과 진화하는 제품 요구사항을 관리했다. 실험의 시대: 지수적인 사용자 증가로 인해 다양한 기술을 채택했지만, 복잡하고 취약한 시스템이 되었다. 성숙의 시대: MySQL, Memcache, Redis와 같은 성숙하고 확장 가능한 기술에 초점을 맞추며 아키텍처를 단순화했다. 기술 스택을 추가하는 대신 잘 작동하는 것에 투자했다. 수익의 시대: 적절한 아키텍처가 마련되면서 Pinterest는 단순히 수평적으로 확장하여 성장 궤도를 유지할 수 있었다. Pinterest는 안정성, 확장성, 유지보수성이 뛰어난 MySQL, Memcache, Redis, Solr 등의 기술을 핵심 기술로 선택했다. 데이터베이스 클러스터링의 복잡성과 문제점을 겪은 후 데이터 분할(sharding) 방식을 채택했다. 이를 통해 단순하고 관리 가능한 아키텍처를 구축할 수 있었다. Pinterest의 확장 여정은 기술 선택의 중요성, 확장성 우선, 수평적 확장 설계의 가치를 보여준다. 이는 급격한 성장을 겪는 기업들에게 유용한 교훈이 될 것이다.
Stats
Pinterest는 2년 만에 월간 수십억 페이지뷰를 달성했다. Pinterest는 6명의 엔지니어로 1,100만 명의 사용자를 확보했다.
Quotes
"데이터베이스 클러스터링은 하나의 데이터베이스 인스턴스 또는 서버를 여러 개 연결하는 과정이다. 일반적으로 클러스터에는 마스터라고 불리는 단일 데이터베이스 서버가 관리한다." "한 경우에는 새로운 보조 노드를 추가했는데, 약 80%에서 보조 노드가 주 노드라고 말하면서 주 노드가 보조 노드가 되어 데이터의 20%를 잃어버렸다. 전부 잃는 것보다 20%를 잃는 것이 더 나쁘다. 왜냐하면 무엇을 잃었는지 알 수 없기 때문이다."

Deeper Inquiries

Pinterest가 데이터베이스 클러스터링 대신 데이터 분할(sharding)을 선택한 이유는 무엇일까?

Pinterest는 클러스터링을 선택하지 않고 데이터 분할(sharding)을 선택한 이유는 클러스터링을 통해 겪은 문제들 때문이었습니다. 클러스터링을 사용하면 복잡한 상호작용이 발생하여 문제 해결과 유지보수가 어려워졌습니다. 또한, 성숙한 클러스터링 기술이 제한되어 있었기 때문에 경험 많은 엔지니어와 커뮤니티 지원이 부족했습니다. 이에 Pinterest는 더 예측 가능하고 관리하기 쉬운 방법을 제공하는 데이터 분할을 선택했습니다.

데이터 분할(sharding)의 단점을 극복하기 위해 Pinterest가 어떤 전략을 사용했는지 궁금하다.

Pinterest는 데이터 분할(sharding)을 통해 발생하는 문제를 극복하기 위해 몇 가지 전략을 사용했습니다. 첫째로, 방대한 양의 데이터를 샤딩된 인프라로 이전하는 것이 예상보다 훨씬 시간이 많이 걸린 것을 감안하여 견고한 스크립팅 도구와 프로세스가 필요하다는 점을 깨달았습니다. 둘째로, 데이터베이스 수준의 조인과 트랜잭션이 없기 때문에 데이터 일관성과 무결성을 유지하기 위한 로직을 응용 프로그램 레이어 내에서 구현해야 했습니다. 또한, 데이터베이스 스키마를 변경하는 것은 모든 샤드에 변경 사항을 적용해야 했기 때문에 신중한 계획과 실행이 필요했습니다. 마지막으로, 여러 샤드에서 결과를 집계하기 위해 추가 단계가 필요한 보고서 생성 문제를 해결하기 위해 노력했습니다.

Pinterest의 확장 여정에서 배운 교훈을 다른 분야에 어떻게 적용할 수 있을까?

Pinterest의 확장 여정에서 배운 교훈은 다른 분야에도 적용할 수 있습니다. 첫째로, 간단함이 중요하다는 교훈은 다른 시스템 설계 및 운영에서도 중요합니다. 복잡성을 줄이고 예기치 못한 문제의 위험을 줄이기 위해 간단하고 잘 이해되는 기술을 선택하는 것이 중요합니다. 둘째로, 확장성을 우선시하는 교훈은 빠르게 성장하는 환경에서 특히 중요합니다. 데이터베이스의 일부 기능을 희생하더라도 확장성을 우선시하는 것은 성공적인 시스템 설계에 필수적입니다. 마지막으로, 수평적인 성장을 위한 설계를 선택하는 교훈은 사용자 기반이 확장됨에 따라 리소스를 추가할 수 있는 아키텍처를 선택하는 것이 중요합니다. Pinterest의 경험은 고성능 분산 시스템을 구축하고 확장하는 데 유용한 사례 연구로서 다양한 분야에 적용될 수 있습니다.
0
visual_icon
generate_icon
translate_icon
scholar_search_icon
star