페블(Pebble): RocksDB에서 영감을 받은 키밸류 저장소

페블(Pebble)RocksDB에서 영감을 받은 키밸류 저장소입니다. 카크로치디비 블로그에 새로운 Pebble 이야기가 포스팅되었는데 그 내용을 요약하고 의견을 덧붙입니다.

요약

카크로치디비의 새 스토리지 엔진 페블을 소개합니다. 페블은 고성능이고, 안정적이며 카크로치디비에 특화될 수 있습니다.

지금까지 카크로치디비는 스토리지 엔진으로 RocksDB를 사용했습니다. RocksDB는 현장에서 검증되었고, 고성능이며, 다양한 기능을 제공하고 있습니다.

우리는 작업 중 RocksDB의 몇 몇 버그를 발견할 수 있었고, 적절한 시기에 이를 수정하는 것은 도전과제였습니다. 또 RocksDB는 C++로 작성되어 있기 때문에 Go에 익숙한 카크로치디비 엔지니어들에게 진입장벽이었습니다.

또 RocksDB는 일반적으로 고성능이지만, 특수한 상황에서 성능 문제가 있었고 이를 해결하기 위해 많은 노력을 해야 했습니다.

Go로 작성된 다른 스토리지 엔진도 검토했지만 여러 스토리지 엔진을 적용하는 것 자체가 부담이었고, 스토리지 엔진에 따라 일부 기능을 사용하지 못하거나 데이터베이스 동작이 미묘하게 달라지는 것에 대한 부담이 있었습니다.

현재 카크로치디비에서 페블과 RocksDB는 양방향으로 호환됩니다. 그렇기 때문에 스토리지 엔진을 언제나 전환할 수 있습니다. 하지만 두 개의 스토리지 엔진을 유지하는 것에는 큰 비용이 들며 언젠가 이 호환성은 없어질 것입니다.

페블은 RocksDB와 비교해 의미 있는 성능향상을 보여주었습니다.

카크로치디비 20.1 부터는 페블을 스토리지 엔진으로 사용할 수 있습니다. 20.2 부터는 페블이 기본 스토리지 엔진이 될 것이며 때가 되면 RockdDB는 카크로치디비에서 사라질 것입니다.

덧붙임

C++로 작성된 시스템을 성능향상을 위해 Go로 작성한 사례입니다. 물론 성능은 측정 방법과 실제 성능 문제1가 무엇이었는지는 잘 살펴보아야겠지만 Go 언어 커뮤니티에 의미 있는 하나의 사례가 되리라 생각합니다.


  1. 카크로치디비는 cgo 관련 비용 문제를 이전에 포스팅한 적이 있습니다.