오라클 사가 9.21~23에 주최한 이벤트에서 발표된 자료

 

 

Facebook은 기본적으로 그래프이다.

그래프에는 Vertices과 Edge가 있다.

빅데이터라고 부르는 분야에서 나온 Hadoop나 데이터웨어하우스의 대부분은 배치 처리로 데이터가 분석된다.

그러나 Facebook의 MySQL 데이터는 리얼타임으로 접근하고 있다. Facebook 페이지 상에서 친구 리스트를 참조하는 것은 MySQL에서 나온 것일 수 있다.

 

피크 시의 최대 처리 속도. 대부분이 사진이나 댓글 이라는 유저에 의해 생성된 데이터이며, 이것들이 MySQL에서 처리된다. 이 처리에는 추가, 업데이트, 삭제도 있다.

 

유저들의 요청 양

 

캐시 후의 데이터 읽기만으로 이 정도의 수가 유저에게 전달 된다.

 

 

마스터와 슬레이브로 크게 2개로 나누어지며, 이 2개는 지리적으로 떨어져 있다.

각각의 리젼에는 복수의 Front End Cluster와 Back End Cluster가 있다.

Front End Cluster에는 웹서버가 있고, HPHP가 동작하고 있다. 클라스터마다 캐시도 준비 되어 있다.

Back End Cluster에는 MySQL 데이터 베이스가 있고 캐시도 있다. 마스터 리젼과 슬레이브 리젼 사이에는 MySQL 레플리케이션이 돌아가고 있다.

 

 

Facebook 독자적인 PHP

HPHP는 Facebook이 만든 것으로 성능 향상을 위해서이다. HPHP에는 2개의 버전이 있으며 하나는 컴파일 버전으로 PHP를 C++로 변환하여 그것을 바이너리로 컴파일 하여 실행 시 처리가 가볍게 된다.

또 하나는 JavaVM과 같은 PHP를 바이트 코드로 변환하여 VM 상에서 실행하는 것. 이것도 CPU 처리 부하를 가볍게 해준다.

 

 

캐시에는 Memcache를 사용

Front End Cluster에는 Cluster Cache가 있으며 여기에는 아주 뜨거운 최신 데이터가 들어가 있다. 예를 들면 (미국 아이돌)져스틴 비버가 사진을 투고하면 아주 많은 주목을 받을 것을 알고 있으므로 이 데이터는 각각의 클래스터의 Cluster Cache에 들어가고 각각의 클래스터는 여기에 접근한다.

Cluster Cache는 부하를 분산하는 것이 역할이기 때문에 Web 서버에 가까이 있는 것이 중요하다.

Region Cache는 데이터 베이스로의 접근을 회피하여 고속화 하기 위한 캐시이다.

TAO는 우리들이 개발한 것으로 기본적으로는 Memcache를 베이스로 한 자작 그래프 서버이다. Facebook의 그래프 모델을 이해하고 있다.

Wormhole에는 Pub/Sub 시스템으로 MySQL이 로그를 여기에 쓰면 이 내용을 다른 디스트리뷰로 간다.

 

 

MySQL 운용 자동화 툴을 이용

수천 수만대의 MySQL을 관리하고 있기 때문에 툴인 MySQL Pool Scanner를 만들었다.

이것은 자동화 시스템으로 새 서버가 배치되면 OS 등 이미지를 넣어서 MySQL을 설치하고, 필요한 데이터를 서버에 복사해서 실전에 투입한다. 실전 가동 중에는 모니터링을 하고, 부서지면 수리하여 다시 이미지를 넣어서 고친다.

 

 

스토리지 활용을 위한 압축이 중요

Flash/Flachcache 2 종류의 스토리지를 사용하고 있다.

Facebook에서는 고속 스토리지로 100% SSD를 사용한 시스템을 채용하고 있다.

그러나 비용이 비싸기 때문에 SSD와 거대 용량의 HDD를 합쳐서 대용량이며 SSD로 고속 접근을 실현한다.

 

압축은 아주 중요. 왜냐하면 많은 플래시 스토리지를 사용하고 있으며 여기에는 용량적인 제약이 있기 때문이다.

이 제약을 뛰어 넘기 위해 압축은 아주 중요하다. 지금까지 실 데이터는 대부분 압축을 하고 있다.

뛰어난 압축을 위해서 리소스를 투입하고 있으며 현재 아주 잘 동작하고 있다.

 

 

 

출처: http://www.publickey1.jp/blog/13/facebookmysqlmysql_connect_2013.html

 

 

신고
by 흥배 2013.12.30 08:00
| 1 |

티스토리 툴바