IT 이모저모

Cassandra의 스토리지 엔진을 바꾸어서 고속화한 Rocksandra를 Instagram이 오픈소스로 공개

exien 2018. 3. 19. 09:14

Cassandra의 스토리지 엔진을 교체하여 고속화 한 「Rocksandra "Instagram가 오픈 소스로 공개. Java의 가베지 컬렉션에 의한 지연을 크게 해소



Instagram은 NoSQL 데이터베이스 Cassandra에서 발생했다 Java 가비지 콜렉션에 의해 발생하는 지연을 해소하고, 고속화 한 개량 판 Cassandra를 오픈 소스로 공개했다고 발표했다 .

스토리지 엔진으로 키 밸류 스토어 'RocksDB'을 이용한 것으로,이 회사는이 향상된 버전 Cassandra를 " Rocksandra "라고 부르고 있습니다.

Java 가비지 컬렉션이 Cassandra의 지연을 발생시키고있다

회사가 Rocksandra 개발하게 된 경위는 엔지니어 블로그 " Open-sourcing a 10x reduction in Apache Cassandra tail latency "에 자세히 설명되어 있습니다.

그에 따르면, Instagram에서 Cassandra를 사용하고 있지만 종종 지연이 악화한다는 과제를 안고있었습니다.

아래는 파란색 선이 평균적인 대기 시간을 나타내며, 오렌지 선은 99 퍼센트 (전체 값 중 좋은 쪽부터 세어 100 분의 99의 위치에있는 값)의 지연 시간을 보여줍니다. 즉, 전체 처리의 일부 종종 큰 지연이 발생하는 것을 알 수 있습니다.

Cassandra에서 발생하는 지연 시간

조사 결과이 Java 가비지 콜렉션에 의해 발생하는 것을 파악합니다.

The GC overhead obviously had a big impact on our P99 latency, so if we could lower the GC stall percentage, we would be able to reduce our P99 latency significantly.

이 가비지 컬렉션의 오버 헤드는 99 퍼센트의 대기 시간에 큰 영향을주고있다. 만약이 가베지 컬렉션에 의한 성능 저하의 비율을 낮춰지면, 99 퍼센트의 대기 시간을 크게 줄일 수있을 것이다.

스토리지 엔진에 C 언어로 작성된 RocksDB를 채용

Java 가비지 컬렉션의 영향을 제거하기 위해, Instagram은 Cassandra의 스토리지 엔진을 대체합니다.

그러나 아무것도없는 곳에서 새로운 스토리지 엔진을 개발하는 것은 위험이 높다고 C ++로 작성된 오픈 소스 RocksDB을 기반으로 개발을 추진하기로했습니다.

RocksDB은 Google에서 개발 한 NoSQL 경량 라이브러리 "LevelDB" 을 사용하여 Facebook이 개발 한 키 밸류 형 데이터 저장소입니다.

그러나 Cassandra의 스토리지 엔진을 교체하려면 몇 가지 과제가있었습니다.

첫 번째는 원래 Cassandra는 스토리지 엔진을 교체 할 수 있도록 설계되어 않았다는 점. 따라서 회사는 스토리지 엔진을 플러그 가능하기위한 API를 만들기로했습니다.

To find a balance between massive refactoring and quick iterations, we defined a new storage engine API, including the most common read / write and streaming interfaces. This way we could implement the new storage engine behind the API and inject it into the related code paths inside Cassandra.

대규모 리팩토링과 빠른 반복 사이의 적절한 균형을 찾기 위해 새로 스토리지 엔진 API를 정의하기로했다. 거기에 가장 많이 사용되는 읽기 / 쓰기 및 스트리밍 인터페이스가 포함되어있다. 이 덕분에 우리는 API를 통해 새로운 스토리지 엔진을 구현하고 Cassandra 내부의 관련 코드를 통해 통합이 가능하게되었다.

두 번째는 스토리지 엔진이 될 RocksDB이 간단한 키 밸류 형 데이터베이스인데 반해, Cassandra가 풍부한 데이터 형식과 테이블의 스키마를 지원하는 것입니다. 이를 RocksDB 구현하기 위해 데이터 변환을위한 인코딩 및 디코딩 알고리즘을 이용한 것.

대기 시간의 대폭적인 절감

이러한 몇 가지 과제를 극복하고 RocksDB을 Cassandra 스토리지 엔진으로 구현 한 'Rocksandra "벤치 마크가 아래와 같습니다.

파란색 마커가 Cassandra 3.0, 오렌지 마커가 Rocksandra입니다.

왼쪽의 평균 대기 시간도 Cassandra가 2.267ms, Rocksandra가 1.386ms와 고속화를 담당하고 있으며, 99 퍼센트도 11.864ms와 5.722ms 반 정도의 대기 시간입니다. 999 퍼센트는 263.21ms과 14.23ms과 압도적 인 차이가 붙었습니다.

Rocksandra 의한 지연 시간 개선

Instagram은 향후 오픈 소스의 Rocksandra의 개발을 진행하면서 보조 인덱스 및 수리 등 아직 구현되지 않은 Cassandra의 기능에 캐치 업 및 Cassandra에 플러그 스토리지 엔진 아키텍처 구현에 공헌 해 나갈로 있습니다.