이것이 레디스다

30
이이이 이이이이 - 특특특 특특특특

Upload: kris-jeong

Post on 14-Jun-2015

4.723 views

Category:

Technology


5 download

DESCRIPTION

책 "이것이 레디스다"에 서술된 내용을 정리하여 간단한 슬라이드로 만들었습니다. 참고하세요.

TRANSCRIPT

Page 1: 이것이 레디스다

이것이 레디스다- 특징과 활용사례

Page 2: 이것이 레디스다

About Me

Kris jeong( 정경석 )

이것이 레디스다 (2013) 레디스 2.6 에 대한 활용서적

개발 경력 15 년 . 웹 서비스 개발 .

메시징 서버 개발 .

추천 서비스 개발 .

다양한 NoSQL 활용 연구중http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8968480591

Page 3: 이것이 레디스다

레디스란 ?

레디스는 In-Memory Database

다양한 데이터 타입 지원

영구 저장소 지원

키 - 값 모델 NoSQL

Page 4: 이것이 레디스다

IMDB(In-Memory DB)

Query Engine Query Engine

Storage Man-ager

Memory(Cache)

Disk Disk

Memory

메모리 기반 저장소디스크 기반 저장소

속도

데이터 내구성 Disk is optional

Page 5: 이것이 레디스다

레디스는 캐시 서버인가 ?

레디스는 캐시 서버가 아닌 저장소

하지만 캐시 서버로 활용 가능

저장소 기능을 Off 하면 됨 .

Page 6: 이것이 레디스다

설치 가능한 운영체제

https://github.com/MSOpenTech/redis

Page 7: 이것이 레디스다

설치와 테스트$ wget http://download.redis.io/redis-stable.tar.gz$ tar xvf redis-stable.tar.gz$ cd redis-stable$ make……done.

$ make test

※ CentOS 6.4 64bit

Page 8: 이것이 레디스다

특징

Page 9: 이것이 레디스다

무지 빠르다 (TPS)

$ ./src/redis-benchmark --csv -d 1024"PING_INLINE","34602.07""PING_BULK","35971.22""SET","35211.27""GET","31347.96"…"LPUSH (needed to benchmark LRANGE)","32467.53""LRANGE_100 (first 100 elements)","4714.76""LRANGE_300 (first 300 elements)","1605.91""LRANGE_500 (first 450 elements)","1030.93""LRANGE_600 (first 600 elements)","735.13""MSET (10 keys)","22471.91"

※ CentOS 6.4 64bit, Core i5 [email protected]

Page 10: 이것이 레디스다

특징 - expire

지정된 시간 후에 만료 expire user:212:cart 259200

It will be expired 3 days later.

만료 시간 지정 expireat user:212:item:sward 1388534400

It will be expired 2014/01/01

초 단위 만료 Countdown

유닉스 타임스탬프

Page 11: 이것이 레디스다

지원 데이터 타입

문자열 데이터

user:1:cart_info

{ "product": { "id": "2951", "name": "testing 01", "options": { "color": "red" }, "quantity": 4 }}

※ Up to 512MB

키 값

Page 12: 이것이 레디스다

지원 데이터 타입 (cont.)

해시 데이터

item:1:info

name bastard sword

min dam-age

13

max dam-age

20

durability 32/50

price 3500

durability 31/50

새로운 필드와 값 추가

필드 값키

Page 13: 이것이 레디스다

지원 데이터 타입 (cont.)

해시 데이터

item:1:info

name bastard sword

min dam-age

13

max dam-age

20

durability 32/50

price 3500

name bastard sword

min dam-age

13

max dam-age

20

durability 31/50

price 3500

필드 값키

Page 14: 이것이 레디스다

지원 데이터 타입 (cont.)

리스트 데이터

user:1:message

how r you.hi~

bye.

새로운 요소 추가

키 요소

Page 15: 이것이 레디스다

지원 데이터 타입 (cont.)

리스트 데이터

user:1:message

how r you.hi~ bye.

키 요소

Page 16: 이것이 레디스다

지원 데이터 타입 (cont.)

셋 데이터

user:1:friend

kris

mike

frank

martin

tom

chris

새로운 요소 추가

Page 17: 이것이 레디스다

kris

mike

frank

martin

tom

chris

지원 데이터 타입 (cont.)

셋 데이터

user:1:friend

kris

mike

frank

martin

tom

Page 18: 이것이 레디스다

1 kris

91 mike

200 frank

250 martin

251 tom

지원 데이터 타입 (cont.)

정렬된 셋 데이터

user:ranking

220 chris

새로운 가중치와 값 추가

가중치 값키

Page 19: 이것이 레디스다

1 kris

91 mike

200 frank

250 martin

251 tom

1 kris

91 mike

200 frank

220 chris

250 martin

251 tom

지원 데이터 타입 (cont.)

정렬된 셋 데이터

user:ranking

가중치 값키

Page 20: 이것이 레디스다

특징 – RDB(Snapshot)

Redis data

Redis instance

Dump file(Redis-.rdb)

Snapshot 이벤트 발생

Data dumpto disk

레디스에 저장되는 데이터 크기와 물리 메모리의 비율 고려 리눅스 운영체제의 vm.overcommit_memory=1 설정 확인 Swap/snapshot 에 대한 DISK I/O 가 많아질 수 있음 .

레디스 snapshot 사용시 고려사항

Page 21: 이것이 레디스다

특징 – AOF(Append Only File)

Redis data

Redis instance

appendon-ly.aof

Command logging

Redis client

데이터 저장 / 수정 명령

적당한 디스크 용량과 IO 속도를 보장해야 함 .

레디스를 재시작할때 RDB 보다 느리게 시작됨 .

레디스 AOF 에 대한 고려사항

Page 22: 이것이 레디스다

복제 – Single slave

Redis cluster

Slave NodeMaster Node

Redis client

set key1 ‘test value’

set key1 ‘test value’

Replication

key1 test value key1 test value

Page 23: 이것이 레디스다

복제 – Multiple slave

Master Node

Redis cluster

Redis client

쓰기

Replication

읽기

Slave Node 2

Slave Node 1

Slave Node 3

Page 24: 이것이 레디스다

복제 – Multiple slave (cont.)

Master Node

Redis cluster

Slave Node 2

Redis client

쓰기

Slave Node 1

Slave Node 3 Slave Node 4

1st Replication

2nd Replication

Redis client

읽기

Page 25: 이것이 레디스다

샤딩 – 범위 지정

Shard 1

Master Node

User Key 1 ~ 100

User Key 1~50 User Key 51~100

Shard 2

Master Node

Slave Node Slave NodeSlave Node Slave Node

● 데이터 범위를 기준으로 샤딩

Page 26: 이것이 레디스다

샤딩 - 수직

Shard 1

Master Node

User info Content

Shard 2

Master Node

Slave Node Slave NodeSlave Node Slave Node

● 데이터 스키마를 기준으로 샤딩

Page 27: 이것이 레디스다

Key % Number of Shard(Key % 2)

샤딩 - 해싱

Shard 1

Master Node

User Key 1 ~ 100

Shard 2

Master Node

Slave Node Slave NodeSlave Node Slave Node

● 키의 해시값을 기준으로 샤딩

Page 28: 이것이 레디스다

Sharding Calc

샤딩 – 레디스 클라이언트 사용

Redis client

Shard 1 Shard N

읽기 / 쓰기 읽기 / 쓰기

레디스는 서버측 샤딩을 지원하지 않으므로 클라이언트가 구현 .

대부분의 레디스 클라이언트는 클라이언트측 샤딩을 지원 .

장비 증설 / 제거시 재 샤딩을 위한 전략 수립 필요

레디스 샤딩 사용시 고려사항

Page 29: 이것이 레디스다

활용 사례

일간 로그인 사용자 수 계산 주간 로그인 사용자 수 계산 일주일간 한번이라도 로그인한 사용자 수 계산

10 억 사용자에 대한 실시간 PV/UV

클릭 수 기준 인기 게시물 목록 댓글 수 기준 인기 게시물 목록

실시간 인기 게시물 목록 구하기 .

점수 기준 Top 10 랭커 목록 최근 접속 사용자 목록

실시간 게임 랭킹

Page 30: 이것이 레디스다

데모