본문 바로가기
프로그래밍/데이터베이스

CockroachDB 어떤 데이터베이스인가?

by bantomak 2023. 3. 6.

특히 이용자가 많은 모바일 게임의 메인 데이터베이스는 쓰기 위주(Write-Heavy) 워크로드에 적합하다.

그리고 이용자가 급격하게 늘어날 경우를 대비해서 빠르게 확장할 수 있어야 한다.

 

데이터베이스 종류  
전통적 관계형 데이터베이스 MySQL, MsSQL, PostgreSQL
문서형 분산 데이터베이스 Couchbase, MongoDB, Cassandra
관리형 데이터베이스 DynamoDB

CockroachDB 란

CockroachDB란 SQL 인터페이스를 지원하는 분산 데이터베이스입니다.

수평 확장이 가능하고, 다양한 종류의 물리적 장애에서 살아남을 수 있으며, 전 지구적인 스케일로 데이터베이스를 구축하고 관리할 수 있는 다양한 기능을 지원합니다. GitHub에 오픈소스로 공개되어 있고, 무료로 사용할 수 있으나 몇몇 기능은 엔터프라이즈 라이센스를 필요로 합니다.

 

CockroachDB는 시스템에 크고 작은 문제가 생겼을 때 생존하고 스스로 회복하는 것 (Resiliency)에 가장 큰 강점.

분산 시스템을 설계할 때에 가장 어려운 문제중 하나가 바로 장애 상황에서 일관성이나 가용성을 최대한 유지하면서 복구해내는 것인데요. 특히 분산 데이터베이스 시스템의 경우 복구에 많은 시간이 걸리거나 많은 데이터가 소실되면 어플리케이션에 큰 영향을 끼칠 수 있습니다.

 

CockroachDB의 경우 디스크, 물리적 머신, 심지어 데이터 센터 단위의 장애가 생기더라도 생존할 수 있는 다양한 옵션을 제공하고 있습니다. 또한 문제 상황이 생기면 스스로 감지하고 사람의 개입 없이도 자동으로 서비스를 최대한 복구해냅니다. 

 

핵심적인 특성 (Killer Features)

  • PostgreSQL Compatibility
  • Serializable Transactions
  • 수평 확장성
  • Multi-Region 클러스터 지원

- PostgreSQL 프로토콜의 거의 대부분을 지원하기 때문에, 기존에 커뮤니티에 존재하던 다양한 DB 접속 라이브러리나 ORM 등을 거의 그대로 사용할 수 있습니다. 

- SQL 표준에 정의되어 있는 트랜잭션 격리 수준 4단계 중 가장 강력한 SERIALIZABLE 격리를 모든 트랜잭션에서 사용하도록 되어 있습니다. 즉, 여러 개의 트랜잭션이 동시에 실행되어도 한 번에 하나씩 실행한 것과 동일한 결과를 보장합니다.

- 데이터베이스 확장이 필요한 경우 노드를 추가로 확복하고 붙여주기만 하면 그대로 처리량과 용량을 늘릴 수 있습니다. 노드를 확장/축소하거나 교체할 때 별도의 서비스 중단이 필요하지 않고 무중단으로 작업할 수 있는 것 또한 강력한 장점입니다.

- CockroachDB에는 클러스터를 굳이 쪼개고 샤딩하지 않고도 하나의 거대한 클러스터를 여러개의 리전에 걸쳐 운영할 수 있는 기능이 내장되어 있습니다. 이 기능을 활용하면 데이터베이스/테이블/ row 단위로 메인 리전을 결정하고 최적화 할 수 있게 됩니다.

CockroachDB Internals

  • Key-Value Store
  • Range
  • Replication: Leaseholder, Raft Leader
  • Read Scenario
  • Write Scenario
  • MVCC(Multi-Version Concurrency Control)

Why we chose CockroachDB?

CockroachDB는 RDBMS의 장점 (Transaction 지원)과 NoSQL의 장점 (샤딩 없이 수평 확장 가능) 을 모두 가지고 있어 상당히 매력적인 포지션에 놓여 있었습니다.

Production 배포시 고려해야 할 사항

  • Range Split
  • Hotspot 피하기
  • Locality 설정하기

 

결론

CockroachDB는 수평 확장이 가능하고 다양한 장애 시나리오에서도 생존할 수 있는 강력한 분산 데이터베이스 소프트웨어입니다. 하지만 현재 사용하면서 상당히 난해한 부분들이 존재합니다. 일단 한국에서 생소한 데이터베이스라서 관련 자료들이 없습니다. 그리고 영어된 자료도 찾기가 힘듭니다. 대부분 CockroachDB 자체 메뉴얼을 참고해야합니다. 그리고 최신 트랜드를 따르는 데이터베이스답게 Docker 환경에 배포하는 것이 기본으로 되어있습니다. Docker 관련으로도 학습이 필요합니다.

 

함께 읽으면 좋은 글

 

트랜잭션 격리 수준(Transaction Isolation Level)에 대해서

트랜잭션(Transaction) 트랜잭션이란 여러 개의 작업을 하나로 묶은 작업의 단위(Unit Of Work)를 말한다. 특정 작업으로 시작해서 묶여 있는 모든 작업들을 다 완료되어야 성공으로 처리한다. 트랜잭

jettstream.tistory.com

참고 사이트

 

CockroachDB in Production

CockroachDB의 여러 가지 고유한 특성을 알아보고, 왜 CockroachDB를 메인 데이베이스로 선택했는지, Production 서비스에서 CockroachDB를 운용하기 위해 어떤 점들을 주의하고 신경써야 하는지에 대해 다룹

tech.devsisters.com

댓글