2009/06/18 19:08

트위터의 대용량 서비스 기술을 분석해 본다.

트위터가 어떻게 개발되었을 까? 아래는 타임지에 실린 트위터의 기사이다. 타임지에서 트위터가 우리의 삶을 어떻게 바꾸어 놓을 것인가 에 대한 기사를 실었다. 이처럼 현재 트위터같은 실시간 웹은 온-오프라인을 넘나들면서 새로운 문화를 만들어 가고 있다.

사용자 삽입 이미지

개인적으로도 맥장비에는 Twitterrific 을 설치하고 윈도우의 FireFoX에는 Twitter Extension을 설치하여 사용하고 있다. 분명한 것은 트위터가 폭발적으로 성장하고 있고 앞으로도 성장할 것이라는 것이다. 개인적으로는 무선 환경 특히 , SMS 서비스로 길들여진 실시간 정보 교환 문화가 140개의 문자로 소통하는 트위터를 성장시킨 밑거름이 아닐까 싶다. 지금도 인터넷에서는 트위터로 , 현실에서는 핸드폰 문자와 포스트잇으로 의사를 교환하곤 한다. 

사회.문화적 관점을 떠나 개발자 입장에서 트위터가 어떻게 개발이 되었을까 고민을 하며 그 기술을 추적을 해보았다. 특히, 트워터는 실시간에 대용량 데이타에 대한 Push 서비스를 제공해야 하기 때문에 서비스의 구조와 운영 기술은 아주 중요하다. 

먼저 트위터의 아키텍쳐에 대한 전반적인 소개 자료를 보면 트워터는 아래와 같은 기술을 사용하여 개발되었다.

-개발 언어 : Ruby on Rails , 자바 , Scala
-시스템 관리 : Puppet , 오픈소스 서버 관리 툴
-Cache : Memcache , 오픈소스 분산 객체 캐쉬 시스템(트워터의 성능을 위해 중요한 역할을 한다.)
-H/W : X86 기반 리눅스
-DBMS : MySQL
-Web Server : Apache
-서비스 특징 :  일반 웹 서비스처럼 웹 페이지를 중심으로 서비스를 제공하는 것이 아니라 트워터 서버에서 API를 제공하고 이를 통해 웹과 디바이스등 다양한 생태계를 구성하고 있다.

트위터의 경우 웹 프론트는 성능의 이유때문에 Ruby on Rails를 사용하고 백엔드는 자바를 사용한다. 특히, 자바를 사용할 때 Scala 를 함께 사용한다.  Scala는 자바 등의 언어와 함께 사용하여 보다 코드는 간결하게 만들어주는 개발 언어이다. 간략히 테스트 코드는 보면 스칼라 코드에서 직접 자바 라이브러리를 호출하여 사용할 수 있다. 이렇게 자바와  Scala , Memcache 를 사용하여 초기 서버를 구축하여 2008년까지 사용하였다.

이렇게 개발된 시스템의 현재 상황은 다음과 같다.

- 초당 600개의  Request를 처리함
- 초당 평균 200-300 커넥션( 초당 800 커넥션 까지 확장 가능함 )
- MtSQL 은 초당 2,400 Request를 처리함
- 웹 서버는 Mongrel 이고 180개의 레일스 인스턴스를 운용
- 8 코어 하드웨어 박스에 1 MySQL 서버와 1 슬래이브 구성( 슬래이브는 통계 및 레포팅용으로 데이타 마트 구성 )
- 예외 상황에 대비하여 30개 이상의 추가 프로세스를 운영중
- Sun X4100 모델, 8대
- 평균 DB에서 처리 시간 : 50-100 밀리초
- 16GB Memcached

트위트 사이트보다 트위트의 API가 10배 이상 호출이 많다고 한다. 이러한 상황에서 최대한의 성능을 내기 위해 당연히 DB를  denormalization하여 테이블간의 죠인을 줄이고 , 메모리 캐쉬에 모든 데이타를 올려놓아서 성능을 보장한다.

과거 DBMS 수업시간에 DBMS Normalization을 배우고 오라클에 종속적인 지식을 갖고 있는 DA(Data Architecture)가 테이블과  SQL을 설계하고 곳에서는 상상할 수 없는 일이다. 왜 Normalization을 안하냐고 당장 공격이 들어올니까.. 그게 그 분들의 밥줄이기도 하지만... 얼추 계산해 보니 하드웨어와 기타 라이센스 해서 2억 정도면 서비스를  구축하지 않을까 싶다. 나머지 상용제품은 눈을 씼고 찾아볼 수 없다... 쩝.. 외국 회사의 장비와 소프트웨어를 구매해야 데 많은 비용을 써야 하는 입장에서는 가슴이 아프다..
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 2 Comment 24
2009/06/10 09:23

모바일 디바이스-클라우드간 데이타 동기화 서비스에 대한 고찰

스마트폰을 통한 모바일 환경이 일상화 되면서 웹 클라우드와 모바일 디바이스간의 동기화는 아주 중요한 기본 서비스로 자리잡고 있습니다. 가령, RIM의 블랙베리는 Push Mail을 앞세워 비지니스 맨들의 문화를 바꾸면서 이 분야의 강자로 자리잡았습니다. 이러한 Push Mail의 구현 방법중 하나가 바로 씽크 기술을 이용하는 것 입니다. 간략히 모바일 클라우드와 동기화 서비스의 현황에 대해 정리해 봅니다. ( 참고로 아래 그림들은 테크런치에 올라온 싱크 솔루션에 대한 비교 자료에서 발췌한 것 입니다. 해당 자료는 실제 오픈소스  씽크 솔루션과 플랫폼 제공업체인 Funambol에서 작성한 자료입니다. )


1. 동기화 대상

아래 그림은 모바일 클라우드와 모바일 디바이스간의 동기화 대상을 정리한 것 입니다. 전체적으로는 사진과 주소록, 전자우편,소셜 네트웍,일정 데이타가 현재 주요한 동기화 대상임을 알 수 있습니다. Apple MobileMe와 Funambol, MS Myphone,Nokia OVI,Plam Synergy 에서 이들 데이타를 동기화해주고 있습니다. 아마 다른 서비스들도 조만간 이들 데이타의 동기화를 모두 제공할 것입니다.
 
사용자 삽입 이미지

개인적으로는 앞선 데이타 타입들 외에 사용자 정의 데이타(User defined data type)에 대한 동기화의 지원 여부가 중요한 경쟁요소가 될 것이로 보입니다. 현재 모바일 플랫폼의 개발 환경이 개방화되면서 개발자들이 자발적으로 많은 어플리케이션을 개발하고 있습니다. 또한 핸드폰 뿐만 아니라 디자탈 액자, TV 등 다양한 디바이스간 동기화가 필요하기 때문에 보다 어플리케이션에서 사용자가 정의한 데이타에 대한 동기화 지원이 아주 중요해 질 것으로 보입니다.

사용자 정의 데이타외에 또 하나 중요한 동기화 대상은 외부 서비스 데이타(External service data type)에 대한 동기화입니다. 다음은 현재 각 동기화 서비스서 지원하는 외부 쇼셜 서비스의 대상이다. 현재 플리커와 페이스북에 대한 동기화를 주로 지원하고 있습니다. 그러나 현재 이들 서비스외에 Twitter나 Friendfeed같은 실시간 마이크로블러깅 등 모바일 분야의 Killer Application 들에 대한 지원이 주요한 경쟁력으로 부각되고 있습니다.

사용자 삽입 이미지

2. 비용

대부분의 서비스가 무상으로 제공되고 있음을 알 수 있습니다.  아마 기본 서비스는 무상으로 제공되겠지만 백업이나 기타 다른 디바이스로의 Restore 등 기타 부가 기능을 제공한 프리미엄 버전이 동시에 제공될 것입니다.

사용자 삽입 이미지

3. 동기화 방법

단순히 모바이 디바이스상의 데이타를 웹상의 모바일 클라우드로 백업을 하는 개념의 동기화하면 그 구현은 단순할 것입니다. 그러나 양방향으로 실시간에 이들 데이타를 동기화하기 위해서는 많은 고민이 필요합니다. 특히, 모바일 디바이스는 장비 특징상 대기 시간이 길수록 밧데리가 빨리 소모하며, 고정 IP가 아니라 수시로 IP가 변경되는  특징들 때문에 보다 스마트한 구조를 필요로 합니다. 일반적으로는 기존의 SyncML을 사용하거나 블렉베리 처럼 자체 개발한 표준 방법을 사용하여 개발합니다.

사용자 삽입 이미지

- 자체 개발한 미들웨어와 프로토콜 사용
현재  Push Mail을 가장 먼저 서비스한 RIM의 블랙베리는 기존의 메일 서버와 블랙베리 디바이스 간에 자체 개발한 미들웨어와 프로토콜을 사용하여 기존 메일 서버를 모니터링한 후 새로운 메일을 가져와서 블랙베리 디바이스에 Push를 합니다. 이 때 사용하는 프로토콜은 자체 개발한 것 입니다.  
 
- 기존 표준 방법의 확장 모델
기존의 대표적인 디바이스상의 동기화 방법은 SyncML을 이용하는 것입니다. 따라서 많은 동기화 서비스들은 HTTP(S) 프로토콜과 SyncML에 기반하여 개발합니다. 메일의 경우에는 IMAP IDLE(RFC2177) 커멘트를 사용하여 동기화를 하기도 합니다. IMAP IDLE 커멘트는 디바이스가 메일을 받을 수 있는 상태라는 것을 알려주는 커맨트입니다.

아래 그림은 MS에서 구현한 Direct Push 란 Push mail 모델입니다. Exchange server 2007에 구현되어 있는 이 방법은 Device가 Long-standing https로 동기화를 요청하면 이에 따라 사용자의 메일 박스의 상태를 점검하여 새로운 메일을 Device에 HTTP 프로토콜을 통해 SyncML로 Push를 해 줍니다.

사용자 삽입 이미지

모바일 디바이스를 이용하다 보면 간혹 디바이스를 잃어버리거나 다른 디바이스로 변경을 할 경우가 종종 발생합니다. 이 때, 가장 필요했으면 하는 기능이 바로 기존의 정보를 백업하거나 해당 정보를 다른 디바이스로 쉽게 옮기는 것입니다. 이처럼 모바일 환경이 일반화되면서 모바일 디바이스와 웹 클라우즈, 모바일 디바이스간 동기화는 아주 중요한 기본 서비스로 자리 잡을 것 입니다. 또한 외부 쇼셜 서비스를 비롯하여 새롭게 개발되는 모바일 웹 어플리케이션에서 동기화 기능은 필수적인 기능이 될 것 입니다. 

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 2 Comment 1