Weitere ähnliche Inhalte Ähnlich wie Cache governance (20) Mehr von DaeMyung Kang (20) Cache governance7. 결론
M
A
R
자료구조
String
K/V
Set/List
B+ Tree
Set/List
Sorted Set
MAX Size
Chunk
1MB
Chunk
1MB
512MB
복제
X
X
O
저장
X
X
O
Cluster
3rd
party
자체
Redis
Cluster
메모리
관리
slab
slab
malloc
Client
1
3
1 8. 자료구조
M
A
R
자료구조
String
K/V
Set/List
B+ Tree
Set/List
Sorted Set 10. Arcus
Set/list/B+ Tree 지원
Collection 별 아이템 수 제한이 존재
Collection 별 개별 아이템 크기 제한이 존재(B+ Tree item은 4096 이하만…)
overflow 등에 대한 정책 결정 가능 13. 데이터 Size
M
A
R
MAX Size
Chunk
1MB
Chunk
1MB
512MB 17. Replication
Redis Diskless Repl >= 2.8.18
Redis의 Repl은 위험할 수도 있다.
(fork 이슈)
Diskless Repl 이 생기면서 EC2 등에서 EBS를 사용할 때의 네트웍 부하를 줄일 수 있다. 28. Redis Cluster
Redis Cluster
Client
Redis
Redis
Redis
Gossip
Slot 1
Slot 2
Slot 3
Slot3 is Redis3 35. Arcus
서버 목록 관리를 Zookeeper 사용
빌드시에 Zookeeper를 사용하지 않도록 하면 일반 memcache 처럼 사용가능 37. 메모리 관리?
Redis 는 매번 메모리 할당을 하므로, 부하가 많을 경우, 튀는 경우가 발생.
실제로 Redis -> Arcus 는 전환시에 별 문제가 없었지만, Arcus -> Redis 는 전환시에 튀는 경우가 발생 39. Slab Allocator
Slab 0
Slab 1
Slab 2
…
…
Slab N
1mb
1mb
1mb
1mb
1mb
1mb
1mb
1mb
Slab Page List
Free Item List 40. LRU List
Slab 0
Slab 1
Slab 2
…
…
Slab N
Head
Slab 0
Slab 1
Slab 2
…
…
Slab N
Tail
Item
Item
Item
밑에 있는 아이템일 수록 사용한지 오래됨. 41. Eviction
Memcached는 slab별 LRU 만 지원
Redis 는 LRU, Random 등을 지원
Twitter에서 사용하는 Twemcache 의 경우는 Eviction 전략만 추가한 Memcached의 변종? 42. LRU 관리
Memcached는 이전에는 LRU 관리에 이슈가 있었음.
LRU List를 뒤에서 부터 검색해서 메모리를 확보함
다양한 Expire 값을 설정하면, Expire가 짧은 아이템이 앞으로가, 뒤에서 찾지못하고 메모리 할당의 가능성이 큼. 43. LRU 관리
Arcus는 뒤에서 부터 LRU List를 검색하더라도, 처음까지 전부 체크함.
모두 한번에 체크하는 것은 아니라, 매 텀마다, 이전 기록을 바탕으로 검색 44. LRU 관리
최근 버전의 Memcache 는 LRU_Crawler라는 스레드가 추가됨.
Memcached는 독립 스레드에서, Arcus 는 해당 LRU동작을 확장 45. LRU 관리
Redis 도 매 커맨드가 실행되기 전에 약 100여개 정도 랜덤하게 Eviction 정책에 따라서 Key를 지움. 46. 메모리 파편화
Memcached는 메모리 관리를 직접하므로 문제가 덜함.
Redis 는 Jemalloc등을 사용하지만, 메모리 할당을 직접 처리할 수 없으므로
메모리 파편화가 심해질 수 있다. 48. 메모리 파편화
Memcache는 메모리를 자신이 관리하므로, 실제 메모리 부족 시, 기존 데이터를 지울 수 있다.
Redis는 Jemalloc에서는 메모리 Max를 알지 못하므로, 그냥 새로운 Chunk를 할당하게 된다. 50. 클라이언트
Arcus는 신뢰할 만한 클라이언트 라이브러리가 C/Java 두 가지 뿐임.
Memcached 와 Redis는 다양한 클라이언트가 존재. 51. 다시 결론
M
A
R
자료구조
String
K/V
Set/List
B+ Tree
Set/List
Sorted Set
MAX Size
Chunk
1MB
Chunk
1MB
512MB
복제
X
X
O
저장
X
X
O
Cluster
3rd
party
자체
Redis
Cluster
메모리
관리
slab
slab
malloc
Client
1
3
1 54. 그외 이슈들
캐시는 얼마나 둬야 할까? 또는 사이징?
Multiget Hole 문제
로컬 캐쉬 55. 캐시 사이징
최근의 추세는 캐시빨…
데이터량, 처리 속도등을 고려해야 함
캐시 서버가 몇대까지 죽어도 괜찮을까?
장비가 많은것 보다는 좋은 장비에 여러 개 띄우는게 더 유리… 56. 로컬 캐쉬
보통은 Remote Cache
Network, Latency, 성능등의 이슈
적절한 로컬 캐쉬를 사용하면 유리
Expire Time을 짧게 가져감 57. Multiget Hole
친구의 정보를 가져올 때…
캐시 서버가 1대에서 3대로 늘면…
정말 캐시 서버의 부하는 1/3일까요?
내 친구 모두를 가져오면…