SlideShare a Scribd company logo
1 of 57
Download to read offline
CACHE Governance 
charsyam@naver.com
오늘의 주제 
캐시의 특성을 비교한다. 
적절한 캐시를 선택한다.
대상 
Memcached 
Arcus 
Redis
예외 
다른 캐시들은 비교하지 않습니다.
이유 
안 써봐서, 잘 모릅니다.
결론
결론 
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
자료구조 
M 
A 
R 
자료구조 
String 
K/V 
Set/List 
B+ Tree 
Set/List 
Sorted Set
Memcached 
Key/Value 만 지원 
Atomic 한 incr/decr 지원
Arcus 
Set/list/B+ Tree 지원 
Collection 별 아이템 수 제한이 존재 
Collection 별 개별 아이템 크기 제한이 존재(B+ Tree item은 4096 이하만…) 
overflow 등에 대한 정책 결정 가능
Arcus 
Prefix별 삭제 기능이 있음
Redis 
Set/list/Sorted Set 지원 
Collection에 대한 특별한 제약이 없음 
HyperLogLog는 매우 파워풀…
데이터 Size 
M 
A 
R 
MAX Size 
Chunk 
1MB 
Chunk 
1MB 
512MB
데이터 Size 
Memcached는 Key + Value Size 
Chunk의 크기가 Item의 최대 크기 
Redis는 Key, Value 따로 따로
Replication 
M 
A 
R 
복제 
X 
X 
O
Replication 
Repcached. 
Mcrouter(facebook). 
Arcus도 준비중.
Replication 
Redis Diskless Repl >= 2.8.18 
Redis의 Repl은 위험할 수도 있다. 
(fork 이슈) 
Diskless Repl 이 생기면서 EC2 등에서 EBS를 사용할 때의 네트웍 부하를 줄일 수 있다.
Persistent 
M 
A 
R 
저장 
X 
X 
O
Persistent 
Redis: AOF, RDB 
AOF, RDB는 모두 전체 데이터 
AOF, RDB는 서로 상관없는 저장방식
Cluster 
M 
A 
R 
Cluster 
3rd 
party 
자체 
Redis 
Cluster
Cluster 
Redis Cluster는 아직 검증이 안됬음. 
Arcus Cluster는 Zookeeper와 연동 
Memcache는 Moxi라는 것이 존재
3rd Cluster 
Redis/Memcache 를 위한 
Twemproxy 라는 것도 존재. 
모든 명령을 지원하지 않음. 
- ex (인터섹션등의 콜렉션 간 명령)
3rd Cluster 
Twemproxy를 쓸 때, python- memcached Library를 사용하면 
delete_multi 호출이 제대로 안됨.
3rd Cluster 
Redis/Memcache with Proxy 
Client 
Proxy 
R/M 
R/M 
R/M 
R/M 
Proxy
3rd Cluster 
Proxy를 거치면서 Hop 이 존재, 
Latency가 추가된다.
Redis Cluster 
Redis Cluster 
Client 
Redis 
Redis 
Redis 
Gossip 
Slot 1 
Slot 2 
Slot 3
Redis Cluster 
Redis Cluster 
Client 
Redis 
Redis 
Redis 
Gossip 
Slot 1 
Slot 2 
Slot 3 
Set A 123
Redis Cluster 
Redis Cluster 
Client 
Redis 
Redis 
Redis 
Gossip 
Slot 1 
Slot 2 
Slot 3 
Slot3 is Redis3
Redis Cluster 
Redis Cluster 
Client 
Redis 
Redis 
Redis 
Gossip 
Slot 1 
Slot 2 
Slot 3 
Set A 123
Redis Cluster 
Redis Cluster 
Client 
Redis 
Redis 
Redis 
Gossip 
Slot 1 
Slot 2 
Slot 3 
OK
Redis Cluster 
Redis Cluster는 라이브러리 지원이 필요함. 현재 Ruby/Jedis 정도만 지원.
Arcus 
Arcus Cluster with Zookeeper 
Client 
Arcus 
Arcus 
Arcus 
ZooKeeper
Arcus 
Arcus Cluster with Zookeeper 
Client 
Arcus 
Arcus 
Arcus 
ZooKeeper
Arcus 
Arcus Cluster with Zookeeper 
Client 
Arcus 
Arcus 
Arcus 
ZooKeeper 
Arcus2 is dead
Arcus 
서버 목록 관리를 Zookeeper 사용 
빌드시에 Zookeeper를 사용하지 않도록 하면 일반 memcache 처럼 사용가능
메모리 관리? 
M 
A 
R 
메모리 
관리 
slab 
slab 
malloc
메모리 관리? 
Redis 는 매번 메모리 할당을 하므로, 부하가 많을 경우, 튀는 경우가 발생. 
실제로 Redis -> Arcus 는 전환시에 별 문제가 없었지만, Arcus -> Redis 는 전환시에 튀는 경우가 발생
메모리 관리? 
Memcached/Arcus slab등을 통해서 잦은 메모리 할당이 없음.
Slab Allocator 
Slab 0 
Slab 1 
Slab 2 
… 
… 
Slab N 
1mb 
1mb 
1mb 
1mb 
1mb 
1mb 
1mb 
1mb 
Slab Page List 
Free Item List
LRU List 
Slab 0 
Slab 1 
Slab 2 
… 
… 
Slab N 
Head 
Slab 0 
Slab 1 
Slab 2 
… 
… 
Slab N 
Tail 
Item 
Item 
Item 
밑에 있는 아이템일 수록 사용한지 오래됨.
Eviction 
Memcached는 slab별 LRU 만 지원 
Redis 는 LRU, Random 등을 지원 
Twitter에서 사용하는 Twemcache 의 경우는 Eviction 전략만 추가한 Memcached의 변종?
LRU 관리 
Memcached는 이전에는 LRU 관리에 이슈가 있었음. 
LRU List를 뒤에서 부터 검색해서 메모리를 확보함 
다양한 Expire 값을 설정하면, Expire가 짧은 아이템이 앞으로가, 뒤에서 찾지못하고 메모리 할당의 가능성이 큼.
LRU 관리 
Arcus는 뒤에서 부터 LRU List를 검색하더라도, 처음까지 전부 체크함. 
모두 한번에 체크하는 것은 아니라, 매 텀마다, 이전 기록을 바탕으로 검색
LRU 관리 
최근 버전의 Memcache 는 LRU_Crawler라는 스레드가 추가됨. 
Memcached는 독립 스레드에서, Arcus 는 해당 LRU동작을 확장
LRU 관리 
Redis 도 매 커맨드가 실행되기 전에 약 100여개 정도 랜덤하게 Eviction 정책에 따라서 Key를 지움.
메모리 파편화 
Memcached는 메모리 관리를 직접하므로 문제가 덜함. 
Redis 는 Jemalloc등을 사용하지만, 메모리 할당을 직접 처리할 수 없으므로 
메모리 파편화가 심해질 수 있다.
메모리 파편화
메모리 파편화 
Memcache는 메모리를 자신이 관리하므로, 실제 메모리 부족 시, 기존 데이터를 지울 수 있다. 
Redis는 Jemalloc에서는 메모리 Max를 알지 못하므로, 그냥 새로운 Chunk를 할당하게 된다.
클라이언트 
M 
A 
R 
Client 
1 
3 
1
클라이언트 
Arcus는 신뢰할 만한 클라이언트 라이브러리가 C/Java 두 가지 뿐임. 
Memcached 와 Redis는 다양한 클라이언트가 존재.
다시 결론 
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
결론 
서비스에 적합한 걸 적절히 골라쓰자. 
실버 불렛 따위는 없음.
Thank you!
그외 이슈들 
캐시는 얼마나 둬야 할까? 또는 사이징? 
Multiget Hole 문제 
로컬 캐쉬
캐시 사이징 
최근의 추세는 캐시빨… 
데이터량, 처리 속도등을 고려해야 함 
캐시 서버가 몇대까지 죽어도 괜찮을까? 
장비가 많은것 보다는 좋은 장비에 여러 개 띄우는게 더 유리…
로컬 캐쉬 
보통은 Remote Cache 
Network, Latency, 성능등의 이슈 
적절한 로컬 캐쉬를 사용하면 유리 
Expire Time을 짧게 가져감
Multiget Hole 
친구의 정보를 가져올 때… 
캐시 서버가 1대에서 3대로 늘면… 
정말 캐시 서버의 부하는 1/3일까요? 
내 친구 모두를 가져오면…

More Related Content

What's hot

BlueStore: a new, faster storage backend for Ceph
BlueStore: a new, faster storage backend for CephBlueStore: a new, faster storage backend for Ceph
BlueStore: a new, faster storage backend for CephSage Weil
 
Let's talk about Garbage Collection
Let's talk about Garbage CollectionLet's talk about Garbage Collection
Let's talk about Garbage CollectionHaim Yadid
 
Introducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data ScienceIntroducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data ScienceDatabricks
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우if kakao
 
Everything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @TwitterEverything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @TwitterAttila Szegedi
 
Aerospike Architecture
Aerospike ArchitectureAerospike Architecture
Aerospike ArchitecturePeter Milne
 
Accelerate spring boot application with apache ignite
Accelerate spring boot application with apache igniteAccelerate spring boot application with apache ignite
Accelerate spring boot application with apache igniteYEON BOK LEE
 
Hive Data Modeling and Query Optimization
Hive Data Modeling and Query OptimizationHive Data Modeling and Query Optimization
Hive Data Modeling and Query OptimizationEyad Garelnabi
 
Introduction to Spark Streaming
Introduction to Spark StreamingIntroduction to Spark Streaming
Introduction to Spark Streamingdatamantra
 
How to Actually Tune Your Spark Jobs So They Work
How to Actually Tune Your Spark Jobs So They WorkHow to Actually Tune Your Spark Jobs So They Work
How to Actually Tune Your Spark Jobs So They WorkIlya Ganelin
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Sung wook Kang
 
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...Databricks
 
Aerospike Architecture
Aerospike ArchitectureAerospike Architecture
Aerospike ArchitecturePeter Milne
 
Graph processing - Powergraph and GraphX
Graph processing - Powergraph and GraphXGraph processing - Powergraph and GraphX
Graph processing - Powergraph and GraphXAmir Payberah
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & FeaturesDataStax Academy
 
Scylla Summit 2022: Making Schema Changes Safe with Raft
Scylla Summit 2022: Making Schema Changes Safe with RaftScylla Summit 2022: Making Schema Changes Safe with Raft
Scylla Summit 2022: Making Schema Changes Safe with RaftScyllaDB
 
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
 Grokking Techtalk #39: How to build an event driven architecture with Kafka ... Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...Grokking VN
 

What's hot (20)

BlueStore: a new, faster storage backend for Ceph
BlueStore: a new, faster storage backend for CephBlueStore: a new, faster storage backend for Ceph
BlueStore: a new, faster storage backend for Ceph
 
Let's talk about Garbage Collection
Let's talk about Garbage CollectionLet's talk about Garbage Collection
Let's talk about Garbage Collection
 
Redis vs Aerospike
Redis vs AerospikeRedis vs Aerospike
Redis vs Aerospike
 
Introducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data ScienceIntroducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data Science
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
Everything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @TwitterEverything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @Twitter
 
Hadoop Overview kdd2011
Hadoop Overview kdd2011Hadoop Overview kdd2011
Hadoop Overview kdd2011
 
Aerospike Architecture
Aerospike ArchitectureAerospike Architecture
Aerospike Architecture
 
Accelerate spring boot application with apache ignite
Accelerate spring boot application with apache igniteAccelerate spring boot application with apache ignite
Accelerate spring boot application with apache ignite
 
Hive Data Modeling and Query Optimization
Hive Data Modeling and Query OptimizationHive Data Modeling and Query Optimization
Hive Data Modeling and Query Optimization
 
Introduction to Spark Streaming
Introduction to Spark StreamingIntroduction to Spark Streaming
Introduction to Spark Streaming
 
How to Actually Tune Your Spark Jobs So They Work
How to Actually Tune Your Spark Jobs So They WorkHow to Actually Tune Your Spark Jobs So They Work
How to Actually Tune Your Spark Jobs So They Work
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석
 
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
Deep Dive into Spark SQL with Advanced Performance Tuning with Xiao Li & Wenc...
 
Aerospike Architecture
Aerospike ArchitectureAerospike Architecture
Aerospike Architecture
 
Graph processing - Powergraph and GraphX
Graph processing - Powergraph and GraphXGraph processing - Powergraph and GraphX
Graph processing - Powergraph and GraphX
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
 
Apache Spark Architecture
Apache Spark ArchitectureApache Spark Architecture
Apache Spark Architecture
 
Scylla Summit 2022: Making Schema Changes Safe with Raft
Scylla Summit 2022: Making Schema Changes Safe with RaftScylla Summit 2022: Making Schema Changes Safe with Raft
Scylla Summit 2022: Making Schema Changes Safe with Raft
 
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
 Grokking Techtalk #39: How to build an event driven architecture with Kafka ... Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
 

Viewers also liked

java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰Sungchul Park
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개자바8 람다 나머지 공개
자바8 람다 나머지 공개Sungchul Park
 
OAuth2 - API 인증을 위한 만능도구상자
OAuth2 - API 인증을 위한 만능도구상자OAuth2 - API 인증을 위한 만능도구상자
OAuth2 - API 인증을 위한 만능도구상자Minwoo Park
 
더 빠른 웹을 위해: HTTP/2
더 빠른 웹을 위해: HTTP/2더 빠른 웹을 위해: HTTP/2
더 빠른 웹을 위해: HTTP/2EungJun Yi
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
소셜 코딩 GitHub & branch & branch strategy
소셜 코딩 GitHub & branch & branch strategy소셜 코딩 GitHub & branch & branch strategy
소셜 코딩 GitHub & branch & branch strategyKenu, GwangNam Heo
 
NodeSummit - MEAN Stack
NodeSummit - MEAN StackNodeSummit - MEAN Stack
NodeSummit - MEAN StackValeri Karpov
 
떠먹여주는 Memcached 1
떠먹여주는 Memcached 1떠먹여주는 Memcached 1
떠먹여주는 Memcached 1Jinwoo Hong
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabricandymccurdy
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용Junyi Song
 
logback 세미나 발표자료
logback 세미나 발표자료logback 세미나 발표자료
logback 세미나 발표자료JungGeun Lee
 
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Web Services Korea
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화NAVER D2
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈Minwoo Kim
 

Viewers also liked (20)

java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개자바8 람다 나머지 공개
자바8 람다 나머지 공개
 
OAuth2 - API 인증을 위한 만능도구상자
OAuth2 - API 인증을 위한 만능도구상자OAuth2 - API 인증을 위한 만능도구상자
OAuth2 - API 인증을 위한 만능도구상자
 
더 빠른 웹을 위해: HTTP/2
더 빠른 웹을 위해: HTTP/2더 빠른 웹을 위해: HTTP/2
더 빠른 웹을 위해: HTTP/2
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
About memcached
About memcachedAbout memcached
About memcached
 
Mean stack Start
Mean stack StartMean stack Start
Mean stack Start
 
소셜 코딩 GitHub & branch & branch strategy
소셜 코딩 GitHub & branch & branch strategy소셜 코딩 GitHub & branch & branch strategy
소셜 코딩 GitHub & branch & branch strategy
 
NodeSummit - MEAN Stack
NodeSummit - MEAN StackNodeSummit - MEAN Stack
NodeSummit - MEAN Stack
 
Social Dev Trend
Social Dev TrendSocial Dev Trend
Social Dev Trend
 
Data Governance
Data GovernanceData Governance
Data Governance
 
떠먹여주는 Memcached 1
떠먹여주는 Memcached 1떠먹여주는 Memcached 1
떠먹여주는 Memcached 1
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabric
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용
 
logback 세미나 발표자료
logback 세미나 발표자료logback 세미나 발표자료
logback 세미나 발표자료
 
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
 
API Design - 3rd Edition
API Design - 3rd EditionAPI Design - 3rd Edition
API Design - 3rd Edition
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
 

Similar to Cache governance

Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선NAVER D2
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmapDaeMyung Kang
 
Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shootingDaeMyung Kang
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)Hyosung Jeon
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회JaM2in
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'sung ki choi
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0sprdd
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arcNAVER D2
 
No sql 이해 및 활용 공개용
No sql 이해 및 활용 공개용No sql 이해 및 활용 공개용
No sql 이해 및 활용 공개용YOUNGGYU CHUN
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object poolingNam Hyeonuk
 
Techplanetreview redis
Techplanetreview redisTechplanetreview redis
Techplanetreview redisDaeMyung Kang
 
MariaDB Administrator 교육
MariaDB Administrator 교육 MariaDB Administrator 교육
MariaDB Administrator 교육 Sangmo Kim
 

Similar to Cache governance (20)

Redis acc 2015
Redis acc 2015Redis acc 2015
Redis acc 2015
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmap
 
Redis edu 3
Redis edu 3Redis edu 3
Redis edu 3
 
Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shooting
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012
 
NoSQL
NoSQLNoSQL
NoSQL
 
오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
 
No sql 이해 및 활용 공개용
No sql 이해 및 활용 공개용No sql 이해 및 활용 공개용
No sql 이해 및 활용 공개용
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
Redis on AWS
Redis on AWSRedis on AWS
Redis on AWS
 
Redison aws
Redison awsRedison aws
Redison aws
 
Redis 2017
Redis 2017Redis 2017
Redis 2017
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 
Techplanetreview redis
Techplanetreview redisTechplanetreview redis
Techplanetreview redis
 
MariaDB Administrator 교육
MariaDB Administrator 교육 MariaDB Administrator 교육
MariaDB Administrator 교육
 

More from DaeMyung Kang

How to use redis well
How to use redis wellHow to use redis well
How to use redis wellDaeMyung Kang
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashingDaeMyung Kang
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache keyDaeMyung Kang
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash DaeMyung Kang
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101DaeMyung Kang
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better EngineerDaeMyung Kang
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_finalDaeMyung Kang
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offsetDaeMyung Kang
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lakeDaeMyung Kang
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 

More from DaeMyung Kang (20)

Count min sketch
Count min sketchCount min sketch
Count min sketch
 
Redis
RedisRedis
Redis
 
Ansible
AnsibleAnsible
Ansible
 
Why GUID is needed
Why GUID is neededWhy GUID is needed
Why GUID is needed
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache key
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
 
Redis acl
Redis aclRedis acl
Redis acl
 
Coffee store
Coffee storeCoffee store
Coffee store
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
Number system
Number systemNumber system
Number system
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 

Cache governance

  • 2. 오늘의 주제 캐시의 특성을 비교한다. 적절한 캐시를 선택한다.
  • 4. 예외 다른 캐시들은 비교하지 않습니다.
  • 5. 이유 안 써봐서, 잘 모릅니다.
  • 7. 결론 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
  • 9. Memcached Key/Value 만 지원 Atomic 한 incr/decr 지원
  • 10. Arcus Set/list/B+ Tree 지원 Collection 별 아이템 수 제한이 존재 Collection 별 개별 아이템 크기 제한이 존재(B+ Tree item은 4096 이하만…) overflow 등에 대한 정책 결정 가능
  • 11. Arcus Prefix별 삭제 기능이 있음
  • 12. Redis Set/list/Sorted Set 지원 Collection에 대한 특별한 제약이 없음 HyperLogLog는 매우 파워풀…
  • 13. 데이터 Size M A R MAX Size Chunk 1MB Chunk 1MB 512MB
  • 14. 데이터 Size Memcached는 Key + Value Size Chunk의 크기가 Item의 최대 크기 Redis는 Key, Value 따로 따로
  • 15. Replication M A R 복제 X X O
  • 17. Replication Redis Diskless Repl >= 2.8.18 Redis의 Repl은 위험할 수도 있다. (fork 이슈) Diskless Repl 이 생기면서 EC2 등에서 EBS를 사용할 때의 네트웍 부하를 줄일 수 있다.
  • 18. Persistent M A R 저장 X X O
  • 19. Persistent Redis: AOF, RDB AOF, RDB는 모두 전체 데이터 AOF, RDB는 서로 상관없는 저장방식
  • 20. Cluster M A R Cluster 3rd party 자체 Redis Cluster
  • 21. Cluster Redis Cluster는 아직 검증이 안됬음. Arcus Cluster는 Zookeeper와 연동 Memcache는 Moxi라는 것이 존재
  • 22. 3rd Cluster Redis/Memcache 를 위한 Twemproxy 라는 것도 존재. 모든 명령을 지원하지 않음. - ex (인터섹션등의 콜렉션 간 명령)
  • 23. 3rd Cluster Twemproxy를 쓸 때, python- memcached Library를 사용하면 delete_multi 호출이 제대로 안됨.
  • 24. 3rd Cluster Redis/Memcache with Proxy Client Proxy R/M R/M R/M R/M Proxy
  • 25. 3rd Cluster Proxy를 거치면서 Hop 이 존재, Latency가 추가된다.
  • 26. Redis Cluster Redis Cluster Client Redis Redis Redis Gossip Slot 1 Slot 2 Slot 3
  • 27. Redis Cluster Redis Cluster Client Redis Redis Redis Gossip Slot 1 Slot 2 Slot 3 Set A 123
  • 28. Redis Cluster Redis Cluster Client Redis Redis Redis Gossip Slot 1 Slot 2 Slot 3 Slot3 is Redis3
  • 29. Redis Cluster Redis Cluster Client Redis Redis Redis Gossip Slot 1 Slot 2 Slot 3 Set A 123
  • 30. Redis Cluster Redis Cluster Client Redis Redis Redis Gossip Slot 1 Slot 2 Slot 3 OK
  • 31. Redis Cluster Redis Cluster는 라이브러리 지원이 필요함. 현재 Ruby/Jedis 정도만 지원.
  • 32. Arcus Arcus Cluster with Zookeeper Client Arcus Arcus Arcus ZooKeeper
  • 33. Arcus Arcus Cluster with Zookeeper Client Arcus Arcus Arcus ZooKeeper
  • 34. Arcus Arcus Cluster with Zookeeper Client Arcus Arcus Arcus ZooKeeper Arcus2 is dead
  • 35. Arcus 서버 목록 관리를 Zookeeper 사용 빌드시에 Zookeeper를 사용하지 않도록 하면 일반 memcache 처럼 사용가능
  • 36. 메모리 관리? M A R 메모리 관리 slab slab malloc
  • 37. 메모리 관리? Redis 는 매번 메모리 할당을 하므로, 부하가 많을 경우, 튀는 경우가 발생. 실제로 Redis -> Arcus 는 전환시에 별 문제가 없었지만, Arcus -> Redis 는 전환시에 튀는 경우가 발생
  • 38. 메모리 관리? Memcached/Arcus slab등을 통해서 잦은 메모리 할당이 없음.
  • 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를 할당하게 된다.
  • 49. 클라이언트 M A R Client 1 3 1
  • 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
  • 52. 결론 서비스에 적합한 걸 적절히 골라쓰자. 실버 불렛 따위는 없음.
  • 54. 그외 이슈들 캐시는 얼마나 둬야 할까? 또는 사이징? Multiget Hole 문제 로컬 캐쉬
  • 55. 캐시 사이징 최근의 추세는 캐시빨… 데이터량, 처리 속도등을 고려해야 함 캐시 서버가 몇대까지 죽어도 괜찮을까? 장비가 많은것 보다는 좋은 장비에 여러 개 띄우는게 더 유리…
  • 56. 로컬 캐쉬 보통은 Remote Cache Network, Latency, 성능등의 이슈 적절한 로컬 캐쉬를 사용하면 유리 Expire Time을 짧게 가져감
  • 57. Multiget Hole 친구의 정보를 가져올 때… 캐시 서버가 1대에서 3대로 늘면… 정말 캐시 서버의 부하는 1/3일까요? 내 친구 모두를 가져오면…