'memcache'에 해당되는 글 1건

  1. 2009.06.18 트위터의 대용량 서비스 기술을 분석해 본다. (7)

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

사용자 삽입 이미지

개인적으로도 맥장비에는 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억 정도면 서비스를  구축하지 않을까 싶다. 나머지 상용제품은 눈을 씼고 찾아볼 수 없다... 쩝.. 외국 회사의 장비와 소프트웨어를 구매해야 데 많은 비용을 써야 하는 입장에서는 가슴이 아프다..

Posted by 박재현

댓글을 달아 주세요

  1. 익명 2009.06.29 16:27  댓글주소  수정/삭제  댓글쓰기

    모르는 사람이 보면 "웹프론트는 성능의 이유로 레일즈를 사용하고 백엔드는 자바를 사용한다"라는 표현이 오해가 있습니다. 레일스가 느리다는 사실을 아는 사람이야 레일스 느려서 백엔드 바꿨다로 이해하겠지만요.

    그리고 nokarma 저 분은 말투 저러기로 유명한 분이니 흥분하지 마세요. 저 분하고 일하는 사람이 얼마나 피곤할지 걱정되네요. 일부러 감정의 변화를 일으켜서 무슨 카타르시스를 느끼는 듯 합니다. 좋게 얘기했으면 "오해의 소지가 있었으니 정정합니다" 정도로 끝날 수 있는 얘기였는데요.

  2. Favicon of https://wisefree.tistory.com BlogIcon 박재현 2009.06.29 16:35 신고  댓글주소  수정/삭제  댓글쓰기

    ^-^ 그러게요.. 오르시는 분의 입장에서 오해의 소지가 있는 것 이해합니다. 아무래도 댓글의 첫단추가 존중이라는 기본 소양에서 끼워지지 않아서 그런것 같긴 합니다. 내가 모자란 탓이기도 하겠죠.. 짬짬히 어려운 시간내서 블러깅하기도 힘들어지내요.. 그래서 트위터를 점점 더 하게 되는 것 같습니다. 상용 블러그도 아닌데요.. ^-^ 좋은 말씀감사합니다.

    • 흥분금지 2009.06.29 18:06  댓글주소  수정/삭제

      제가 알기로 저분은 국내에 IT 블로깅이나 글을 좀 쓴다하는 분들 모두를 저런씩으로 찍접거리는 것을 낙으로 삼고 계신 분입니다. 아마 해외 있으니 얼굴 철판 깔고 그럴 수 있다고 보는데, 자기 신분 밝히고 켄트백이나 이런 사람 블로그에도 이 따위 말투로 말할 수 있을런지 모르겠습니다. 그냥 자기 잣대로 사람 재단하는 걸 즐기는 사람입니다. 휘말리지 마세요.

  3. Favicon of http://sparck.tistory.com BlogIcon sparck 2009.06.29 19:21  댓글주소  수정/삭제  댓글쓰기

    흐음 보통, twitter 정도의 엄청난 유저의 서비스를 유지하기 위해서는 당연히 비싼 Oracle DB/WAS/SOA Suite 등으로 무장해 있을 것 같은데, 저렴하게 시스템을 구축/운영하면서도 좋은 서비스를 제공하고 있네요.

  4. 컴사랑 2009.07.01 11:02  댓글주소  수정/삭제  댓글쓰기

    저렴하게 저런 서비스를 운영할 수 있다니...
    그러면서 훌륭한 서비스를 하다니..
    부럽군요.

    • Favicon of https://wisefree.tistory.com BlogIcon 박재현 2009.07.01 15:53 신고  댓글주소  수정/삭제

      동감입니다. 오픈소스를 적용하는 데 있어 기존 회사들은 인력과 기술 지원 등으로 인해 많은 부담을 갖고 있는 것 같습니다. 국내에도 오픈소스 기반의 인프라 서비스를 하는 회사들이 있어도 좋을 것 같습니다. 최소한 아파치, 톰캣, 멤캐쉬 등과 제대로 Deploy해도 많은 효과가 있을 텐데요.. 요즘 환율이 올라 오라클 제품은 더 비싸진 것 같습니다. 유지보수 비율도요... ^-^

  5. 지나가던 2010.05.31 10:51  댓글주소  수정/삭제  댓글쓰기

    이 분야에 대해 잘은 모르지만 상세한 정보 감사합니다. ^^