Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

How to use redis well

Redis, Redis Failover, Redis Monitoring

  • Inicia sesión para ver los comentarios

How to use redis well

  1. 1. Redis 잘 쓰는 법(?) charsyam@naver.com
  2. 2. 오늘의 주제 Redis 잘 쓰는 법(?)
  3. 3. 오늘의 주제 Redis 잘 쓰는 법(?) 저도 잘 쓰고 싶습니다만....
  4. 4. Redis 성능 초당 10~15만 get/set 가능
  5. 5. Redis 성능 초당 10~15만 get/set 가능 (cpu에 영향 받음)
  6. 6. Redis는!!! Single Threaded
  7. 7. CaseStudy 가정 ● 사용자 랭킹 별로 대전 상대를 추천 ● 점수별로 등급이 존재 요구사항 ● 사용자 랭킹 별로 대전 상대를 추천 ● 그러나 전체 등급에서 골로루 유저들을 뽑아서 추천해줘야 한다.
  8. 8. Redis를 쓴다면? 어떤 Collection을 써야할까요?
  9. 9. Redis를 쓴다면? 어떤 Collection을 써야할까요? Sorted Set
  10. 10. Redis를 쓴다면? ZRANGEBYSCORE
  11. 11. ZRANGEBYSCORE를 쓴다면? 1. 현재 유저 score를 모두 가져온다. 2. 등급별로 유저들을 나눈 다음 각 등급별로 유저들을 적절히 매칭 상대로 추가해준다.
  12. 12. ZRANGEBYSCORE 잘 동작할까요?
  13. 13. ZRANGEBYSCORE Sorted Set에 100명이 있다면? Sorted Set에 10000명이 있다면? Sorted Set에 1000000명이 있다면?
  14. 14. 그러면 어떻게? 1. 여러 개의 적절한 개수를 가지는 여러개의 Sorted Set 으로 나누거나 2. 여러 개의 나눌 수 있는 커맨드로 각 구간 별로 부르기
  15. 15. Redis Failover
  16. 16. Redis Failover Sentinel?
  17. 17. Redis Failover Sentinel? 기본적으로 Pub/Sub이 가능해야 함
  18. 18. Redis Failover 좀 있어보이는 방법
  19. 19. Redis Failover Coordinator류의 사용
  20. 20. Zookeeper #1 Redis #1 Redis #2 Zookeeper Current Redis: Redis #1 Server #1 Server #2 Server #3 User or Event
  21. 21. Zookeeper #2 Redis #1 Redis #2 Zookeeper Current Redis: Redis #2 Server #1 Server #2 Server #3 Change Zookeeper value User or Event
  22. 22. Zookeeper #3 Redis #1 Redis #2 Zookeeper Current Redis: Redis #2 Server #1 Server #2 Server #3 Event : Zookeeper send Current Redis is changed User or Event
  23. 23. Zookeeper #4 Redis #1 Redis #2 Zookeeper Current Redis: Redis #2 Server #1 Server #2 Server #3 Zookeeper 로 부터읽어감 User or Event
  24. 24. Spring Config #1 Redis #1 Redis #2 Spring Config Current Redis: Redis #1 Server #1 Server #2 Server #3 User
  25. 25. Spring Config #2 Redis #1 Redis #2 Spring Config Current Redis: Redis #2 Server #1 Server #2 Server #3 User Change Spring Config value
  26. 26. Spring Config #3 Redis #1 Redis #2 Spring Config Current Redis: Redis #2 Server #1 Server #2 Server #3 User Event(User Send) Current Redis is changed
  27. 27. Spring Config #4 Redis #1 Redis #2 Spring Config Current Redis: Redis #2 Server #1 Server #2 Server #3 User Event(User Send) Current Redis is changed
  28. 28. Redis Failover 그럼 저런 기능이 없다면?
  29. 29. Redis Failover DNS or VIP
  30. 30. DNS or VIP #1 Redis #1 Redis #2 Server #1 Server #2 Server #3 Connect to : account-service-redis.service.net. account-service-redis.service.net
  31. 31. DNS or VIP #2 Redis #2 Server #1 Server #2 Server #3 Connect to : account-service-redis.service.net. Redis #1 장애
  32. 32. DNS or VIP #3 Redis #2 Server #1 Server #2 Server #3 Connect to : account-service-redis.service.net. DNS나 VIP를 Redis #2가 account-service-redis.service.net 을 가지도록 전환 account-service-redis.service.net
  33. 33. DNS or VIP #4 Redis #2 Server #1 Server #2 Server #3 Connect to : account-service-redis.service.net. 클라이언트 측면에서 바뀌는 것이 하나도 없음. account-service-redis.service.net
  34. 34. Monitoring
  35. 35. Monitoring Factors 1. 메모리 RSS(Resident set size) 가 used memory 보다 중요. 2. CPU 사용률도 중요함. 3. Swap 이 생기면 안됨.
  36. 36. Current Connection 수의 변화 1. 계속 많은 수가 Connection 을 맺고 끊으면 성능에 큰 영향을 미침(한번 맺고, 계속 재활용해야함) 2. 반대로, CPU 사용량이 높거나 해서 timeout으로 컨넥션이 자주 바뀌는 경우도 발생 a. 2번으로 인해서 1번이 초래해서 성능이 더 안좋아지는 경우도 자주 발생
  37. 37. CPU 사용률이 높다면(1) 1. 정말 트래픽이 많은 경우 a. CPU에 영향을 받으므로 더 빠른 CPU를 쓰는 것도 방법 2. 특정 key 연산등으로 hot key가 발생하는 경우 a. hot key가 성능을 떨어뜨리는 것이 아니라, 과도하게 해당 키의 서버에 과도하게 트래픽이 몰리게 되는 경우
  38. 38. CPU 사용률이 높다면(2) 1. Monitor 명령을 사용하여 특정키의 패턴이 많은지 샘플링 2. CPU 사용량이 너무 높으면 도리어 장애를 일으키는 요인이 되기도 함.
  39. 39. 감사합니다.

×