ScyllaDB의 Benchmark 따라하기 1

ScyllaDB가 주장하는 10배 빠르다는 사실을 확인하기 위해서 ScyllaDB 홈페이지의 Scylla vs. Cassandra benchmark에 나와있는 내용을 직접 확인해보도록 하자.

홈페이지에 나와있는대로 하려면 DB서버는 24Core CPU, 128G 메모리가 있어야 한다. NIC도 DB서버에는 10Gbps를 사용했다.

우선 그런건 다 무시하고 PC에서 VirtualBox를 통해서 ScyllaDB와 Cassandra를 테스트해봤다. 테스트 환경은 다음과 같다.

DB 서버 (ScyllaDB/Cassandra)

  • CPU : 1 Core
  • 메모리 : 2G
  • HDD : 20G 고정크기 저장소

부하 테스트 서버

  • 없음. DB서버하고 같이 사용함.
1) 쓰기 테스트
다음의 명령을 사용하여 테스트했다.
cassandra-stress write duration=10m -mode native cql3 -rate threads=700 -node $SERVER

ScyllaDB 홈페이지에서도 사용한 명령을 적어주긴 했는데 대충 적은듯한 티가 많이 난다. duration=15min으로 되어있는 부분은 duration=15m이 되어야 한다.

VirtualBox에서 테스트한 결과는 다음과 같다.

ScyllaDB 평균 TPS : 20636

Cassandra 평균 TPS : 19789


2) 읽기 테스트

읽기 테스트를 진행하기 전에 다음의 명령으로 채워넣어놨다.

cassandra-stress write n=10000000 -pop "seq=1..100000000"  -mode native cql3 -rate threads=700 -node $SERVER

읽기 테스트는 다음의 명령을 사용했다.

cassandra-stress mixed 'ratio(read=1)' duration=10m -pop 'dist=gauss(1..10000000,5000000,500000)' -mode native cql3 -rate threads=700 -node $SERVER

ScyllaDB에 테스트를 할 때 데이터가 늦게 나온다 싶더니 나오라는 결과는 안나오고 다음의 메시지만 나오고 있었다.

com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded)

메시지가 말해주는건 다음과 같다.

"LOCAL_ONE Consistency level을 가지고 read를 수행하려 했는데 timeout이 발생했다! LOCAL_ONE Consistency level에서는 1개의 응답이 와야 하는데 아무것도 못받았다"

아무래도 thread 700개는 무리였던 것 같다. ScyllaDB 홈페이지에서 테스트에 사용했던 시스템은 24core에 128Gb 메모리를 가진 시스템이었기 때문에 thread를 300개로 낮춰서 다시한번 테스트한 결과는 다음과 같다.

ScyllaDB 평균 TPS : 236

Cassandra 평균 TPS : 150

ScyllaDB가 약 65%의 성능 향상이 있는 것으로 결과가 나오긴 했지만 테스트 중 ScyllaDB는 ReadTimeoutException이 한두번 발생하기는 했다. ReadTimeoutException은 Cassandra에서는 발생하지 않았다.


3) 읽기/쓰기 테스트

읽기/쓰기 테스트는 읽기 테스트에 사용했던 명령에 ratio만 read=1,write=1로 수정해서 테스트했다. 그런데 Cassandra에서 ReadTimeoutException이 많이 발생해서 thread 수를 300 -> 100 -> 50 으로 줄여나갔다. 

cassandra-stress mixed 'ratio(read=1,write=1)' duration=10m -pop 'dist=gauss(1..10000000,5000000,500000)' -mode native cql3 -rate threads=100 -node $SERVER

결과는 다음과 같다.

ScyllaDB 평균 TPS

   읽기 : 249, 쓰기 : 255

Cassandra 평균 TPS

   읽기 : 114, 119


결과를 종합해서 살펴보면 다음과 같다.

 

 ScyllaDB

Cassandra 

쓰기

 20636

 19789

읽기

 236

150

읽기/쓰기 

 230/234

 114/119

<표 1. VirtualBox에서의 benchmark결과>

ScyllaDB가 아주 약간의 성능 향상이 보여지기는 했다. 그리고 특히 읽기/쓰기 테스트에서는 Cassandra에서만 ReadTimeoutException이 발생해서 Thread 수를 줄여나가야 했다.


아무래도 테스트 환경이 VirtualBox이고 매우 낮은 사양의 VM이라서 이런 결과가 나온 것일 수 있다. 특히 VM마다 CPU Core를 하나만 할당했기 때문에 Request당 하나의 CPU를 할당하는 ScyllaDB는 좀 더 불리한 상황에서 테스트를 진행한 것이다.

아무튼 ScyllaDB가 Cassandra보다 약간 빠른 성능을 보여주는 것은 확인되었다. 다음번에는 사내 개발장비에서 테스트를 진행해보도록 할 계획이다.



Posted by micacute