2011-07-29 5 views
3

나는 Redis에서 바퀴를 재발 명하고 일부 통계를 저장하려고합니다.HINCRBY 통화가 얼마나 호의적입니까?

나는 열심히 모으고 모든 새 이벤트가 발생할 때마다 모든 관련 카운터를 증가시키는 것을 고려하고 있습니다 (초당 여러 번 발생할 수 있음).

이벤트 당 5 ~ 50 번 같은 HINCRBY을 호출해야하며, 처음에는 초당 5-100 개의 이벤트를 목표로합니다.

Redis에는 너무 많은가요? 만약 그렇다면, 몇 가지 하한값 (이벤트 당 10 회, 하나만?)을 목표로해야합니까? 그렇지 않은 경우이 매개 변수 중 어떤 것으로도 확장 할 수 있습니까? (1000 이벤트 - 10000으로 확장하는 데 더 관심이 있습니다)?

분명히 쓰레기도 수집해야합니다. 모든 카운터에 동일한 해시가 있기 때문에 모든 이벤트에 필요한 모든 해시에 대해 EXPIRE을 호출하여이 작업을 수행 할 계획입니다 (카운터가 2-5 번 이상 없음). 괜찮 니?

답변

4

너트. 하드웨어가 작동하는 경우 Redis는 부하를 처리 할 수 ​​있습니다. 당연히 프로토 타입을 작성하고 최대한 빨리 시도해야하지만 이것은 분명히 Redis가 처리 할 수 ​​있어야합니다.

이미 스케일링에 대해 생각해 보시기 바랍니다. 스케일링 문제가 문제가 될 때까지 기다리는 것보다 훨씬 쉽게 해결할 수 있습니다. Redis는 (아직) 클러스터링 솔루션을 가지고 있지 않으며 RAM (및 하나의 CPU)으로 제한되므로 궁극적으로 더 많은 서버로 확장 할 수있는 방법이 필요합니다.

이렇게하는 방법은 클라이언트 측 샤딩입니다. 즉, 키를 해시하고 서버가 어느 서버인지 확인한 다음 해당 서버와 대화를 나누십시오 (분명히 하나 이상의 키를 사용하는 작업이 매우 힘들어집니다. , 당신은 그 주위를 설계해야 할 수도 있습니다). Ruby 클라이언트는 기본적으로 지원되지만, 다른 드라이버 (and Salvatore has a guide, too)를 사용하는 경우 자신을 수행하는 것이 어렵지 않습니다 (불편 함).

동일한 시스템 (CPU 당 하나 또는 이와 유사한 것)에서 실행되는 2 개 또는 4 개의 Redis 인스턴스부터 시작하여 중복성 및 장애 극복을 위해 슬레이브를 실행하는 다른 시스템 (두 개의 마스터 및 각각의 슬레이브를 실행할 수도 있습니다 섬기는 사람). 이렇게하면 성장해야하는 경우 인스턴스를 다른 서버로 이전하는 것이 너무 어렵지 않습니다. 4 개의 인스턴스가 있다면 4 개의 머신으로 옮길 수있을 것입니다. 왜냐하면 새로운 머신에 슬레이브를 설정하고, 동기화를 기다렸다가 마스터로 사용할 때까지 기다려야 만합니다. 네 가지 인스턴스가 없으면 새 시스템으로 이동하는 것은 수동으로 키를 이동하는 것을 의미합니다. 이는 많은 작업이 될 수 있습니다.

관련 문제