redis on aws
TRANSCRIPT
Redis on AWS 내 Redis가 왜 AWS 느리다고 느껴질까?
발표자 소개
• 강대명
• 카카오스토리 개발
• 잉엽니다.
• Redis Contributor
솔직하게… Frankly Speaking…
카카오는 AWS 거의 안써요.
그런데… 왜…
개인적으로는 AWS를 공부용으로만 씁니다.
Spot을 사랑합니다.
발표 내용은 예전에 뽀록…
꿍님이 5분만 해도 된다고 해서…
날로 먹겠습니다.
오늘의 주제…
왜 Redis가 AWS에서는 느리다고 느껴질까?
Redis Latency Spikes
이상하게 응답이 느릴 때가 존재…
그런데 AWS 에서는 더 자주 느린 거 같네…
먼저 결론…
결론
• AWS라고 특별히 느릴 껀 없음.
– PV 대신에 HVM 쓰면됨
– 디스크 좋은 거 써야함…
– VPC 쓰는게 조금 더 좋을수도(이건 모든 클라우드가…)
• 나머지는 안 지키면 아무거나 다 느림
이제 끝…
하기에는 증거를 밝히고…
PV vs HVM
AWS 는 Xen 을 사용
두 개의 차이는 잘 모릅니다.
PV vs HVM
• PV
– Paravirtualization 반가상화
• HVM
– Hardware assisted Virtual Machine
PV vs HVM
PV vs HVM
• Xen 에서 PV 일 경우 fork 시에 page tables을 복사하는데 부하가 걸림…
– 왜 걸리는지는 묻지 말아주세요. PV에서 그냥 느립니다.
• Page tables의 사이즈에 영향을 받음.
• 실제 머신의 물리 메모리의 크기 보다는 레디스가 사용하는 Page 에 영향을 받음
PV vs HVM (m3.xlarge) - ms
메모리 PV HVM
0 0.5 0.1
608MB 143 5
1.54G 352 13
2.31G 517 20
4.62G 1208 안재봄
6.16G 1600 안재봄
fork 20x~30x 차이가 남
OpenStack(KVM) 물리 서버
HVM과 유사
이게 왜 문제임?
Base Knowledge
Redis는 싱글 스레드
키가 몇 백만개 있는 서버에서
Key * 한번 실행해보세요.
망합니다.
Flushall 한번 해보세요.
역시 망하죠…
Redis 는 싱글 스레드…
한번에 하나의 작업만 처리합니다.
그런데 fork 에서 시간이 1초가 더 걸리면?
메모리 사용량이 적을 때는 큰 문제 없음.
디스크?
EBS는 네트웍 스토리지…
그냥 로컬에 쓰면
인스턴스 재시작 하면 사라짐
그런데 디스크에 자주 쓰면…
망합니다.
대부분 레디스를 디폴트로 씀…
SAVE 900 1 SAVE 300 10
SAVE 60 10000
RDB는 마스터에서 안쓰는게
꼭 써야하면 슬레이브에서
이렇게 하고 메모리 많이 쓰면.
물리 서버 써도 망합니다.
Redis는 2.8.13 뒤에껄…
Elastic Cache의 Redis는?
2.8.19로 선택하세요.
왜???
Jemalloc 3.6.0
메모리 사용량과 파편화가 줌
아니면 Redis Labs 써도…
이게 많이 고쳐서 메모리 덜 먹음…
이 변화가 지금 Redis Unstable에 들어가고 있음
SADD RedisLab Antirez
다시 결론…
결론
• AWS라고 특별히 느릴 껀 없음.
– PV 대신에 HVM 쓰면됨
– 디스크 좋은 거 써야함…
– VPC 쓰는게 조금 더 좋을수도(이건 모든 클라우드가…)
• 수행 시간이 긴 명령 쓰지 마셈.
• 2.8.13 이후로… 신상이 좋음
감사합니다.