23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
이전 포스팅에서는 레디스를 단일모드 복제모드 그리고 클러스터 모드로 설치 해보았습니다.
[이것이 레디스다 #1] 레디스 단일모드 및 복제모드 설치
이번 포스팅에서는 앞서 설치한 각 레디스의 성능 테스트 방법을 알아보겠습니다.
대부분의 개발자들은 레디스를 사용하는데 큰 문제가 없습니다. 설치 및 사용법이 너무 간단하기 때문이죠.
조금 다른 관점에서 생각해보도록 하죠.
내가 개발한 코드가 얼마나 많은 요청을 처리할 수 있을지 궁금하지 않으신가요?
보통 이런 상황에서 성능 테스트에 대한 이야기가 빠지지 않고 나옵니다.
이 포스팅에서는 레디스에 대한 이야기를 진행하고 있으므로 애플리케이션 성능 테스트가 아닌
레디스 성능 테스트에 대해서 살펴보도록 하겠습니다.
레디스의 성능 테스트를 진행하는 방법은 여러가지가 있지만 가장 간단한 방법부터 살펴보도록 하겠습니다.
레디스를 설치하면 따라오는 redis-benchmark 프로그램입니다.
아주 다양한 케이스에 대한 성능 테스트는 불가하지만 아주 쉽게 개별 명령에 대한 성능 테스트를 진행해 볼 수 있습니다.
이 결과를 바탕으로 실제 상황에서 처리 가능한 성능을 유추해 볼 수 있죠.
그럼 테스트를 진행해보죠.
가장 먼저 레디스 단일 구성에 대한 테스트를 진행하겠습니다.
이전 포스팅에서 레디스 단일 모드는 192.168.56.104:6379 포트로 설치 했지만 이번에는
192.168.56.105:6379 포트에 설치된 서버에서 테스트를 진행해보겠습니다.
VM을 다시 설치했더니 IP가 192.168.56.105로 변경되었습니다.
redis-benchmark 프로그램은 redis-server 파일이 있는 위치에 같이 존재합니다.
그리고 실행은 ./redis-benchmark 명령을 그냥 실행하면 기본값으로 성능 테스트를 진행합니다.
아래는 ./redis-benchmark 아무런 옵션 없이 실행한 결과입니다.
[vagrant@vslin-box single]$ ./redis-benchmark
====== PING_INLINE ======
100000 requests completed in 1.16 seconds
50 parallel clients
3 bytes payload
keep alive: 1
host configuration "save": 3600 1 300 100 60 10000
host configuration "appendonly": no
multi-thread: no
Latency by percentile distribution:
0.000% <= 0.079 milliseconds (cumulative count 2)
50.000% <= 0.287 milliseconds (cumulative count 51593)
75.000% <= 0.391 milliseconds (cumulative count 76174)
87.500% <= 0.487 milliseconds (cumulative count 88119)
93.750% <= 0.575 milliseconds (cumulative count 93769)
96.875% <= 0.679 milliseconds (cumulative count 96898)
98.438% <= 0.815 milliseconds (cumulative count 98446)
99.219% <= 0.991 milliseconds (cumulative count 99227)
99.609% <= 1.191 milliseconds (cumulative count 99620)
99.805% <= 1.471 milliseconds (cumulative count 99806)
99.902% <= 1.551 milliseconds (cumulative count 99908)
99.951% <= 1.647 milliseconds (cumulative count 99958)
99.976% <= 1.679 milliseconds (cumulative count 99977)
99.988% <= 1.735 milliseconds (cumulative count 99988)
99.994% <= 1.783 milliseconds (cumulative count 99994)
99.997% <= 1.799 milliseconds (cumulative count 99997)
99.998% <= 1.847 milliseconds (cumulative count 99999)
99.999% <= 1.879 milliseconds (cumulative count 100000)
100.000% <= 1.879 milliseconds (cumulative count 100000)
Cumulative distribution of latencies:
0.027% <= 0.103 milliseconds (cumulative count 27)
17.963% <= 0.207 milliseconds (cumulative count 17963)
56.395% <= 0.303 milliseconds (cumulative count 56395)
78.619% <= 0.407 milliseconds (cumulative count 78619)
...위와 같이 각 테스트간의 중간 이력이 출력되므로 해당 내용을 제거해보겠습니다.
./redis-benchmark 옵션 중 q 옵션을 지정하면 다음과 같이 각 명령당 결과만 출력됩니다.
[vagrant@vslin-box single]$ ./redis-benchmark -q
PING_INLINE: 85763.29 requests per second, p50=0.287 msec
PING_MBULK: 81632.65 requests per second, p50=0.303 msec
SET: 81168.83 requests per second, p50=0.303 msec
GET: 84245.99 requests per second, p50=0.295 msec
INCR: 78308.54 requests per second, p50=0.327 msec
...redis-benchmkark명령에서 자주 사용하는 옵션은 다음과 같습니다.
p : 접속하고자하는 Redis port
h : 접속하고자하는 Redis host
d : 성능 테스트시 Redis에 저장할 개별 데이터의 크기
t : 성능 테스트를 진행할 명령어 목록
위 옵션들을 조절하여 레디스 단일 구성 서버에 성능 테스트를 진행해 보겠습니다.
단일 구성 레디스는 6379번 포트에 구성되어 있으니 아래 명령으로 192.168.56.105:6379에 데이터를 1Kb씩 넣는 테스트를 진행하겠습니다.
[vagrant@vslin-box single]$ ./redis-benchmark -q -p 6379 -h 192.168.56.105 -d 1024
PING_INLINE: 88028.16 requests per second, p50=0.279 msec
PING_MBULK: 83263.95 requests per second, p50=0.295 msec
SET: 78554.59 requests per second, p50=0.319 msec
GET: 82576.38 requests per second, p50=0.287 msec
INCR: 83263.95 requests per second, p50=0.295 msec
LPUSH: 82508.25 requests per second, p50=0.311 msec
RPUSH: 78369.91 requests per second, p50=0.327 msec
LPOP: 81632.65 requests per second, p50=0.303 msec
RPOP: 82850.04 requests per second, p50=0.303 msec
SADD: 84245.99 requests per second, p50=0.303 msec
HSET: 73800.73 requests per second, p50=0.367 msec
...모든 테스트가 완료되기까지 약 5분이 소요되었고 결과는 위와 같습니다.
테스트 결과로 미루어 약 초당 8만건 정도의 Redis 명령을 처리할 수 있습니다.
이제 여러분이 설치한 레디스의 성능을 단편적으로나마 확인할 수 있습니다.
이 테스트는 레디스 단일 노드에서 테스트한 결과이므로 복제모드와 클러스터 모드에서 테스트를 해보는게 순서입니다.
그러나 레디스 복제모드는 단일모드와 크게 아키텍처상 차이가 없으므로 레디스 복제모드에 대한 테스트는 건너 뛰도록 하겠습니다.
레디스 클러스터는 입력된 키의 이름에 따라 저장될 노드가 결정됩니다.
그러므로 성능 테스트를 진행할때 위와 같은 아키텍처를 고려한 상태로 테스트 결과를 확인해야 합니다.
그럼 진행해보도록 하죠.
redis-benchmark 도구는 레디스 클러스터에 대한 성능 테스트도 지원합니다.
옵션에 --cluster를 지정하면 클러스터 모드에 대한 테스트가 활성화 됩니다.
그럼 클러스터 192.168.56.105에 설치된 17001~17006번의 클러스터에 테스트를 진행해보도록 하죠.
클러스터에 대한 테스트는 포트를 하나만 지정하더라도 redis-benchmkar 프로그램이 알아서 클러스터를 찾아서 테스트를 진행합니다.
그러므로 다음과 같은 명령으로 테스트 가능합니다. 앞선 테스트 옵션과의 차이는 포트번호와 cluster 옵션입니다.
[vagrant@vslin-box cluster]$ ./redis-benchmark -q -p 17001 -h 192.168.56.105 -d 1024 --cluster
[vagrant@vslin-box cluster]$ ./redis-benchmark -q -p 17001 -h 192.168.56.105 -d 1024 --cluster
Cluster has 3 master nodes:
Master 0: f291398bb1141955bbf5adb1018920c1acb2e681 192.168.56.105:17003
Master 1: eaebc2282fa3d9c1b485d752cafbc48dacc32e8a 192.168.56.105:17002
Master 2: 28345a60fc49821a6bea5afe90566a40d88f3fcd 192.168.56.105:17001
PING_INLINE: 132978.73 requests per second, p50=0.167 msec
PING_MBULK: 132978.73 requests per second, p50=0.175 msec
SET: 79554.50 requests per second, p50=0.303 msec
GET: 132978.73 requests per second, p50=0.191 msec
INCR: 133155.80 requests per second, p50=0.231 msec
LPUSH: 79744.82 requests per second, p50=0.343 msec
RPUSH: 47214.35 requests per second, p50=0.447 msec
...위 테스트 결과로 미루어 보면 단일 노드에 대한 성능보다 클러스터에 대한 성능이 더 높이 나옵니다.
이 차이는 앞서 설명드린 대로 입력된 키의 이름에 따라 저장되는 노드가 달라지므로 대부분의 케이스에서 더 높은 성능을 나타냅니다.
단 차이점은 6개의 노드를 하나의 서버에 설치 했기 때문에 CPU 문제와 각 명령을 File로 저장하는 옵션이 활성화되어 있어 더 낮은 성능을 보이는 케이스가 있습니다.
하지만 실제 운영 상황 등 대부분의 케이스에서는 클러스터의 성능이 단일 노드보다 높습니다.
이제 여러분은 레디스의 성능 테스트를 진행할 수 있는 능력을 얻게 되셨습니다.
다음 포스팅에서는 다른 도구를 사용하여 레디스의 성능을 테스트하는 방법을 살펴보겠습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.