본문 바로가기

기술자료/기술운영자료

트위터가 최적화한 'MYSQL' 소스 공개




트위터 서비스에 MySQL 데이터베이스를 최적화시키는 비법이 공개됐다. 회사가 5억명 이상 회원들의 정보를 저장하고 매일 1억명이 넘는 방문자들의 데이터 입출력을 다루기 위한 노하우를 오픈소스로 푼 것이다.  

 

미국 씨넷은 지난 9일 트위터가 그 사용자들로부터 생성된 데이터를 저장하기 위해 쓰는 데이터베이스 기술을 수없이 조율한 이력을 내놨다고 보도했다.  

 

이들이 사용중인 마이SQL은 웹서비스 시장에서 광범위하게 쓰이는 오픈소스 기반 관계형 데이터베이스관리시스템(DBMS)이다. 
트위터 개발자 제레미 콜과 다비 아놋은 공식 엔지니어링 블로그를 통해 "마이SQL은 트위터 서비스상의 타임라인, 사용자정보, 메시지, 관심그래프같은 트위터 데이터 대부분을 감당하는 스토리지 기술"이라고 설명했다.  

 

이어 "지식을 공유함으로써 오픈소스 소프트웨어 혁신을 촉진할 수 있다는 믿음에 따라 우리는 마이SQL에 투입한 작업을 BSD뉴라이선스 기반으로 기트허브(GitHub)에 올려놓기로 했다"고 밝혔다.  

 

기트허브는 웹기반 오픈소스 협업 네트워크 사이트다. 앞서 기업용 인맥관리 서비스 링크드인이 자사가 축적한 분산처리기술 '하둡' 기반의 데이터관리 최적화 기술을 공개한 곳도 여기다.  

 

트위터가 기트허브에 공개한 코드는 일반적인 마이SQL에 ▲더 용량이 큰 NUMA 시스템에서 메모리할당을 최적화하고 ▲더 많은 상태 변수를 추가하고 ▲서버측 스테이트먼트 타임아웃 지원기능을 향상시키고 ▲이노DB 버퍼 풀을 추출하거나 복구할 수 있도록 하고 ▲SSD 장비에서 돌아갈 때 최적화한 성능을 제공하는 내용을 포함한다.  

 

트위터측 개발자들은 관련 솔루션 개발업체들이 이 기술을 활용해 기존 마이SQL 커뮤니티와 함께 마이SQL DBMS를 더 잘 활용할 수 있기를 기대한다고 밝혔다. 

트위터는 4월12일 페르코나 라이브 MySQL 컨퍼런스에서 이번 오픈소스 공개에 대해 보다 자세히 설명할 계획이다. 공개된 오픈소스는 저자 이름만 제대료 표기해주면 코드를 수정한 후 공개하지 않고 상업적 이용이 가능한 BSD 라이센스를 따른다고 한다.

결과물을 완벽히 오픈소스로 공개한 것은 지극히 드문일인데 트위터가 대단한 일을 한듯 합니다.

* 출처 : http://www.zdnet.co.kr

아래는 제레미 콜 이라는 트위터 DBA 팀 리더가 MySQL 컨퍼런스에서 발표한 내용을 번역한 것입니다.

그거말한것중 재밌는 것:
트윗을 저장하는 옛날 방식(temporally sharding)에서 
좀더 분석적인 접근으로 새로운 트윗을 저장하는 방식(T-bird라고 불리는 방식)
으로 전환하는 이야기. 

(1) 트윗을 저장하는 예전 방식. (temporally sharding)
temporally sharding은 단순하게 같은 시간 범위의 트윗은 같은 샤드에 함께 저장된다는 것이다.
한 서버가 꽉차면, 두번째 서버에 저장하고, 꽉 차면 세번째 서버에 저장한다.
이것의 결점:
- Load balancing: 사람들은 최근 트윗만 보는데, 예전 트윗이 저장된 서버는 전혀 트래픽을 받지 않는다.
- 비싸다: 3주마다 한 서버를 꽉 채운다.
- 논리적으로 복잡하다: 완전히 새로운 클러스터를 3주마다 구축하는건 DBA에게 고통스럽다. 

(2) 트윗을 저장하는 새로운 방식. (T-bird)
당신이 트윗을 하면 T-bird라고 불리는 내부 시스템에 저장됨.(T-bird는 Gizzard로 만들어짐)
보조 인덱스는 T-flock(이것도 Gizzard로 만들어짐) 이라는 분리된 시스템에 저장된다.

각 트윗의 고유ID는 Snowflake(오픈소스)로 생성됨.
snowflake를 쓰면 클러스터들에 좀더 균등하게 샤드할 수 있다.
FlockDB(Gizzard 사용)는 ID-ID 매핑이 사용된다. 즉, ID들간의 relationships을 저장한다.

Gizzard는 Mysql(InnoDB) 위에 구축된 트위터의 분산 데이터 스토리지 프레임워크.
- InnoDB 를 선택한 이유는 데이터가 손상되지 않아서. 
- 높은 성능을 얻기 위해 개별노드의 많은 features 들은 turn off 했다. (바이너리 로그, 리플리케이션 같은거) Gizzard는 샤딩, 복제, 스케줄링을 컨트롤한다.
- Gizzard 는 다른 스토리지 시스템을 위한 building block 으로 사용된다.

Gizzard 는 로드 밸런싱에 완벽하게 동작하진 않지만, it allows.
- 서버가 꽉 차는걸 걱정할 필요없이 천천히 증가.
- DBA들이 잠을 잘 수 있다.

MySQL 은 ID generate와 그래프 저장이 안 된다.
평균 DB서버 사양: HP DL380, 72GB RAM, 24 disk RAID10. (메모리와 디스크의 좋은 균형) 

* 카산드라는 쓰기 성능이 높은데, 읽기 성능이 안 좋은 특징. 장점은 저렴한 하드웨어에서 실행 가능, 쉽게 확장가능, schemaless 디자인.
* Hadoop은 구조화되지 않은 대형 데이터셋을 처리하기 위해 사용됨.
* Vertica 는 분석과 큰 데이터의 조합(MapReduce작업 없이)을 위해 사용된다. 


* 출처 : http://highscalability.com/process/CreateJournalEntryComment?moduleId=4867632&entryId=14142508&finalize=true