본문 바로가기

프로그래밍

Spanner - 구글의 새로운 데이터베이스

Big Table은 이미 구글의 강력한 데이터베이스로 유명하죠. 구글의 메인 데이터베이스로 쓰이고 있고 구글의 앱엔진 또한 Big Table를 사용하게 되어있죠. Big Table은 구글의 성공을 함께하였고, 구글이 강력한 데이터 서비스 기업으로 성장하는데 큰 도움을 주었습니다. 굉장한 확장성을 가진 Big Table은 구글의 데이터가 기하 급수적으로 늘어나도 충분히 감당할 수 있는 강력한 데이터베이스였습니다.

하지만 Big Table에는 몇 가지 이슈가 있었습니다. 복잡하고 변화하는 스키마를 다루기가 까다로웠고, 넓은 영역에 걸쳐 일관성을 확실히 유지할 필요가 있는 서비스들에서 사용하기에는 어려웠습니다. 구글의 많은 앱들도 이러한 이슈 때문에 Big Table 대신 성능이 떨어지는 Megastore라는 데이터베이스를 사용하곤 했습니다. 그래서 이런 문제를 해결하기 위해 Big Table과 비슷한 컨셉의 발전된 데이터베이스를 들고 나왔는데, 그것이 Spanner입니다.

Spanner는 scalable, multi-version, globally-distributed, and synchronously-replicated database라고 되어 있습니다. 글로벌 확장성을 지원하며, 외부와 일관성을 유지하는 트랙젝션을 지원하는 최초의 시스템이라고 합니다. 

Spanner는 Big Table처럼 key-value 형식입니다. 하지만 Big Table과는 다르게 Spanner의 데이터는 스키마 형식으로 저장되며, 저장되는 모든 데이터는 버전을 가지고 있습니다. 각 버전은 자동으로 timestamp가 찍히게 됩니다. 그래서 어플리케이션은 오래된 타임스탬프를 갖은 데이터를 읽어올 수 있게 됩니다. 시간이 지나면서 스키마가 변한다고 해도 버전을 이용하여 데이터의 일관성을 유지할 수 있게 되는 것입니다. 또한 Spanner는 SQL 기반의 쿼리문을 사용한다고 합니다.

또한 데이터베이스끼리 동기화를 하기 때문에 데이터베이스 끼리의 일관성을 유지할 수 있습니다. 그렇기 때문에 데이터베이스를 무한히 확장을 해도 일관성은 자동으로 유지됩니다. 또한 위에서 데이터들은 버전의 timestamp를 가지고 있다고 했습니다. 이 timestamp는 구글의 True Time API라는 것을 이용하여 결정 됩니다. True Time API는 원자시계와 GPS 시계를 이용하여 전세계적으로 완전히 동일한 timestamp을 유지할 수 있습니다. 그렇기 때문에 데이터센터가 어디에 있던, 전세계에 퍼져있는 데이터들의 일관성을 유지할 수 있게 되죠. 이것이 globally-distributed의 컨셉이지요.