amazed by aws 1st session
DESCRIPTION
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.TRANSCRIPT
์๊ฐ
AWS ์๋ฃจ์ ์ํคํ ํธGaming/HPC
DevOps
System Admin
(์ญ๋ ์ ) Kernel driver dev.
์ค๋๋ด์ฉ
a. INTRO โ Ice breaking
b. Game Play Patterns
c. Relational DBMS
d. NoSQL
e. Search
์์ํ๊ธฐ์ ์.
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
$
$ 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 ๋ช ๋ น์ค๋๊ตฌ
Ice breaking
Amazon Web Services
Amazon Corporate Services Korea LLC
Our office
29th Sep 2014, 3AM
AWS ๊ด๋ จ๋ฌธ์์ฌํญ์์ฌ๊ธฐ๋ก[email protected]
๊ฐ๋ฐ์์๊ฒ AWS๋?
http://www.toptiertactics.com/wp-content/uploads/2011/10/Workaholic-Cartoon.jpg
Java Python PHP .NET Ruby nodeJS
iOS Android
AWS SDK
https://github.com/awslabs
ํ๋์ด์์๋ฐฐํฌ๋๊ตฌ์์ฌ์ฉ์ด์ค์
OpsWorks CloudFormation
Game type:
๋ชจ๋ฐ์ผ์ ๋ต
๋ฐ์ดํฐ๋ชจ๋ธ์๋ํด
๊ฐ์ข ์ํ์ ๋ณด : ๋ ๋ฒจ, ์์ฌ๋ฌ, ํธ๋กํผ, ๊ณจ๋๊ฑด๋ฌผ๋ฐฐ์น์ ๋ณด : ๋ด๋ฒผ๋ฝ, ์ฑ์์์น, ๋ํฌ์์น๊ฒ์ํ๋ ์ด์ํ์ ๋ณด : ์จ๋ผ์ธ, ์คํ๋ผ์ธ, ๊ณต๊ฒฉ๋ฐ๋์ค, ๊ณต๊ฒฉํ๋์ค์ ํฌ๊ธฐ๋ก์ ๋ณด : ์ธ์ ์ด๋์ ๋์์ด๋์ขํ์, ๊ณต๊ฒฉ/๋ฐฉ์ด๊ธฐ๋ก
๊ธฐํ :
ํธ๋กํผ๋ฅผํตํ์์๋น๊ต์ค์๊ฐ์ฑํ ์ฌ์ฉ์์ด์ฉํํ๋ก๊น
์ค์๊ฐ๋์ ์กฐ๊ฑด์ด๋ถ์ง์์ผ๋ฉด,
๋๋๋ถ์ผ๋ฉด?
์ํ์ ๋ณด
์์น์ ๋ณด
Game type:
๋ชจ๋ฐ์ผ์บ์ฃผ์ผ
๋ฐ์ดํฐ๋ชจ๋ธ์๋ํด
๊ฐ์ข ์ํ์ ๋ณด : ๋ ๋ฒจ, ์ค์ฝ์ด, ๊ณจ๋, ์์ดํ ํํฉ๊ธฐ๋ก์ ๋ณด : ์ธ์ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ๋ง์ง๋งํ๋ ์ด๋ ๋ฒจ
๊ธฐํ :
์ค์ฝ์ด๋ฅผํตํ์์๋น๊ต์ฌ์ฉ์์ด์ฉํํ๋ก๊น
ํด๋ผ์ด์ธํธ์์๊ฒ์๋ฐ์ดํฐ๊ฐ์์ฑBackend ๋๋ฐ์ดํฐ๊ธฐ๋ก, ์์, ๋ก๊น , ๋ถ์์์ํด์กด์ฌ
Game type:
FPS, TPS
๋ฐ์ดํฐ๋ชจ๋ธ์๋ํด
๊ฐ์ข ์ํ์ ๋ณด : ๋ ๋ฒจ, ์ค์ฝ์ด, ๊ณจ๋, ์์ดํ ํํฉ๊ธฐ๋ก์ ๋ณด : ์ธ์ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ๋ง์ง๋งํ๋ ์ด๋ ๋ฒจ๋ก๋น์ ๋ณด : ์ ํฌ๋ฐฉ์์ฑ์์ํ์ฑํ , ์ค๊ณ๋ฅผ์ํ์ธ์ ์ ๋ณด์์ ์ฅ์ํ์ ๋ณด : ํ์ฌ์ํ์ธ์ id ๋ฐํ๋ ์ด์ค์ธ room id ๋ฑ
๊ธฐํ :
์ค์ฝ์ด๋ฅผํตํ์์๋น๊ต์ฌ์ฉ์์ด์ฉํํ๋ก๊น
๋ก๊ทธ์ธ๋ฐ์บ๋ฆญํฐ๊ด๋ จ์ ๋ณด๋ฅผ์ ์ธํ๋ฉด๊ฑฐ์๋๋ถ๋ถ์ธ์ ์์ค๊ณ๋ฐ๊ฒฐ๊ณผ์ ๋ฐ์ดํธ์์ง์ค
Game type:
MMORPG
๋ฐ์ดํฐ๋ชจ๋ธ์๋ํด
๊ฐ์ข ์ํ์ ๋ณด : ๋ ๋ฒจ, ์ค์ฝ์ด, ๊ณจ๋, ์์ดํ ํํฉ์ด์ค์๊ฐ์ผ๋ก๋ณ๊ฒฝ๊ธฐ๋ก์ ๋ณด : ์ธ์ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ๋ง์ง๋งํ๋ ์ด๋ ๋ฒจ, ๋ฐ๋ฏธ์ง, ๋ชฌ์คํฐ๋ฐ PvP
์ ๋ณด๋ก๋น์ ๋ณด : ๊ฒ์๋ด์ค์๊ฐ์ฌ์ฉ์๊ฐ์ฑํ , ๊ณ ๊ฐ์ง์์ดํฌํจ์ํ์ ๋ณด : ์๋ฒ๊ฐ์บ๋ฆญํฐ์์์น์ ๋ณด, HP ๋ฐ๋ฐ๋ฏธ์ง, ๋ฐฉ์ด๋ ฅ๋ฑ๋ค์ํ์คํ ์ ๋ณดํ์
๊ธฐํ :
NPC ์์บ๋ฆญํฐ๊ฐ์ธํฐ๋ ์ ์ฌ์ฉ์ํ๋ ์ดํํ๋ก๊น
์ฌ์ฉ์์๋ชจ๋ ํ์์๋ํด์ค์๊ฐ์๊ฐ๊น์ด์๋ฒ๊ฐ๋๊ธฐํ๋ฑ์ดํ์
์ฌ๋ฐ๋ฅธ๋ฐ์ดํฐ๋ฒ ์ด์คํ์ ์์ ํ๋ฐ์ดํฐ์ํฐํฐ๊ฐ์๊ด๊ณ๊ฐํ์ํ๊ฐ?
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
๊ฒ์๋ฐ์ดํฐ๋ฒ ์ด์ค์ AWS
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
๊ตฌ์กฐํ๋๋ฐ์ดํฐ๋ฒ ์ด์ค โ๋ณต์กํ์ฟผ๋ฆฌ๋ฅผ์ง์-SQL : Amazon RDS
-Data Warehouse : Amazon Redshift
-Search : Amazon CloudSearch
๊ตฌ์กฐํ๋์ง์์๋ฐ์ดํฐ๋ฒ ์ด์ค โ์ปค์คํ ์ฟผ๋ฆฌ๋ฅผ์ง์-Hadoop : Elastic MapReduce
Database Overview
๊ตฌ์กฐํ๋๋ฐ์ดํฐ๋ฒ ์ด์ค โ๋จ์ํ์ฟผ๋ฆฌ๋ฅผ์ง์-NoSQL : DynamoDB
-Cache : ElastiCache
๊ตฌ์กฐํ๋์ง์์๋ฐ์ดํฐ๋ฒ ์ด์ค โ์ฟผ๋ฆฌ๋ฅผ์ง์ํ์ง์์- ํด๋ผ์ฐ๋์คํ ๋ฆฌ์ง : S3, Glacier
Database Overview
๊ด๊ณํ๋ฐ์ดํฐ๋ฒ ์ด์ค
SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info INNER JOIN purchases
ON customer_info.customer_number = purchases.customer_number;
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
์ฌ์ฉ์ด๊ถ์ฅ๋๋๊ฒฝ์ฐ
-ํธ๋์ญ์ -๋ณต์กํ์ฟผ๋ฆฌ๊ฐ์๊ตฌ๋๋๊ฒฝ์ฐ-์ต๋ 30,000 IOPS (15K reads, 15K writes)
-100๊ธฐ๊ฐ๋ฐ์ดํธ์์์ TB ์์ค-์ํฌ๋ก๋๊ฐ 1๋์์ค์์์ฒ๋ฆฌ๊ฐ๋ฅํ๊ฒฝ์ฐ-๋์๋ด๊ตฌ์ฑ์ด์๊ตฌ๋๋๊ฒฝ์ฐ
RDS
์ฌ์ฉ์ด๊ถ์ฅ๋์ง์๋๊ฒฝ์ฐ
-๋๋์ read/write ๊ฐ์๊ตฌ๋ ๋ (150,000 write request/sec)
-๋ฐ์ดํฐ์ํฌ๊ธฐ๋๋์ฒ๋ฆฌ๋์ผ๋ก์ค๋ฉ์๊ฒฐ์ ํด์ผํ๋๊ฒฝ์ฐ-NoSQL ๋ก์ฒ๋ฆฌ๊ฐ๊ฐ๋ฅํ์์ค์์ฟผ๋ฆฌ๋๋ Get/Put ์์์ฒญ์ด๋๋ถ๋ถ์ธ๊ฒฝ์ฐ-๋ณต์กํ๋ถ์์ดํ์ํ๊ฒฝ์ฐ
RDS
Windows ๊ธฐ๋ฐ์๊ฒ์ํ์ฌ์์๋ง์ด์ฌ์ฉEC2 / RDS ์์์ฌ์ฉ๊ฐ๋ฅEC2 ์์์ฌ์ฉ์ PIOPS ์ ์ฉ๋๋ค์์ EBS ๋ฅผํตํด ํ์ฅ
๊ฐ๋ฅi2 / r3 / c3 ๊ณ์ด์์ธ์คํด์ค์ฌ์ฉ๊ฐ๋ฅ์ข ์ ์๋ฐ์ดํฐ์ผ์์์์ฌ์ฉํ๋๋ชจ๋ ๊ตฌ์ฑ๊ทธ๋๋ก์ฌ์ฉ๊ฐ๋ฅ (SAN ๊ธฐ๋ฐํด๋ฌ์คํฐ๋ง์ ์ธ)
RDS ์์๋ 3๊ฐ์ region์์ Multi-AZ ์ง์10,000 PIOPS ์ ์ฉ๊ฐ๋ฅSYSADMIN ๊ณ์ ํ๋ณด๋ถ๊ฐDB ๊ฐ๋์์ค์ธ OS ์์ ๊ทผ๋ถ๊ฐ์ต์๋ณผ๋ฅจํฌ๊ธฐ 200G, ์ต๋๋ณผ๋ฅจํฌ๊ธฐ 1T
MSSQL
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
Region
Availability
Zone A Availability
Zone B
S3
EC2
โข ๊ฒ์์์ธ์ ๋ โWrite heavyโ
โข ์บ์ฑ์ด์ธ์ ๋ํตํ๋๊ฒ์์๋
โข ํค๋ฐธ๋ฅ / ํค๋ฐธ๋ฅ
โข ์ฆ์๋ฐ์ด๋๋ฆฌ์์ฌ์ฉ
โข ๋ฐ์ดํฐ๋ฒ ์ด์ค๋์ธ์ ๋๋ณ๋ชฉ
ELB
EC2
CloudFront
CDN
CUID ๋๊ดด๋กญ๋คใ ใ (creat/update/delete/insert)
Availability
Zone A
C2
Shard (No Fun)
๊ด๊ณํ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฑ๋ฅ์๊ทน๋ํ๋ฐฉ๋ฒ
1. EBS PIOPS ๋ณผ๋ฅจ์์ ๊ทน์ ์ธ์ฌ์ฉ2. Instance Store ์์ ๊ทน์ ์ธ์ฌ์ฉ3. ํ ์ด๋ธ์๋ง์๋ณผ๋ฅจ์๋ถ์ฐ์ ์ฅ, ํ ์ด๋ธ์์๋ก๋ค๋ฅธ
๋ณผ๋ฅจ์์ ์ฅ
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
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 ๋์ฌ๋ถํ ์๋ฐ์ดํฐ๊ฐ์ฌ๋ผ์ง
๋ฐ๋ผ์๋ณต์ /๋ณต๊ตฌ/๋ฐฑ์ ์๋ํดํ์คํ๋๋น๊ฐํ์
ํ์คํ๋๋น์์ด๋์ฌ์ฉ์์ฃผ์!!!!!
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
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>
์ฌ์ฉ์ด๊ถ์ฅ๋๋๊ฒฝ์ฐ
-์์ธก๊ฐ๋ฅํ, ๋น ๋ฅธ์๋๊ฐ์๊ตฌ๋๋๊ฒฝ์ฐ-์์๊ฐ์๋๊ท๋ชจํ์ฅ์๊ตฌ์ฌํญ์ด์๋๊ฒฝ์ฐ-์ค๋ฉ์์๋์ผ๋กํด์ผํ๋๊ฒฝ์ฐ-๋ฐ์ดํฐ์์ ํฉ์ฑ๊ณผ๋ฎ์์ง์ฐ์๊ฐ์ด๋์์ํ์ํ๊ฒฝ์ฐ-๋ฐ์ดํฐ์ ์ฅ์ํฌ๊ธฐ๋ฐ์ฒ๋ฆฌ๋์ํ๊ณ๋ฅผ์ค์ ํ ์์๋๊ฒฝ์ฐ-์์ฃผ๋์๋ด๊ตฌ์ฑ์ด์๊ตฌ๋๋๊ฒฝ์ฐ-๊ฐ๋จํ์ฟผ๋ฆฌ๋๋ KV ์ ์ฅ์๊ฐ์๊ตฌ๋๋๊ฒฝ์ฐ
DynamoDB
์ฌ์ฉ์ด๊ถ์ฅ๋์ง์๋๊ฒฝ์ฐ
-๋ค์์์์ดํ ๋๋ row ๋ฐ์๋ก๋ค๋ฅธํ ์ด๋ธ์ฐธ์กฐํธ๋์ญ์ ์ดํ์ํ๊ฒฝ์ฐ-๋ณต์กํ์ฟผ๋ฆฌ๋ฐ์กฐ์ธ์ดํ์ํ๊ฒฝ์ฐ-๋ก๊ทธ์ฑ๋ฐ์ดํฐ์๋ํ์ค์๊ฐ๋ถ์์ดํ์ํ๊ฒฝ์ฐ-์์ฃผ์ฐธ์กฐ๋์ง์๋๋ฐ์ดํฐ๋ฅผ์ ์ฅํ๊ณ ์ํ๋๊ฒฝ์ฐ
DynamoDB
ํด๋ฌ์คํฐ์๋์์ฑ โ Master : Multi replication nodes
Auto Backup
Auto Failover
Restore from rdb file
ElastiCache - Redis
์ต๊ทผ์๊ฒ์์์๋ pub/sub ์ํตํ๋ฐ์ดํฐ๊ณต์ ์์ฌ์ฉ์ข ์ ์ UDP/TCP broadcast ๋ฅผ๋์ฒ๊ฐ๋ฅIn-memory ์ฒ๋ฆฌ๋ก๋งค์ฐ๊ณ ์
Redis โ pubsub
๊ฒ์์๋ฒ๊ฐ์ด๋ฒคํธ๊ณต์
์ฌ์ฉ์ด๊ถ์ฅ๋๋๊ฒฝ์ฐ
-ํ์ฅ๋๋ฐ์ดํฐ๋ชจ๋ธ๊ณผํจ๊ป KV ์ ์ฅ์๊ฐํ์ํ๊ฒฝ์ฐ : string, lists, sets,
sorted sets, hashes
-์บ์ฑ-Leader board (๋ฆฌ๋๋ณด๋)
-๊ณ ์์์ ๋ ฌ-์์๋จ์์์นด์ดํ -ํ์์คํ ์ดํ์ํ๊ฒฝ์ฐ
ElastiCache โ Redis
์ฌ์ฉ์ด๊ถ์ฅ๋์ง์๋๊ฒฝ์ฐ
-Native ํ์ค๋ฉ๋๋ Scale-out ์ดํ์ํ๊ฒฝ์ฐ-์์ฃผ๋์์์ค์๋ฐ์ดํฐ๋ณด์กด์ฑ์ด์๊ตฌ๋๋๊ฒฝ์ฐ-๋ฉ๋ชจ๋ฆฌ์์ ํฉํ์ง์์๋ฐ์ดํฐ๋ฅผ๋ณด์ ํ๊ณ ์๋๊ฒฝ์ฐ-์์ธ์ํฉ์์๋ํน์ ํธ๋์ ์ ์๋ํ๋กค๋ฐฑ์ดํ์ํ๊ฒฝ์ฐ
ElastiCache โ Redis
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
http://media.amazonwebservices.com/AWS_NoSQL_Couchbase.pdf
Minimum production45GiB (20 x m1.large)
5Gbps access EBS
Up to 80,000 IOPS
Medium production410GiB
10Gbps access EBS
Up to 640,000 IOPS
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
https://media.amazonwebservices.com/AWS_NoSQL_MongoDB.pdf
http://www.youtube.com/watch?v=hYtRw3Zb6AY
Cassandra + OpsWorks
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
DynamoDB, ์กฐ๊ธ๋๊น๊ฒ
NoSQL ์์ข ๋ฅ
MongoDB
Riak
Hbase
Cassandra
Neo4j
CouchDB
DynamoDB
์ด์ธ์๋๋๋ง์ NoSQL ์ด์กด์ฌ
NoSQL vs. RDB
BASE ์ํน์ฑ
๋์ฉ๋๋ฐ์ดํฐ
ํ์ฅ๊ฐ๋ฅ
๋น ๋ฅธ์ฐ๊ธฐ์๋
์ ์ฐํ์คํค๋ง์ค์
ACID ํน์ฑ- Atomicity
- Consistency
- Isolation
- Durability
ํธ๋์ ์ ๊ธฐ๋ฐ
Richํ์ฟผ๋ฆฌ
์กฐ์ธ
NoSQL RDB
BASE ํน์ฑ์ด๋
Basically Available, Soft state, Eventually consistent
์ฆ,
๋ฐ์ดํฐ์์ฆ์๋ฐ์์ํตํ๋์์ผ๊ด์ฑ์์ผ๋ถํฌ๊ธฐํ๋๋์ ,
ํ์ฅ์ฑ์ํน์ง์ผ๋ก.
๋ชจ๋ NoSQL ์ด์์ ํ BASE์ํน์ฑ์๊ฐ์ง์ง๋์์ง๋ง๊ธฐ์กด RDB
์ ACID ํน์ฑ์ ํฌ๊ธฐํด์ผํ๋๊ฒ์ด์๊ตฌ์ฌํญ์ด๋๋ค.
API
SDK
Database
Clie
nt S
ide
Serv
ice S
ide
Client application
DynamoDB ์์ฌ์ฉ
ํน์ง๏ผ๏ผ๊ด๋ฆฌ๊ฐํ์์๋๋์์ ๋ขฐ์ฑ
SPOF๊ฐ์กด์ฌํ์ง์๋๊ตฌ์ฑ๋ฐ์ดํฐ๋ 3๊ฐ์์ AZ์๋ถ์ฐ์ ์ฅ๋์ด๋์์ ๋ขฐ์ฑ์คํ ๋ฆฌ์ง๋ํ์์๋ฐ๋ผ์๋์ผ๋ก๋ถ์ฐ์ฒ๋ฆฌ
Client
ํน์ง๏ผ๏ผ์ฒ๋ฆฌ๋์ํ๋ก๋น์ ๋๊ฐ๋ฅ
Read ๋ฐ Write, ๊ฐ๊ฐํ์ํ๋งํผ์์ฒ๋ฆฌ์ฉ๋์ํ ๋น์๋ฅผ๋ค์ด์ผ๋ฐ์ ์ธ Read Heavy DB ๋ผ๋ฉด
Read : 1,000
Write : 100์ฝ๊ฐ Heavy ํ DB์๊ฒฝ์ฐ
Read : 500
Write : 500์ด์ค์ ๊ฐ์ DB ์ด์์ค์์จ๋ผ์ธ์ผ๋ก๋ณ๊ฒฝ๊ฐ๋ฅ
Scale-down์ ๊ดํด์๋ํ๋ฃจ 4ํ๋ง๊ฐ๋ฅ
ํน์ง๏ผ๏ผ์ ์ฅ์ฉ๋์์ ํ์ด์๋
์ฌ์ฉํ๋งํผ์ง๋ถํ๋์ข ๋์ ์คํ ๋ฆฌ์ง๋ฐ์ดํฐ์ฉ๋์ฆ๊ฐ์๋ฐ๋ฅธ๋ ธ๋์ถ๊ฐ์๊ฐ์์์ ์ด๋ถํ์
DynamoDB๋ฅผ์์ํ๋ ค๋ฉด
1. ํ ์ด๋ธ์ Key ์ Index ๋ฅผ๊ฒฐ์
2. Read/Write ์ฒ๋ฆฌ๋์๊ฒฐ์
Thatโs it, write your code!
DynamoDB Demo - Tic Tac Toe Game
https://github.com/awslabs/dynamodb-tictactoe-example-app
DynamoDB ์ฌ์ฉ
์ ๊ณต๋๋ API
PutItem
UpdateItem
GetItem
DeleteItem
Query
Scan
BatchWriteItem
BatchGetItem
CreateTable
DescribeTable
UpdateTable
DeleteTable
์ฃผ๋ก์ฌ์ฉ๋๋๊ธฐ๋ฅ
โข Get/Put/Update/Delete/BatchGet
โข Scan
์ ์ฒดํ ์ด๋ธ์์น์ธ์ด๋ก๊ธ์ด์ด
โข Query
Hash + ๋ฒ์ํค๋ง
๊ณต์ SDK ์ด์ธ์๋
Perl
Net::Amazon::DynamoDB
Erlang
wagerlabs/ddb
https://github.com/wagerlabs/ddb
Go
go-dynamodb
https://github.com/fabiokung/go-dynamodb
ํ ์ด๋ธ๋์์ธ์์ํ์์๏ผ๏ผ๏ผ
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 ๋ก์ง์ ๊ฐ๋ฅ
ํ ์ด๋ธ๋์์ธ์์ํ์์๏ผ๏ผ๏ผ
Attributes
๋ฐ์ดํฐ์๋ด์ฉ. Hash key ์ํด๋นํ๋ Attributes ์ด์ธ์๋๋ฏธ๋ฆฌ์ ์ํ ํ์๋์๋ค. ๋ํ๋ ์ฝ๋์์ Attributes ๊ฐ๋ถ๊ท์นํ๋๋ผ๋๋ฌธ์ ์๋ค.
Attributes ํ์
String
Number
Binary
Array of String
Array of Number
Array of Binary
DynamoDB์๋ฐ์ดํฐ๋ชจ๋ธ
ํ ์ด๋ธ
์์ดํ
๊ธฐ๋ณธ ํค ์์ฑ
Hash key ๋๋ Hash key & Range key
DynamoDB์๊ธฐ๋ณธํค
โข Hash key
๊ฐ๋จํํค๊ฐ
Hash ์ด๋ฏ๋ก์ ๋ ฌ์ดํ์์์
โข Hash key + Range key
๋ณตํฉ๊ธฐ๋ณธํค
Range key ๋ sort ๊ฐ์์
์ํ๏ผ๏ผ๏ผ์ํ์นดํ๋ก๊ทธ
์คํค๋งํ ์ด๋ธ๋ช Products
์ํ ID(ProductId) ๋ฅผํ ์ด๋ธ์ Hash key ๋ก์ฌ์ฉ
ProductId
(Hash key)
ProductName Price ใปใปใป ใปใปใป
1 Pen 100 ใปใปใป ใปใปใป
2 Pencil 50 ใปใปใป ใปใปใป
3 Eraser 100 ใปใปใป ใปใปใป
node.js SDK ์ฌ์ฉ์
๋ฐ์ดํฐ๋ฅผํ ์ด๋ธ์์ ๋ ฅ
์ํ๏ผ๏ผ๏ผ๋ก๊ทธํ ์ด๋ธ
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);
}}
);}
node.js SDK ์ฌ์ฉ์
์ฌ์ฉ์์ 10์ 1์ผ 0์ 10๋ถ์ดํ์๋ก๊ทธ๋ฅผ๊ฐ์ ธ์ค๊ธฐ
์ํ๏ผ๏ผ๏ผ๋ก๊ทธํ ์ด๋ธ
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);
}}
);
์ํ๏ผ๏ผ๏ผ 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
Local Secondary Indexes๏ผLSI)
โข Get/Put/Update/Delete/BatchGet
โข Scan
ํ ์ด๋ธ์์ ์ฒด๋ด์ฉ์๊ฐ์ ธ์ด
โข Query
Hash + Range ํค๋ง๊ฐ์ ธ์ด
Local Secondary Index ๋ฅผ์ฌ์ฉํ์ฌ์ด์ ํ์์์จ์์๋ค!
Local Secondary Indexes (LSI)
ํ ์ด๋ธ์์์ด๋ ํ Index ๋ฅผ Query ๋ก์ฌ์ฉํ ์ง์๋ํ์
5๊ฐ์ LSI ์ง์ ์ด๊ฐ๋ฅ
LSI์๋ํ ์ด๋ธ์์๋ Range
Key๋ฅผ์ฌ์ฉํ Query ๋ง๊ฐ๋ฅ
LastPostIndex
RepliesIndex
LSI๋ฅผ์ ์ํ๋ฉด Key๊ฐ์๋์์ฑ์๋ํด์๋ Query ๊ฐ๋ฅ์๏ผ
- Replies ๊ฐ 10๊ฐ์ด์- ๋ง์ง๋ง๊ฒ์๋ฌผ์ด XX ์ดํ
LSI
Forum ๊ฒ์๋ฌผ์๋ณด๊ดํ๋ํ ์ด๋ธ์๊ตฌ์กฐ
์ด์งธ์ โLocalโ Secondary Indexes ์ธ๊ฐ๏ผ
Hash key ๊ฐ์ผ์นํ๋๋ฒ์๋ด์์์ Secondary Index ์ด๋ฏ๋ก
Hash Key ๊ฐ๋ค๋ฅธํญ๋ชฉ์๋ํด Query ๊ฒฐ๊ณผ๋ก๊ฐ์ ธ์ฌ์์๋ค
RepliesIndex ๋ฅผ์ฌ์ฉํ์ฌ๏ผ๊ฐ์Query๋ก ๊ฐ์ ธ์ฌ์์๋๋ฐ์ดํฐ๋?
โขForumName ์ด S3 ์ด๋ฉฐ, Replies
๊ฐ 9๊ฐ์ด์
โข๋ชจ๋ ForumName ์์Replies๊ฐ ๏ผ์ด์ 3๊ฐ์ Hash key๊ฐ์์ผ๋ฏ๋ก3 ํ์ Query ํ์
RepliesIndex
LSI ๋ฅผ์ค์ ํ๊ฒฝ์ฐ์์ค์ ๋์
Thread ํ ์ด๋ธ์ LastPostDateTime์ LSI ๋ฅผ์ค์ ํ๋ฉด,
LastPostIndex
๋ณ๋์ Index ํ ์ด๋ธ์ด๋ค์์์์ฑ, ๊ด๋ฆฌ๋จ
โข ์ง์ ๋์์ฑ์ด Range-key
โข ์๋ํ ์ด๋ธ์ Range-key ๊ฐ์์ฑ์ผ๋ก
์์ฑ์ํ๋ก์ ์ Index ์ฉํ ์ด๋ธ์์ง์ ๋์์ฑ์๋ณต์ ์ ์ฅํ๋๊ธฐ๋ฅ
์๏ผThread ํ ์ด๋ธ์ Replies๋ฅผ LastPostIndex์ํ๋ก์ ์
LastPostIndex
Query ์ํ์ Replies๋ฅผ์ทจ๋ํ๋๊ฒฝ์ฐ Load ๋น์ฉ์์ ๊ฐ์ฑ๋ฅํฅ์ ReadThroughput ์์ ์ฝ๊ฐ๋ฅ
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!
๊ฒ์ด๋จธ์ํ๋ ์ด๋ฐ์ดํฐ์ด๋ ฅ
์ฌ์ง๊ณต์ 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
Users TableFriends Table
ํ ์ด๋ธ 2๊ฐ๋ฅผ์ ์โข ์ฌ์ฉ์์ ๋ณดํ ์ด๋ธ
โข ์น๊ตฌ๋ชฉ๋กํ ์ด๋ธ
ํ ์ด๋ธ์ค๊ณ
User
(Hash)
Nicknames
Bob [ Rob, Bobby ]
Alice [ Allie ]
Carol [ Caroline ]
Dan [ Daniel, Danny ]
Users Table
Item
Attribute
(string, number, binary, set)
Primary Key
(Hash)
์น๊ตฌ๋ชฉ๋ก๊ฒ์
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
์น๊ตฌ๋ชฉ๋ก๊ฒ์
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)
์น๊ตฌ๋ชฉ๋ก๊ฒ์
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)
๊ฒ์๋ฌผ๊ฒ์
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=*)
๋ง์ฝํน์ ์๊ฐ์ดํ์์ฌ์ง๋ชฉ๋ก์๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด?
์ด๋ฏธ์ง๊ฒ์
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 ์์ฑ์์ ์ฉ
๋ ์ง๋ฐ์๊ฐ์ด๋ฏธ์ง์์ง
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 = *)
์ด๋ฏธ์ง์์ฌ์ฉ์๋ฅผํ๊ทธ
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 ๊ฐํ๊ทธ๋์ฌ์ง๋ชฉ๋ก
์ฌ์ฉ์์ํ๊ทธ์ด๋ฏธ์ง๋ชฉ๋ก
ํ ์ด๋ธ๋์์ธ: ๊ธฐ๋ณธํค์์ฌ์ฉ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 ์ผ๋ก ํ๋ก๋น์ ๋๋ ์ฒ๋ฆฌ๋์ด๋์ค๋ ๊ฒ์ด ์๋์ ์ฃผ์
A,D B,E C,F
1
23
45
67
89
Parition1 Partition2 PartitionN
Partition
DynamoDB ๋ํ๋ก๋น์ ๋๋์ฒ๋ฆฌ๋์๋ณด์ฅํ๊ธฐ์ํด๋ฐ์ดํฐ๋ฅผ์ฌ๋ฌํํฐ์ ์๋ถ์ฐ์ ์ฅํ๋ค.
Partition์์ ์ฅ๋๋ฐ์ดํฐ๋๊ณผํ๋ก๋น์ ๋ํ์ฒ๋ฆฌ๋์์ํด์๋์ผ๋ก๋ค์ํํฐ์ ๋ํ๋ค.
์ง๊ธํ์ฌ์ํํฐ์ ์๋ฅผํ์ธํ๋๊ฒ์๋ถ๊ฐ๋ฅ
ํ ์ด๋ธ๋์์ธ: ๊ธฐ๋ณธํค์์ฌ์ฉ
A,D B,E C,F
1
23
45
67
89
Parition1 Partition2 ParitionN
์ฒ๋ฆฌ๋์ํํฐ์ ์๊ท ๋ฑํ๊ฒ๋ถํ ๋๋ค.
ํ๋ก๋น์ ๋๋์ฒ๋ฆฌ๋์๊ฐํํฐ์ ์๊ท ๋ฑํ๊ฒ๋ถํ ๋๋ฉฐ, ๊ฐํฉ์์ง์ ํ์ฒ๋ฆฌ๋์ด๋์ค๋๋ก์ค๊ณ๋์ด์๋ค.
๋ฐ๋ผ์์์ธ์คํค์ํธํฅ์ด๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด๋ง์๊ตฌ์กฐ๋กํ ์ด๋ธ์ด์ค๊ณ๋์ด์๋ค๋ฉด์ํ๋๋งํผ์ฑ๋ฅ์ด๋์ค์ง์์๊ฐ๋ฅ์ฑ์ด์์ผ๋ฏ๋ก์ฃผ์ํด์ผํ๋ค.
ํ๋ก๋น์ ๋๋์ฒ๋ฆฌ๋ : x
x/N x/N x/N
ํ ์ด๋ธ๋์์ธ: ๊ธฐ๋ณธํค์์ฌ์ฉ
ํ ์ด๋ธ๋์์ธ: ๊ธฐ๋ณธํค์์ฌ์ฉ
Hot Key๋ฌธ์ ๏ผํน์ Hash key์๋ฐ์ดํฐ๊ฐ์ง์ค๋๋ฉด์ฑ๋ฅ์ด์ ํ๏ผ์์๋๋ก์์ฑ๋ฅ์ด์๋๏ผ๋จ์์ฃผ์
์์ Audience ํ ์ด๋ธ์์ AudienceId์ฒ๋ผ๋ฐ์ดํฐ๊ฐํน์ ํค์์ง์คํ๊ธฐ์ด๋ ค์ด๊ฒ์์ ํํ๋ค
์๋ฅผ๋ค์ด,ใ๋ ์ใ๊ณผ๊ฐ์ด๋ฐ์ดํฐ์์ง์ค์ด๋ฐ์ํ๊ธฐ์ฌ์ด๋ฐ์ดํฐ๋ฅผ Hash key๋ก์ ํํ๋๊ฒ์์ํฐํจํด
ํ ์ด๋ธ๋์์ธ: LSI
Local Secondary Indexes๋์ ์ฅ์์ IO ๋น์ฉ์ฆ๊ฐ๋ฅผ๋ฐ์์ํฌ์์์
LSI๋์์ โProjectionโ์์๊ตฌํ๋๋ค
๋ฐ๋ผ์ Projection ๋๋์์ฑ์ด๋ง์์๋ก์คํ ๋ฆฌ์ง๋น์ฉ์ด์ฆ๊ฐ
Write์์ฐ๊ธฐ๋น์ฉ์ญ์์ฆ๊ฐ
๋ฐ๋์ํ์ํ์กฐ๊ฑด์๋ง LSI ๋ฅผ์ฌ์ฉProjection์ดํ์ํ Attributes๋ง์ ํํ๋๋กํ๋ค
DynamoDB Local
๊ฐ๋ฐ๋ฐํ ์คํธ์ฉ๋๊ตฌ
์ด์ ๊น์ง๋๊ฐ๋ฐ๋ฐํ ์คํธ๋ฅผ์ํด์๋๋ฐ๋์ DynamoDBํ ์ด๋ธ์์์ฑํด์ผํ๋ค. ์ด๋ โ๋น์ฉ๋ฐ์์์ฐ๋ คโใโ๋ด๋ถํ ์คํธํ๊ฒฝ๊ตฌ์ฑ๋ถ๊ฐโใโ์คํ๋ผ์ธ์ผ๋ก๊ฐ๋ฐ๋ถ๊ฐ๋ฅโ๊ณผ๊ฐ์๋ฌธ์ ๊ฐ์์์
์ด๋๊ตฌ๋ฅผ์ฌ์ฉํ์ฌ๊ฐ๋ฐ๋ฐํ ์คํธ๋ฅผ๋ณด๋คํธ๋ฆฌํ๊ฒ์ํํ ์์์JARํ์ผ๋ก์ ๊ณต๋์ด๋ก์ปฌ์์ค์น๋ฐ์คํ๊ฐ๋ฅ (Java7)๋จ์ํ API์๊ธฐ๋ฅ์ฌํ์์ํํ ์คํธ์ฉ๋๊ตฌ์ด๊ธฐ๋๋ฌธ์์๋น์คํ๊ฒฝ์๋์ฌ์ฉ์ด๋ถ๊ฐ๋ฅํ๋ก๋น์ ๋์ฒ๋ฆฌ๋์๋ฐ์๋์ง์์ผ๋ฏ๋ก์ฃผ์์์ธํ๋ด์ฉ์ AWS document ๋ฅผ์ฐธ์กฐ
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
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;
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;
http://www.youtube.com/watch?v=Dh8kp1AcRg0
https://github.com/Aconex/scrutineer
-์คํ์์ค : elasticsearch.com ํตํด์ํฌํธ๊ฐ๊ฐ๋ฅ-๋ถ์ฐ๊ฒ์์์ง-ํด๋ฌ์คํฐ๋งํํ๋ก๊ตฌ์ฑ์ด๊ฐ๋ฅ-๊ณ ๊ฐ์ฉ์ฑ-๋ค์ค์ฌ์ฉ์ํ๊ฒฝ
https://github.com/kzwang/elasticsearch-river-dynamodb
River
http://docs.couchbase.com/couchbase-elastic-search/
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
์ฌ์ฉ์ด๊ถ์ฅ๋๋๊ฒฝ์ฐ
-๊ฒ์์๋ํด๋ด๊ฐ์ ๋ฌธ์ฑ์ด์๋ค๊ณ ํ๋จ๋๋๊ฒฝ์ฐ-Full-text ๊ฒ์์ดํ์ํ๊ฒฝ์ฐ-๋ญํน-๊ฒ์-๊ตฌ์กฐํ๋๋ฐ์ดํฐ์๊ตฌ์กฐํ๋์ง์์๋ฐ์ดํฐ๊ฐํผ์ฌํ๋๊ฒฝ์ฐ
CloudSearch
์ฌ์ฉ์ด๊ถ์ฅ๋์ง์๋๊ฒฝ์ฐ
-๋ค์์์์ดํ ๋๋ row ๋ฐ์๋ก๋ค๋ฅธํ ์ด๋ธ์ฐธ์กฐํธ๋์ญ์ ์ดํ์ํ๊ฒฝ์ฐ-๋ณต์กํ์ฟผ๋ฆฌ๋ฐ์กฐ์ธ์ดํ์ํ๊ฒฝ์ฐ-๋ก๊ทธ์ฑ๋ฐ์ดํฐ์๋ํ์ค์๊ฐ๋ถ์์ดํ์ํ๊ฒฝ์ฐ-์์ฃผ์ฐธ์กฐ๋์ง์๋๋ฐ์ดํฐ๋ฅผ์ ์ฅํ๊ณ ์ํ๋๊ฒฝ์ฐ
CloudSearch
http://www.youtube.com/watch?v=mdj8RQhqOEg
Write once
Read many then,
s3://mys3database/HASHasFILENAME.JSON
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
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
aws.amazon.com/ko/game-hosting