Top Banner
Amazed By AWS Series #1 Play with Databases 정윤진 솔루션 아키텍트 [email protected]
129

Amazed by aws 1st session

Jun 26, 2015

Download

Technology

AWS Korea MMN & SA team is delivering 5 deep dive sessions in 5 months, as one of AWS Korea's customer obsession program. This is the 1st preso.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Amazed by aws 1st session

Amazed By AWS Series #1

Play with Databases

정윤진솔루션아키텍트[email protected]

Page 2: Amazed by aws 1st session

소개

AWS 솔루션아키텍트Gaming/HPC

DevOps

System Admin

(십년전) Kernel driver dev.

Page 3: Amazed by aws 1st session

오늘내용

a. INTRO – Ice breaking

b. Game Play Patterns

c. Relational DBMS

d. NoSQL

e. Search

Page 4: Amazed by aws 1st session

시작하기전에.

Page 5: Amazed by aws 1st session

AWS 명령줄도구

http://aws.amazon.com/ko/cli/

$ sudo pip install awscli

Downloading/unpacking awscli

Downloading awscli-1.5.4.tar.gz (253kB): 253kB downloaded

Running setup.py (path:/private/tmp/pip_build_root/awscli/setup.py) egg_info for package awscli

..

.

Successfully installed awscli botocore bcdoc colorama docutils rsa jmespath pyasn1

Cleaning up...

$

$ aws configure

AWS Access Key ID [None]: XXXXXXXXXXXXXXXXX

AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Default region name [None]: ap-northeast-1

Default output format [None]: json

$

Page 6: Amazed by aws 1st session

$ aws s3 ls s3://yz-ngs-outputs

PRE Redis-snapshots/

PRE hohoho/

PRE pig-apache/

PRE transfer-test/

PRE wordcount/

2013-06-07 17:56:52 6097048 Elastic Beanstalk for Startups.pptx

2013-05-31 13:33:49 0 HG00099.mapped.SOLID.bfast.GBR.exome.20111114.bam

2013-05-06 15:56:56 132644272 TrendMicro-TTi_6.0_HE_Full.exe

2013-11-10 03:16:23 5188 fabricrc.txt

$

AWS 명령줄도구

Page 7: Amazed by aws 1st session

Ice breaking

Page 8: Amazed by aws 1st session

Amazon Web Services

Page 9: Amazed by aws 1st session
Page 10: Amazed by aws 1st session
Page 11: Amazed by aws 1st session

Amazon Corporate Services Korea LLC

Our office

29th Sep 2014, 3AM

AWS 관련문의사항은여기로[email protected]

[email protected]

[email protected]

Page 12: Amazed by aws 1st session

개발자에게 AWS란?

http://www.toptiertactics.com/wp-content/uploads/2011/10/Workaholic-Cartoon.jpg

Page 13: Amazed by aws 1st session
Page 14: Amazed by aws 1st session

Java Python PHP .NET Ruby nodeJS

iOS Android

AWS SDK

Page 15: Amazed by aws 1st session

https://github.com/awslabs

Page 16: Amazed by aws 1st session

하나이상의배포도구의사용이중요

OpsWorks CloudFormation

Page 17: Amazed by aws 1st session

Game type:

모바일전략

Page 18: Amazed by aws 1st session
Page 19: Amazed by aws 1st session

데이터모델에대해

각종상태정보 : 레벨, 엑슬러, 트로피, 골드건물배치정보 : 담벼락, 성의위치, 대포위치게임플레이상태정보 : 온라인, 오프라인, 공격받는중, 공격하는중전투기록정보 : 언제어느유닛을어느좌표에, 공격/방어기록

기타 :

트로피를통한순위비교실시간채팅사용자이용행태로깅

실시간대전조건이붙지않으면,

또는붙으면?

Page 20: Amazed by aws 1st session

상태정보

위치정보

Page 21: Amazed by aws 1st session

Game type:

모바일캐주얼

Page 22: Amazed by aws 1st session

데이터모델에대해

각종상태정보 : 레벨, 스코어, 골드, 아이템현황기록정보 : 언제로그인, 로그아웃, 마지막플레이레벨

기타 :

스코어를통한순위비교사용자이용행태로깅

클라이언트에서게임데이터가완성Backend 는데이터기록, 순위, 로깅, 분석을위해존재

Page 23: Amazed by aws 1st session

Game type:

FPS, TPS

Page 24: Amazed by aws 1st session

데이터모델에대해

각종상태정보 : 레벨, 스코어, 골드, 아이템현황기록정보 : 언제로그인, 로그아웃, 마지막플레이레벨로비정보 : 전투방생성을위한채팅, 중계를위한세션정보의저장상태정보 : 현재속한세션 id 및플레이중인 room id 등

기타 :

스코어를통한순위비교사용자이용행태로깅

로그인및캐릭터관련정보를제외하면거의대부분세션의중계및결과업데이트에집중

Page 25: Amazed by aws 1st session

Game type:

MMORPG

Page 26: Amazed by aws 1st session

데이터모델에대해

각종상태정보 : 레벨, 스코어, 골드, 아이템현황이실시간으로변경기록정보 : 언제로그인, 로그아웃, 마지막플레이레벨, 데미지, 몬스터및 PvP

정보로비정보 : 게임내실시간사용자간채팅, 고객지원이포함상태정보 : 서버간캐릭터의위치정보, HP 및데미지, 방어력등다양한스텟정보필요

기타 :

NPC 와캐릭터간인터렉션사용자플레이형태로깅

사용자의모든행위에대해실시간에가까운서버간동기화등이필요

Page 27: Amazed by aws 1st session
Page 28: Amazed by aws 1st session

올바른데이터베이스타입의선택데이터엔티티간의관계가필요한가?

1명 – 수억명의사용자접근에대비, 확장이가능한가?

데이터가영속적으로저장되어야하는가?

데이터가특정시점에만유효한가?

한번생성된데이터가자주변경될가능성이있는가?

한번생성된데이터는영원히변하지않는가?

Insert / Update / Delete / Select 중어떠한 type 의데이터변경이많은가?

단말 (클라이언트플랫폼)에서지원하는로컬 DB와동일한데이터타입을사용할수있는가?

http://www.raywenderlich.com/913/sqlite-tutorial-for-ios-making-our-app

http://www.slideshare.net/MindfireSolutions/web-sql-database-in-html-5

Page 29: Amazed by aws 1st session

게임데이터베이스와 AWS

Page 30: Amazed by aws 1st session

1. RDBMS 만으로처리하는데는한계가있다.

2. NoSQL 만으로는 Rich Query 를수행할수없다.

3. 분산환경에적합한게임서버구조를만들어야한다.

1. RDBMS 의사용비율축소, 샤딩구조확립2. NoSQL + Search engine 의혼합사용3. RPC, Coroutine (yield)과같은기법의적극사용4. Tight coupled 의방법보다는 Loosely coupled 의구현5. Pub/Sub 을통한서버간메세지전달

Game dev on AWS

Page 31: Amazed by aws 1st session

구조화된데이터베이스 –복잡한쿼리를지원-SQL : Amazon RDS

-Data Warehouse : Amazon Redshift

-Search : Amazon CloudSearch

구조화되지않은데이터베이스 –커스텀쿼리를지원-Hadoop : Elastic MapReduce

Database Overview

Page 32: Amazed by aws 1st session

구조화된데이터베이스 –단순한쿼리를지원-NoSQL : DynamoDB

-Cache : ElastiCache

구조화되지않은데이터베이스 –쿼리를지원하지않음- 클라우드스토리지 : S3, Glacier

Database Overview

Page 33: Amazed by aws 1st session

관계형데이터베이스

SELECT customer_info.firstname, customer_info.lastname, purchases.item

FROM customer_info INNER JOIN purchases

ON customer_info.customer_number = purchases.customer_number;

Page 34: Amazed by aws 1st session

Relational Database ServiceDatabase-as-a-Service

No need to install or manage database instances

Scalable and fault tolerant configurations

Feature Details

Platform support Create MySQL, SQL Server and Oracle RDBMS

Preconfigured Get started instantly with sensible default

settings

Automated patching Keep your database platform up to date

automatically

Backups Automatic backups and point in time recovery

and full DB backups

Provisioned IOPS Specify IO throughput depending on

requirements

Failover Automated failover to slave hosts in event of a

failure

Replication Easily create read-replicas of your data and

seamlessly replicate data across availability

zones

Compute Storage

AWS Global Infrastructure

Database

App Services

Deployment & Administration

Networking

Page 35: Amazed by aws 1st session

사용이권장되는경우

-트랜잭션-복잡한쿼리가요구되는경우-최대 30,000 IOPS (15K reads, 15K writes)

-100기가바이트에서수 TB 수준-워크로드가 1대수준에서처리가능한경우-높은내구성이요구되는경우

RDS

Page 36: Amazed by aws 1st session

사용이권장되지않는경우

-대량의 read/write 가요구될때 (150,000 write request/sec)

-데이터의크기또는처리량으로샤딩을결정해야하는경우-NoSQL 로처리가가능한수준의쿼리또는 Get/Put 의요청이대부분인경우-복잡한분석이필요한경우

RDS

Page 37: Amazed by aws 1st session

Windows 기반의게임회사에서많이사용EC2 / RDS 에서사용가능EC2 에서사용시 PIOPS 적용된다수의 EBS 를통해 확장

가능i2 / r3 / c3 계열의인스턴스사용가능종전의데이터센서에서사용하던모든구성그대로사용가능 (SAN 기반클러스터링제외)

RDS 에서는 3개의 region에서 Multi-AZ 지원10,000 PIOPS 적용가능SYSADMIN 계정확보불가DB 가동작중인 OS 에접근불가최소볼륨크기 200G, 최대볼륨크기 1T

MSSQL

Page 38: Amazed by aws 1st session

RDS 에서는 Multi-AZ, Read replication 등 DB engine

중가장다양하고많은기능을지원DB engine 에서는 timezone 변경이아직불가능. UTC

기반클라이언트접속시설정변경또는코드에서적용해야함사용이매우편리, dump/restore 역시기존에사용하는mysqldump / mysql 클라이언트를사용하여가능OS root 는확보불가능

순후하게 MySQL 만사용하면서 EC2 에직접설치하여사용하는경우요구사항은많지않음.

Maria 와같은 DB 의사용MMM / Galera 와같은별도의 3rd party 도구를사용하고자하는경우에유용Scale-up 의방법은 EC2 의방법과동일

MySQL

Page 39: Amazed by aws 1st session

Region

Availability

Zone A Availability

Zone B

S3

EC2

• 게임은언제나 “Write heavy”

• 캐싱이언제나통하는것은아님

• 키밸류 / 키밸류

• 잦은바이너리의사용

• 데이터베이스는언제나병목

ELB

EC2

CloudFront

CDN

CUID 는괴롭다ㅠㅠ(creat/update/delete/insert)

Page 40: Amazed by aws 1st session

Availability

Zone A

C2

Shard (No Fun)

Page 41: Amazed by aws 1st session

관계형데이터베이스성능의극대화방법

1. EBS PIOPS 볼륨의적극적인사용2. Instance Store 의적극적인사용3. 테이블을많은볼륨에분산저장, 테이블을서로다른

볼륨에저장

Page 42: Amazed by aws 1st session

Availability Zone a Availability Zone b

MSSQL

Master

MSSQL

Standb

y

4 SSD

Stripped Instance Store

(Main DB data store)

4 SSD

Stripped Instance Store

(Mirrored DB data store)

30G

EBS

nG

EBS

root TX

LOG

30G

EBS

nG

EBS

Mirroring

root TX

LOG

Cre

ate

vo

lum

e

sn

ap

sh

ot

Volume create

From snapshot

Att

ac

h v

olu

me

Fo

r re

sto

rati

on

Page 43: Amazed by aws 1st session

Availability Zone a Availability Zone b

MSSQL

Master

MSSQL

Standb

y

4 SSD

Stripped Instance Store

(Main DB data store)

4 SSD

Stripped Instance Store

(Mirrored DB data store)

30G

EBS

nG

EBS

root TX

LOG

30G

EBS

nG

EBS

Mirroring

root TX

LOG

Cre

ate

vo

lum

e

sn

ap

sh

ot

Volume create

From snapshot

Att

ac

h v

olu

me

Fo

r re

sto

rati

onInstance Store 는재부팅시데이터가사라짐

따라서복제/복구/백업에대해확실한대비가필요

확실한대비없이는사용에주의!!!!!

Page 44: Amazed by aws 1st session

Availability Zone a Availability Zone b

MSSQL

Master

MSSQL

Standb

y

n X PIOPS EBS

Not raided, for Windows Server

(table partition, table space)

(Main DB data store)

n X PIOPS EBS

Not raided, for Windows Server

(table partition, table space)

(Mirrored DB data store)

30G

EBS

nG

EBS

root TX

LOG

30G

EBS

nG

EBS

Mirroring

root TX

LOG

Cre

ate

vo

lum

e

sn

ap

sh

ot

Volume create

From snapshot

Att

ac

h v

olu

me

Fo

r re

sto

rati

on

Page 45: Amazed by aws 1st session

NoSQL

redis> MSET one 1 two 2 three 3 four 4

OK

redis> KEYS *o*

1) "four"

2) "two"

3) "one"

redis> KEYS t??

1) "two"

redis> KEYS *

1) "four"

2) "two"

3) "one"

4) "three"

redis>

Page 46: Amazed by aws 1st session

사용이권장되는경우

-예측가능한, 빠른속도가요구되는경우-순식간에대규모확장요구사항이있는경우-샤딩을자동으로해야하는경우-데이터의정합성과낮은지연시간이동시에필요한경우-데이터저장의크기및처리량의한계를설정할수없는경우-아주높은내구성이요구되는경우-간단한쿼리또는 KV 저장소가요구되는경우

DynamoDB

Page 47: Amazed by aws 1st session

사용이권장되지않는경우

-다수의아이템또는 row 및서로다른테이블참조트랜잭션이필요한경우-복잡한쿼리및조인이필요한경우-로그성데이터에대한실시간분석이필요한경우-자주참조되지않는데이터를저장하고자하는경우

DynamoDB

Page 48: Amazed by aws 1st session

클러스터자동생성 – Master : Multi replication nodes

Auto Backup

Auto Failover

Restore from rdb file

ElastiCache - Redis

최근의게임에서는 pub/sub 을통한데이터공유에사용종전의 UDP/TCP broadcast 를대처가능In-memory 처리로매우고속

Page 49: Amazed by aws 1st session

Redis – pubsub

게임서버간이벤트공유

Page 50: Amazed by aws 1st session

사용이권장되는경우

-확장된데이터모델과함께 KV 저장소가필요한경우 : string, lists, sets,

sorted sets, hashes

-캐싱-Leader board (리더보드)

-고속의정렬-원자단위의카운팅-큐시스템이필요한경우

ElastiCache – Redis

Page 51: Amazed by aws 1st session

사용이권장되지않는경우

-Native 한샤딩또는 Scale-out 이필요한경우-아주높은수준의데이터보존성이요구되는경우-메모리에적합하지않은데이터를보유하고있는경우-예외상황에서도특정트랜젝션에대한롤백이필요한경우

ElastiCache – Redis

Page 52: Amazed by aws 1st session

http://techblog.netflix.com/2013/02/announcing-evcache-distributed-in.html

In-memory caching solution based on memcached & spymemcached

- Ephemeral

- Volatile

- Cache (KV Store)

https://github.com/Netflix

Page 53: Amazed by aws 1st session

http://media.amazonwebservices.com/AWS_NoSQL_Couchbase.pdf

Page 54: Amazed by aws 1st session

Minimum production45GiB (20 x m1.large)

5Gbps access EBS

Up to 80,000 IOPS

Medium production410GiB

10Gbps access EBS

Up to 640,000 IOPS

Page 55: Amazed by aws 1st session

Large production360GiB (30 instances)

10Gbps access EBS

Up to 500,000 IOPS

Extra large production1.5TiB (30 instances)

20Gbps access EBS

Up to 640,000 IOPS

Page 56: Amazed by aws 1st session

https://media.amazonwebservices.com/AWS_NoSQL_MongoDB.pdf

Page 57: Amazed by aws 1st session
Page 58: Amazed by aws 1st session
Page 59: Amazed by aws 1st session
Page 60: Amazed by aws 1st session
Page 61: Amazed by aws 1st session
Page 62: Amazed by aws 1st session
Page 63: Amazed by aws 1st session
Page 64: Amazed by aws 1st session
Page 65: Amazed by aws 1st session

http://www.youtube.com/watch?v=hYtRw3Zb6AY

Cassandra + OpsWorks

Page 66: Amazed by aws 1st session
Page 67: Amazed by aws 1st session

DynamoDBProvisioned throughput NoSQL database

Fast, predictable performance

Fully distributed, fault tolerant architecture

Feature Details

Provisioned

throughput

Dial up or down provisioned read/write capacity

Predictable

performance

Average single digit millisecond latencies from

SSD backed infrastructure

Strong consistency Be sure you are reading the most up to date

values

Fault tolerant Data replicated across availability zones

Monitoring Integrated to Cloud Watch

Secure Integrates with AWS Identity and Access

Management (IAM)

Elastic MapReduce Integrates with Elastic MapReduce for complex

analytics on large datasets

Compute Storage

AWS Global Infrastructure

Database

App Services

Deployment & Administration

Networking

Page 68: Amazed by aws 1st session

DynamoDB, 조금더깊게

Page 69: Amazed by aws 1st session

NoSQL 의종류

MongoDB

Riak

Hbase

Cassandra

Neo4j

CouchDB

DynamoDB

이외에도더많은 NoSQL 이존재

Page 70: Amazed by aws 1st session

NoSQL vs. RDB

BASE 의특성

대용량데이터

확장가능

빠른쓰기속도

유연한스키마설정

ACID 특성- Atomicity

- Consistency

- Isolation

- Durability

트랜젝션기반

Rich한쿼리

조인

NoSQL RDB

Page 71: Amazed by aws 1st session

BASE 특성이란

Basically Available, Soft state, Eventually consistent

즉,

데이터의즉시반영을통한높은일관성을일부포기하는대신,

확장성을특징으로.

모든 NoSQL 이완전히 BASE의특성을가지지는않지만기존 RDB

의 ACID 특성을 포기해야하는것이요구사항이된다.

Page 72: Amazed by aws 1st session

API

SDK

Database

Clie

nt S

ide

Serv

ice S

ide

Client application

DynamoDB 의사용

Page 73: Amazed by aws 1st session

특징1:관리가필요없는높은신뢰성

SPOF가존재하지않는구성데이터는 3개소의 AZ에분산저장되어높은신뢰성스토리지는필요에따라자동으로분산처리

Client

Page 74: Amazed by aws 1st session

특징2:처리량을프로비저닝가능

Read 및 Write, 각각필요한만큼의처리용량을할당예를들어일반적인 Read Heavy DB 라면

Read : 1,000

Write : 100약간 Heavy 한 DB의경우

Read : 500

Write : 500이설정값은 DB 운영중에온라인으로변경가능

Scale-down에 관해서는하루 4회만가능

Page 75: Amazed by aws 1st session

특징3:저장용량에제한이없는

사용한만큼지불하는종량제스토리지데이터용량증가에따른노드추가와같은작업이불필요

Page 76: Amazed by aws 1st session

DynamoDB를시작하려면

1. 테이블의 Key 와 Index 를결정

2. Read/Write 처리량을결정

That’s it, write your code!

Page 77: Amazed by aws 1st session

DynamoDB Demo - Tic Tac Toe Game

https://github.com/awslabs/dynamodb-tictactoe-example-app

Page 78: Amazed by aws 1st session

DynamoDB 사용

Page 79: Amazed by aws 1st session

제공되는 API

PutItem

UpdateItem

GetItem

DeleteItem

Query

Scan

BatchWriteItem

BatchGetItem

CreateTable

DescribeTable

UpdateTable

DeleteTable

Page 80: Amazed by aws 1st session

주로사용되는기능

• Get/Put/Update/Delete/BatchGet

• Scan

전체테이블을싹쓸이로긁어옴

• Query

Hash + 범위키만

Page 81: Amazed by aws 1st session

공식 SDK 이외에도

Perl

Net::Amazon::DynamoDB

Erlang

wagerlabs/ddb

https://github.com/wagerlabs/ddb

Go

go-dynamodb

https://github.com/fabiokung/go-dynamodb

Page 82: Amazed by aws 1st session

테이블디자인을위한요소(1)

Table

Primary Key 로 ”Hash key” 혹은 ”Hash key & Range key”를선택기본키:Hash key

Hash key 단체로데이터를고유하게식별할수있는경우사용기본키:Hash key & Range key

Hash key에해당하는여러데이터에서 Range key 로검색가능Local Secondary Indexes

Range key 이외에필터검색을위한키를가질수있음Global Secondary Indexes

기존 Hash key & Range key 외다른 attribute 를 key 로지정가능

Page 83: Amazed by aws 1st session

테이블디자인을위한요소(2)

Attributes

데이터의내용. Hash key 에해당하는 Attributes 이외에는미리정의할필요는없다. 또한레코드에서 Attributes 가불규칙하더라도문제없다.

Attributes 형식

String

Number

Binary

Array of String

Array of Number

Array of Binary

Page 84: Amazed by aws 1st session

DynamoDB의데이터모델

테이블

아이템

기본 키 속성

Hash key 또는 Hash key & Range key

Page 85: Amazed by aws 1st session

DynamoDB의기본키

• Hash key

간단한키값

Hash 이므로정렬이필요없음

• Hash key + Range key

복합기본키

Range key 는 sort 가있음

Page 86: Amazed by aws 1st session

샘플(1)상품카탈로그

스키마테이블명 Products

상품 ID(ProductId) 를테이블의 Hash key 로사용

ProductId

(Hash key)

ProductName Price ・・・ ・・・

1 Pen 100 ・・・ ・・・

2 Pencil 50 ・・・ ・・・

3 Eraser 100 ・・・ ・・・

Page 87: Amazed by aws 1st session

node.js SDK 사용예

데이터를테이블에입력

샘플(2)로그테이블

var data = new Array({ AudienceId: { N:"1" }, Timestamp: { S:"2013-10-01 00:01:01" }, Action: { S:"Login" } },{ AudienceId: { N:"2" }, Timestamp: { S:"2013-10-01 00:02:02" }, Action: { S:"Login" } },{ AudienceId: { N:"1" }, Timestamp: { S:"2013-10-01 00:21:00" }, Action: { S:"Login" } },{ AudienceId: { N:"1" }, Timestamp: { S:"2013-10-01 00:42:00" }, Action: { S:"ViewHoge" } },{ AudienceId: { N:"1" }, Timestamp: { S:"2013-10-01 00:56:22" }, Action: { S:"PostHoge" } }

);

for (var i =0; i < data.length; i++){dynamoDb.putItem(

{TableName:"Audience",Item: data[i]

},function(err,data){

if(err){console.log(err);

}else{console.log(data);

}}

);}

Page 88: Amazed by aws 1st session

node.js SDK 사용예

사용자의 10월 1일 0시 10분이후의로그를가져오기

샘플(2)로그테이블

dynamoDb.query({

TableName:"Audience",KeyConditions: {

"AudienceId": {ComparisonOperator:"EQ",AttributeValueList:[ {N:"1"} ]

},"Timestamp": {

ComparisonOperator:"GT",AttributeValueList:[ {S:"2013-10-01 00:10:00"} ]

}}

},function(err,data){

if(err){console.log(err);

}else{console.log(data);

}}

);

Page 89: Amazed by aws 1st session

샘플(3) LSI를적용한로그테이블

사용자로그에 Local Secondary Indexes(LSI)를보면

AudienceId

(Hash key)

Timestamp

(Range key)

Action

(Action-Index)

Url ・・・

1 2013-10-01

00:01:01

Login ・・・ ・・・

2 2013-10-01

00:02:02

Login ・・・ ・・・

1 2013-10-01

00:21:00

Login ・・・ ・・・

1 2013-10-01

00:42:00

ViewHoge

1 2013-10-01

00:56:22

PostHoge

Page 90: Amazed by aws 1st session

Local Secondary Indexes(LSI)

• Get/Put/Update/Delete/BatchGet

• Scan

테이블의전체내용을가져옴

• Query

Hash + Range 키만가져옴

Local Secondary Index 를사용하여이제한을없앨수있다!

Page 91: Amazed by aws 1st session

Local Secondary Indexes (LSI)

테이블에서어떠한 Index 를 Query 로사용할지에대한예

5개의 LSI 지정이가능

LSI없는테이블에서는 Range

Key를사용한 Query 만가능

LastPostIndex

RepliesIndex

LSI를정의하면 Key가아닌속성에대해서도 Query 가능예:

- Replies 가 10개이상- 마지막게시물이 XX 이후

LSI

Forum 게시물을보관하는테이블의구조

Page 92: Amazed by aws 1st session

어째서 ”Local” Secondary Indexes 인가?

Hash key 가일치하는범위내에서의 Secondary Index 이므로

Hash Key 가다른항목에대해 Query 결과로가져올수없다

RepliesIndex 를사용하여1개의Query로 가져올수있는데이터는?

•ForumName 이 S3 이며, Replies

가 9개이상

•모든 ForumName 에서Replies가 9이상 3개의 Hash key가있으므로3 회의 Query 필요

RepliesIndex

Page 93: Amazed by aws 1st session

LSI 를설정한경우의실제동작

Thread 테이블의 LastPostDateTime에 LSI 를설정하면,

LastPostIndex

별도의 Index 테이블이뒤에서생성, 관리됨

• 지정된속성이 Range-key

• 원래테이블의 Range-key 가속성으로

Page 94: Amazed by aws 1st session

속성의프로젝션Index 용테이블에지정된속성을복제저장하는기능

예:Thread 테이블에 Replies를 LastPostIndex에프로젝션

LastPostIndex

Query 수행시 Replies를취득하는경우 Load 비용을절감성능향상 ReadThroughput 을절약가능

Page 95: Amazed by aws 1st session

User

(Hash)

Timestamp

(Range)

Opponent Result

Alice 2014-02-21 12:21:20 Bob Lost

Alice 2014-02-21 12:42:01 Bob Won

Alice 2014-02-24 09:48:00 Dan Won

Alice 2014-02-25 16:21:11 Charlie Won

Battle History

사용자가 자신의 전투 기록을 확인하는 경우

– User (Alice)가 timestamp range-key 를 이용하여 지난 7일간의 전투기록을 확인

Charlie

02-25 16:21

Won!

Your Battle History

Dan

02-24 09:48

Won!

Alice

02-21 12:42

Won!

게이머의플레이데이터이력

Page 96: Amazed by aws 1st session

사진공유 SNS 앱

Home My Posts My Profile

Bob

Steak!10:18

Carol

BBQ! w/Alice10:12

Dan

Riajuee…10:11

Alice

Beer!10:21

Alice

BBQ! w/Carol10:12

Alice

Starting BBQ!10:09

Name:

Alice

Mail: foo

Profile: some texts

Page 97: Amazed by aws 1st session

Users TableFriends Table

테이블 2개를정의• 사용자정보테이블

• 친구목록테이블

테이블설계

Page 98: Amazed by aws 1st session

User

(Hash)

Nicknames

Bob [ Rob, Bobby ]

Alice [ Allie ]

Carol [ Caroline ]

Dan [ Daniel, Danny ]

Users Table

Item

Attribute

(string, number, binary, set)

Primary Key

(Hash)

친구목록검색

Page 99: Amazed by aws 1st session

User

(Hash)

Nicknames

Bob [ Rob, Bobby ]

Alice [ Allie ]

Carol [ Caroline ]

Dan [ Daniel, Danny ]

Friends Table

User

(Hash)

Friend

(Range)

Bob Alice

Alice Bob

Alice Carol

Alice Dan

Users Table

Hash + Range

Primary Key

친구목록검색

Page 100: Amazed by aws 1st session

Friends Table Users Table

User

(Hash)

Nicknames

Bob [ Rob, Bobby ]

Alice [ Allie ]

Carol [ Caroline ]

Dan [ Daniel, Danny ]

User

(Hash)

Friend

(Range)

Bob Alice

Alice Bob

Alice Carol

Alice Dan

Alice의친구목록검색1. Query (Table = Friends,

Hash = Alice, Range = *)

2. BatchGetItem(Bob, Carol, Dan)

친구목록검색

Page 101: Amazed by aws 1st session

Friends Table Users Table

User

(Hash)

Nicknames

Bob [ Rob, Bobby ]

Alice [ Allie ]

Carol [ Caroline ]

Dan [ Daniel, Danny ]

User

(Hash)

Friend

(Range)

Bob Alice

Alice Bob

Alice Carol

Alice Dan

Alice의게시물및이미지검색1. Query (Table = Friends,

Hash = Alice, Range = *)

2. BatchGetItem(Bob, Carol, Dan)

게시물검색

Page 102: Amazed by aws 1st session

Images Table

User

(Hash)

Image

(Range)

Date Link

Bob aed4c 2013-10-01 s3://…

Bob cf2e2 2013-09-05 s3://…

Bob f93bae 2013-10-08 s3://…

Alice ca61a 2013-09-12 s3://…

Bob

Bob의게시물목록을검색Query (Table=Images,

Hash= Bob,

Range=*)

만약특정시간이후의사진목록을가져오고싶다면?

이미지검색

Page 103: Amazed by aws 1st session

Images Table

User Image Date Link

Bob aed4c 2013-10-01 s3://…

Bob cf2e2 2013-09-05 s3://…

Bob f93bae 2013-10-08 s3://…

Alice ca61a 2013-09-12 s3://…

User Date Image

Bob 2013-09-05 cf2e2

Bob 2013-10-01 aed4c

Bob 2013-10-08 f93bae

Alice 2013-09-12 ca61a

Table ByDate Local Secondary Index

Local Secondary Index 를 Date 속성에적용

날짜및시간이미지수집

Page 104: Amazed by aws 1st session

ImageTags Table

Image User

aed4c Alice

aed4c Bob

f93bae Alice

f93bae Bob

Image f93bae에 Alice를태그PutItem(Table = ImageTags,

Hash = f93bae, Range = Alice)Bob

만약사용자가태그된이미지목록으로검색하고자한다면?

Image f93bae에태그된사용자목록Query(Table = ImageTags,

Hash = f93bae, Range = *)

이미지에사용자를태그

Page 105: Amazed by aws 1st session

ImageTags Table

User Image의 Range 를Global Secondary Index 로적용

User

(Hash)

Image

(Range)

Bob aed4c

Bob f93bae

Alice aed4c

Alice f93bae

ByUser Global Secondary Index

Image

(Hash)

User

(Range)

aed4c Alice

aed4c Bob

f93bae Alice

f93bae Bob

Table

Bob

Alice 가태그된사진목록

사용자의태그이미지목록

Page 106: Amazed by aws 1st session

테이블디자인: 기본키의사용Hash key와 Range key의개념

A,D B,E C,F

1

23

45

67

89

Parition1 Partition2 Parition3

Range keyPartition내에서 데이터의 순서를 보장

Hash keyPartition간의 데이터 분산에 이용되는key

DynamoDB의 처리량은 각Partition에 부하가 적절히 분산되었을때를 기준으로 설계되어 있다. 하나의 Partition 으로 프로비저닝된 처리량이나오는 것이 아님에 주의

Page 107: Amazed by aws 1st session

A,D B,E C,F

1

23

45

67

89

Parition1 Partition2 PartitionN

Partition

DynamoDB 는프로비저닝된처리량을보장하기위해데이터를여러파티션에분산저장한다.

Partition은저장된데이터량과프로비저닝한처리량에의해자동으로다시파티셔닝한다.

지금현재의파티션수를확인하는것은불가능

테이블디자인: 기본키의사용

Page 108: Amazed by aws 1st session

A,D B,E C,F

1

23

45

67

89

Parition1 Partition2 ParitionN

처리량은파티션에균등하게분할된다.

프로비저닝된처리량은각파티션에균등하게분할되며, 각합은지정한처리량이나오도록설계되어있다.

따라서엑세스키에편향이발생할가능성이많은구조로테이블이설계되어있다면원하는만큼성능이나오지않을가능성이있으므로주의해야한다.

프로비저닝된처리량 : x

x/N x/N x/N

테이블디자인: 기본키의사용

Page 109: Amazed by aws 1st session

테이블디자인: 기본키의사용

Hot Key문제 :특정 Hash key에데이터가집중되면성능이저하(예상대로의성능이아님)됨에주의

위의 Audience 테이블에서 AudienceId처럼데이터가특정키에집중하기어려운것을선택한다

예를들어,「년월」과같이데이터의집중이발생하기쉬운데이터를 Hash key로선택하는것은안티패턴

Page 110: Amazed by aws 1st session

테이블디자인: LSI

Local Secondary Indexes는저장소와 IO 비용증가를발생시킬수있음

LSI는소위 “Projection”에서구현된다

따라서 Projection 되는속성이많을수록스토리지비용이증가

Write시쓰기비용역시증가

반드시필요한조건에만 LSI 를사용Projection이필요한 Attributes만선택하도록한다

Page 111: Amazed by aws 1st session

DynamoDB Local

개발및테스트용도구

이전까지는개발및테스트를위해서는반드시 DynamoDB테이블을생성해야했다. 이는 ”비용발생의우려”、”내부테스트환경구성불가”、”오프라인으로개발불가능”과같은문제가있었음

이도구를사용하여개발및테스트를보다편리하게수행할수있음JAR파일로제공되어로컬에설치및실행가능 (Java7)단순히 API의기능재현을위한테스트용도구이기때문에서비스환경에는사용이불가능프로비전된처리량은반영되지않으므로주의자세한내용은 AWS document 를참조

Page 112: Amazed by aws 1st session

Amazon EMR의 Hive 에서사용

CREATE EXTERNAL TABLE Audience

( AudienceId Int, ActionTimestamp string, Action string )

STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'

TBLPROPERTIES (

"dynamodb.table.name" = ”Audience2",

"dynamodb.column.mapping" =

”AudienceId:AudienceId,

ActionTimestamp:Timestamp,

Aciton:Action“ );

hive의 External Table로이용가능DynamoDB의데이터집계등이필요한경우등에이용

자세한내용은http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMR_Interactive_Hive.html

Page 113: Amazed by aws 1st session

hive를사용하여 S3에데이터백업

EMR에서 hive는 DynamoDB뿐만아니라 S3 역시 External Table 사용할수있는장점을살려 DynamoDB 를 External Table 로 Select한데이터를다시 S3 의External Table로 Insert 가능

INSERT OVERWRITE TABLE

s3_as_external_table

SELECT *

FROM dynamodb_as_external_table;

Page 114: Amazed by aws 1st session

Redshift 의 COPY 를사용해데이터를로드

자세한내용은http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/R

edshiftforDynamoDB.html

Amazon Redshift 에데이터로딩

COPY audience

FROM ‘dynamodb://Audience2’

CREDENTIALS

'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>'

READRATIO 50;

Page 115: Amazed by aws 1st session

http://www.youtube.com/watch?v=Dh8kp1AcRg0

Page 116: Amazed by aws 1st session
Page 117: Amazed by aws 1st session
Page 118: Amazed by aws 1st session

https://github.com/Aconex/scrutineer

-오픈소스 : elasticsearch.com 통해서포트가가능-분산검색엔진-클러스터링형태로구성이가능-고가용성-다중사용자환경

Page 119: Amazed by aws 1st session

https://github.com/kzwang/elasticsearch-river-dynamodb

River

Page 120: Amazed by aws 1st session

http://docs.couchbase.com/couchbase-elastic-search/

Page 121: Amazed by aws 1st session

http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.9

0/modules-gateway-local.html

http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.9

0/modules-gateway-s3.html

Page 122: Amazed by aws 1st session
Page 123: Amazed by aws 1st session

사용이권장되는경우

-검색에대해내가전문성이없다고판단되는경우-Full-text 검색이필요한경우-랭킹-검색-구조화된데이터와구조화되지않은데이터가혼재하는경우

CloudSearch

Page 124: Amazed by aws 1st session

사용이권장되지않는경우

-다수의아이템또는 row 및서로다른테이블참조트랜잭션이필요한경우-복잡한쿼리및조인이필요한경우-로그성데이터에대한실시간분석이필요한경우-자주참조되지않는데이터를저장하고자하는경우

CloudSearch

Page 125: Amazed by aws 1st session

http://www.youtube.com/watch?v=mdj8RQhqOEg

Page 126: Amazed by aws 1st session

Write once

Read many then,

s3://mys3database/HASHasFILENAME.JSON

Page 127: Amazed by aws 1st session

S3 - Durable storage, any object99.999999999% durability of objects

Unlimited storage of objects of any type

Up to 5TB size per object

Feature Details

Flexible object store Buckets act like drives, folder structures within

Access control Granular control over object permissions

Server-side

encryption

256bit AES encryption of objects

Multi-part uploads Improved throughput & control

Object versioning Archive old objects and version new ones

Object expiry Automatically remove old objects

Access logging Full audit log of bucket/object actions

Web content

hosting

Serve content as web site with built in page

handling

Notifications Receive notifications on key events

Import/Export Physical device import/export service

Compute Storage

AWS Global Infrastructure

Database

App Services

Deployment & Administration

Networking

Page 128: Amazed by aws 1st session

1. RDBMS 만으로처리하는데는한계가있다.

2. NoSQL 만으로는 Rich Query 를수행할수없다.

3. 분산환경에적합한게임서버구조를만들어야한다.

1. RDBMS 의사용비율축소, 샤딩구조확립2. NoSQL + Search engine 의혼합사용3. RPC, Coroutine (yield)과같은기법의적극사용4. Tight coupled 의방법보다는 Loosely coupled 의구현5. Pub/Sub 을통한서버간메세지전달

Summary

Page 129: Amazed by aws 1st session

aws.amazon.com/ko/game-hosting