유튜브 엔지니어가 오픈소스 데이터베이스인 MySQL을 대규모 상용 환경에서 좀 더 효율적으로 활용할 수 있도록 지원하는 새로운 소프트웨어를 개발하고 있다. 비테스(Vitess)란 이름의 이 소프트웨어는 구글의 프로그래밍 언어인 고우(Go)로 작성했다는 점에서 또 한 번 주목을 받았다.
유튜브는 이미 비테스의 컴포넌트 중 하나를 사용하고 있는데, 비토크(Vtocc)이란 이 코드는 유튜브가 자사 서비스의 월 8억 명에 달하는 사용자에게 비디오를 제공하는 것을 지원하고 있다. 구글이 유튜브를 인수한 것은 지난 2006년이었다.
유튜브의 아키텍트 수구 소구마레인은 유튜브의 엔지니어 마이크 솔로몬과 함께 미국 샌디에고에서 열린 유즈닉스 LISA(Large Installation System Administration) 컨퍼런스에서 비테스에 대해 소개했는데, 이 자리에서 소구마레인은 “비토크가 매우 안정적이며, 상용 환경에서 사용하는 데 필요한 모든 툴을 갖추고 있다”고 강조했다.
구글의 고우로 작성된 비테스는 특히 구글의 새로운 프로그래밍 언어를 대규모 상용 환경에서 사용할 수 있다는 것을 검증해 준 것이기도 하다. 비교적 새로운 언어인 고를 구글이 발표한 것은 지난 3월이었다.
유튜브는 매월 40억 시간의 비디오를 서비스하고 있으며, 매분 72시간 분량의 비디오가 업로드되고 있다. 유튜브는 이 모든 비디오를 파일 시스템에 직접 저장하는데, MySQL은 각 비디오를 서비스하는데 필요한 모든 메타데이터를 저장하는 데 사용된다. 여기에는 사용자 정보, 광고 정보, 국가 정보 등이 포함되어 있다.
솔로몬은 유튜브가 안정성 때문에 MySQL 사용을 선호한다고 밝혔다. 솔로몬은 처음 유튜브 서비스를 구축한 엔지니어 중 한 명이다. MySQL 은 몇 가지 특성을 가지고 있지만, 이들 특성은 잘 알려져 있기 때문에 쉽게 완화시킬 수 있다고 설명했다. 하지만 MySQL은 지원 규모에 한계가 있으며, 특히 유튜브와 같은 초대규모 서비스를 수용할 수 있는 것으로 여겨지지는 않은 것이 사실이다.
MySQL의 가장 큰 문제는 규모가 일정 지점에 도달하면, 하드웨어 관리와 인스턴스 관리에 너무 많은 시간을 소비하게 된다는 것. 솔로몬은 “이런 허드렛일을 자동화하고자 했다. 복잡하고 오류가 나기 쉬운 모든 동작이 자체적으로 치료되기를 원했다”고 설명했다.
MySQL은 또한 대규모 배치에서 그리 효과적이지 않다. 일반적으로 MySQL로의 각 연결은 서버 상에서 전용 쓰레드를 필요로 한다. 이런 방식은 유튜브 정도 규모의 운영에는 그리 적합하지 않다. 솔로몬 역시 “수 만 개의 접속을 구동하는 것이 실행 불가능하다”고 지적했다.
하지만 유튜브의 엔지니어는 MySQL의 코어 코드를 수정하는 것은 내키지 않았다. 복잡하고 이해하기 어려운 코드에 대한 수정은 종종 예기치 않은 결과를 가져오기 때문이다. 솔로몬은 “확실한 방법이 아니다. 자신이 무엇을 하고 있는지 안다고 생각하는 순간이 곤경에 처하기 시작하는 순간이다”라고 덧붙였다.
그래서 비테스는 MySQL과 연동해 추가 관리 기능을 제공하도록 만들어졌다. 예를 들어, 비토크는 수천 건의 SQL 쿼리를 적은 수의 배치 작업으로 통합해 MySQL이 이들 요청을 처리하는 데 더 적은 자원을 사용할 수 있도록 해 준다. 또한 쿼리를 파싱해 좀 더 효율적으로 처리되도록 하며, 특히 한 쿼리로부터 나온 동일한 결과물을 다른 동일한 요청에도 그대로 사용함으로써 중복된 요청으로 인한 워크로드를 줄여준다.
수구마레인은 특히 고우 언어를 사용함으로써 기존의 개발 언어들보다 한층 더 생산적으로 이들 툴을 개발할 수 있었다고 밝혔다. 우선 컴파일 속도가 빨랐다. 비테스의 코드 3만 줄이 30초 만에 바이너리 파일로 컴파일됐다는 것. 또한 라이브러리가 풍부해 많은 작업이 그리 많은 프로그래밍을 필요로 하지 않았다. 예를 들어 수구마레인은 로그 파일을 주기적으로 정동하는 루틴을 105줄로 작성했는데, 이 기능을 C나 C++에서는 이렇게 적은 코드로 작성할 수 없다.
수구마레인은 “고우는 이런 점에서 인상적이다”라며, “고우 언어의 기능은 심사숙고한 것이다. 기존 언어보다 한층 우아한 방법으로 기능을 작성할 수 있도록 해 준다”고 강조했다. 이와 함게 멀티코어 프로세서에서 중요한 동시성 지원 부분도 강조하며, “쓰레드 관리를 걱정할 필요가 없다. 고우 언어가 대신 관리해 줄 것”이라고 덧붙였다.
물론 고우 언어에도 단점이 있다. 수구마레인은 에러 처리가 향상의 여지가 많으며, 스케줄링과 불필요한 정보 정리 기능도 개선이 필요하다고 지적했다.
솔로몬은 비테스가 데이터베이스 복제나 자동 샤딩 등의 추가 역할을 수행해 주기 때문에 데이터베이스를 관리자의 추가 간섭없이 여러 대의 서버로 확장할 수 있다고 강조했다.
editor@itworld.co.kr
고언어 한번 배워볼까요??ㅎㅎ