Download presentation
Presentation is loading. Please wait.
1
Remote Dictionary Server
2
overview key – value 메모리 저장소
string, set & sorted set, list, hash (다양한 data type 지원) key: String -> value: String key: String -> value: set key: String -> value: sorted set (score를 줄 수있다) key: String -> value: list key: String -> value: hash
3
data structure entries에 앞에 말한 data type형식으로 데이타가 저장됩니다. 사진 출처 : 한 서버당 hashTable 두개가 한쌍인 구조, 16개 (DB에서 database라고 생각하면 될듯) hashTable이 두개인 이유는 rehash, resize 처리할 때 무정지를 위함
4
data structure (string)
하나의 key에는 하나의 data type만~!! Hello World mykey
5
data structure (list) ziplist구조로 저장되겠지만 이해를 위해 linkedlist구조로 표시 mylist
Hello World ziplist구조로 저장되겠지만 이해를 위해 linkedlist구조로 표시
6
data structure ziplist? zipmap?
등장 배경 : list, map 자료구조에서 node를 연결하는 pointer가 필요함. data크기는 1byte인데 pointer가 8byte인 배보다 배꼽이 더 큰 상황 발생
7
data structure max를 넘으면 어떻게하냐? SO? 최악의 경우 모든 value header를 변경 해야 하므로
list-max-ziplist-entries (default: 1024개) list-max-ziplist-value (default: 32byte) max를 넘으면 어떻게하냐? ziplist였던 구조가 일반적인 linked-list구조로 변환
8
CRC16(“mykey”)/ number_slot
cluster 예제 slot의 개수=10 CRC16(“mykey”)/ number_slot mykey 3
9
cluster(gossip) 출처 :
10
cluster(gossip) 자신과 연결된 node중 임의로 정해서 ping/pong, gossip 매초 실행 잘 살고 있냐?
잘 살고 있다. 옆집 김씨는 건강하고, 아랫집 이씨는 어젯밤에 죽었더라. 아….그랬구나…
11
cluster cluster 설정 시 기록하는 내용 재시작시 아래 설정파일 load~!!
12
replication slave에서도 query 가능 replication 주기는 master의 save config로 조정
redis :6379> lpush mylist "Hello sydney" (integer) 1 redis :6379> lpush mylist "Hello seoul" (integer) 2 redis :6379> lpush mylist "Hello tokyo" (integer) 3 redis :6379> lpush mylist "Hello hongkong" (integer) 4 redis :6379> lrange mylist ) "Hello hongkong" 2) "Hello tokyo" 3) "Hello seoul" 4) "Hello sydney" redis :6379> connect (empty list or set) redis :6379> slaveof OK redis :6379> slave에서도 query 가능 replication 주기는 master의 save config로 조정 또는 ‘sync’ query 로 조정 마스터의 rdb 파일을 slave로 복사하고 slave에서는 그 파일을 load 참조 :
13
persistence AOF? RDB? snapshot 을 기록하느냐, query log를 기록하느냐 차이 RDB 설정
config 파일 [save] [changes] - 여러 개 설정 가능 AOF 설정 appendonly yes appendfsync always appendfsync everysec (default) option appendfsync no
14
client dummy client smart client 하나의 client는 하나의 서버와 연결. default
1. Client => A: GET foo 2. A => Client: -MOVED :6391 3. Client => B: GET foo 4. B => Client: "bar" default smart client client가 일정 간격으로 서버의 hash slot 정보를 가져옴 하나의 client가 모든 server와 connection이 이루어져있음 출처 :
15
think… cluster 구성 시 데이터가 균등하게 들어 갈수 있는 방법
cluster, replication 구성 후 auto-failover 방법 update 도중 장애 발생시 복구 방법 모니터링 페이지 개발
16
reference http://redis.io
Similar presentations