Digg라는 소셜 북마크 서비스가 있다. 현재 2300만명 이상의 가입자를 확보하고 있으며 월 2억 3천만 이상의 페이지뷰가 발생하고 있다.
수억건의 요청(월)을 Digg는 어떤 방식으로 처리하는지 살펴보자.
#Platform
- MySQL
- Linux
- PHP
- Lucene
- Python
- APC PHP Accelerator
- MCahce
- Gearman - job scheduling system
- MogileFS - Open source distribute filesystem
- Apache
- Memcached
Digg는 12개의 웹서버, 12개의 DB서버, 파일 서비스를 위한 약6~10대의 mogileFS서버 그리고 추천 엔진으로 운영하고 있는 6대의 그래프 데이터베이스 서버로 구성되어 있다.
#데이터베이스 - MySQL (4대로 구성)
- master-slave의 replication구조로 구성되어 있다. (write는 master, read는 slave)
- 부하를 낮추기 위해 APC-PHP accelerator를 사용
- 헤비한 트랜젝션은 innoDB 저장 엔진을 이용한다. (필요없으면 MyISAM엔진을 사용)
- MySQL 엔진에 대한 자세한 설명은 http://dev.kthcorp.com/2011/06/17/why-we-need-to-use-innodb-on-mysql-vs-myisam-comparison/ 을 참조
#파일시스템 - MogileFS
- 스토리 아이콘, 사용자 아이콘을 저장하고 제공하는 용도로 활용
- MogileFS는 분산 파일 시스템으로, 라이브저널을 만든 개발자가 Perl을 이용하여 제작하였다. Hadoop처럼 큰 사이즈의 파일을 다루는 것이 아닌, 작은 용량의 파일을 다루는데 적합하게 설계되어 있다. 예전 프로젝트에서 MogileFS를 이용하여 Live Streaming을 구현한 경험이 있는데, 꽤 쓸만했던 기억이 난다.
#Cache - Memcached
- 데이터베이스와 Application단에 고루 분포되어 있다.
- 성능 향상을 위함
Digg로 부터 배울수 있는 점,
- Box(Server)의 대수보다 어떻게 효율적으로 배치하고 구성할지가 관건
- MySQL 엔진을 적절하게 사용
- 트랜젝션이 필요하면 InnoDB, 필요치 않으면 MyISAM
- Digg는 그들의 시스템이 scale-up에 대한 효과보다 scale-out을 했을때 효율적이라 판단했고, 아키텍처링을 통해 시스템을 성장 시켰다.
- 정적 리소스를 Caching
- Digg를 사용하는 사용자들이 서비스가 느리다고 불평했고, 원인은 백엔드가 아닌 java script 문제로 밝혀졌다. (Front-Backend까지의 진단이 필요)
- 성능을 개선하기 위해 다양한 기술(APC PHP accelerator)을 조합하여 사용했다.




