30
Copyright © 2014. All rights reserved. 201527JAWS-UG KANSAI特別編 ハンズラボ株式会社 井上 泰治 DynamoDBの紹介と東急ハンズでの活用について

Amazon DynamoDBの紹介と東急ハンズでの活用について

Embed Size (px)

Citation preview

Page 1: Amazon DynamoDBの紹介と東急ハンズでの活用について

Copyright © 2014. All rights reserved.

2015年2月7日

JAWS-UG KANSAI特別編

ハンズラボ株式会社井上泰治

DynamoDBの紹介と東急ハンズでの活用について

Page 2: Amazon DynamoDBの紹介と東急ハンズでの活用について

1

自己紹介

井上 泰治

ハンズラボ株式会社

主に、EC系(ハンズネット等)担当

日本酒とビールが好き。

Page 3: Amazon DynamoDBの紹介と東急ハンズでの活用について

2

もくじ

1. Amazon DynamoDBの紹介

2. 東急ハンズでの活用について

3. おまけ(DynamoDB最新情報)

Page 4: Amazon DynamoDBの紹介と東急ハンズでの活用について

3

1. Amazon DynamoDBの紹介

Amazon DynamoDBの特徴

1. AWS完全マネージドのデータストア2. スケーラビリティ3. 高信頼性4. 柔軟な料金体系5. データ・モデル

Page 5: Amazon DynamoDBの紹介と東急ハンズでの活用について

4

1. Amazon DynamoDBの紹介

- 構築不要- 自分でインストールする必要がない

- 運用不要- 落ちないように中の人が頑張ってくれる

- 万が一何かあったらAWSのせいにできる

エンジニアの精神衛生の向上!!

特徴1: AWS完全マネージドのデータストア

Page 6: Amazon DynamoDBの紹介と東急ハンズでの活用について

5

1. Amazon DynamoDBの紹介

- 必要に応じて自動的にスケールアウト- 必要性=データ容量 or スループット

特徴2: スケーラビリティ

レプリケーションやシャーディングなどを考慮する必要がない。▶ データ量、アクセス数が増えても、アプリケーションに手を入れなくて済む

Read Capacity

2,000

Read Capacity

10,000 :

scale

Page 7: Amazon DynamoDBの紹介と東急ハンズでの活用について

6

1. Amazon DynamoDBの紹介

- 1回の書き込みリクエストで、3ヶ所のAZ

に保存される

特徴3: 高信頼性

Availability Zone

Availability Zone

Availability Zone

instance

Write

Page 8: Amazon DynamoDBの紹介と東急ハンズでの活用について

7

1. Amazon DynamoDBの紹介

• スループットと容量により決定• 指定したスループットにより時間あたりの料金が決定。

• 容量による課金は、めちゃ安いので考えるのやめた。

• リザーブド(前払い)による割引あり。

特徴4: 柔軟な料金体系

Page 9: Amazon DynamoDBの紹介と東急ハンズでの活用について

8

1. Amazon DynamoDBの紹介

- スキーマレスKey-Valueストア(インデックス以外)

- 検索はインデックスでのみ可能- インデックスは事前に作成しておく- JSON形式のデータ型もサポート

user_id name age created_at

1 John 20 2015-01-03

2 David 33 2015-01-11

3 Anthony 18 2015-01-18

テーブル

項目(≒レコード)

属性(≒カラム)

特徴5: データ・モデル

GSIが後から作成できるようになりました!

(2015/1/27 発表)

Page 10: Amazon DynamoDBの紹介と東急ハンズでの活用について

9

1. Amazon DynamoDBの紹介

Amazon DynamoDBのデータ・モデル

1. データ型2. インデックスとクエリ

Page 11: Amazon DynamoDBの紹介と東急ハンズでの活用について

10

1. Amazon DynamoDBの紹介

• 属性(Attribute)は型を持つ• インデックスは指定した型の値を入れる必要がある• それ以外はレコード毎に型や属性名はバラバラでOK

• 利用できるデータ型は以下のとおり

1. データ型

名称 説明

String 文字列

Number 数値

Binary バイナリ

String Set 文字列の配列

Number Set 数値の配列

Binary Set バイナリの配列

名称 説明

List JSONの配列のような順序付き集合

Map JSONのオブジェクトのようなKey-Value

ペア

Boolean 真偽値

Null NULL値

※ インデックスに使用できるのは String、Number、Binaryのみ

Page 12: Amazon DynamoDBの紹介と東急ハンズでの活用について

11

1. Amazon DynamoDBの紹介

プライマリインデックス

グローバルセカンダリインデックス(GSI)

ローカルセカンダリインデックス(LSI)

• DynamoDBはインデックスでしか検索ができないため、検索したい項目にはインデックスを作成しておく必要がある。

• スキーマレスといいつつ、インデックスだけはちゃんと考えないとダメ。

• インデックスは、Hash Key と Range Keyという2つの属性の組み合わせで作成する。

• インデックスには下記3種類がある

2. インデックス

Page 13: Amazon DynamoDBの紹介と東急ハンズでの活用について

12

1. Amazon DynamoDBの紹介

プライマリインデックス

- テーブルに必ず1つ作成するインデックス- Hash Keyのみと、Hash Key + Range Key の2種類から選択- 各インデックスでユニークになる必要がある- データ型は、String / Number / Binary から選択

id name age

1 John 20

2 David 33

3 Anthony 18

user_id friend_id

1 2

1 3

2 1

HK HK RK

テーブル: users (HKの例) テーブル: friends (HK+RKの例)

2. インデックス

Page 14: Amazon DynamoDBの紹介と東急ハンズでの活用について

13

1. Amazon DynamoDBの紹介

ローカルセカンダリインデックス(LSI)

- プライマリインデックスのHash Key に別のRange

Keyを設定できるようなイメージ- 同じ Hash Key内でのみ検索、ソートが可能

user_id friend_id mute_flag

1 2 1

1 3 0

2 1 1

HK LSI:RK

SELECT * FROM friends

WHERE user_id = 1

AND mute_flag = 0

<Queryイメージ>RK

テーブル: friends

2. インデックス

Page 15: Amazon DynamoDBの紹介と東急ハンズでの活用について

14

1. Amazon DynamoDBの紹介

グローバルセカンダリインデックス(GSI)

- プライマリインデックスとは別にHash Key , Range

Key を追加できる- Hash Keyをまたいだ検索が可能

user_id name country age

1 John Japan 20

2 David US 33

3 Anthony Australia 18

GSI:RKGSI:HKHK

SELECT * FROM users

WHERE country = ‘US’

AND age >= 20

<Queryイメージ>

テーブル: users

2. インデックス

プライマリのHKとは関係ない

テーブル縦断したクエリが実行できる

Page 16: Amazon DynamoDBの紹介と東急ハンズでの活用について

15

1. Amazon DynamoDBの紹介

今紹介した、3つのインデックスを活用して、アプリケーションを実装することになります。

DynamoDBはインデックス設計がキモになります。

2. インデックス

Page 17: Amazon DynamoDBの紹介と東急ハンズでの活用について

16

1. Amazon DynamoDBの紹介

マネージメントコンソールからテーブル作成

DynamoDBの始め方

もちろん、aws cli からもできます。

テーブル名

Primary Key(インデックス)

- Hash Key

- Range Key

スループット- Read Capacity

- Write Capacity

Page 18: Amazon DynamoDBの紹介と東急ハンズでの活用について

17

1. Amazon DynamoDBの紹介

各言語のSDKがあるので、好きな言語で遊んでみる。

DynamoDBの始め方

Java Python PHP

.NETRuby Node.js など

Gophar君が仲間になりたそうにこっちをみている。

New !

Page 19: Amazon DynamoDBの紹介と東急ハンズでの活用について

18

1. Amazon DynamoDBの紹介 (1)

ローカルで開発するには、DynamoDB Localを

DynamoDBの始め方

• 無料で使えるDynamoDB疑似環境• Javaが動く環境であれば動く(はず)• JavaScript Shell が同胞されており、ブラウザから試せる

Page 20: Amazon DynamoDBの紹介と東急ハンズでの活用について

19

1. Amazon DynamoDBの紹介

2. 東急ハンズでの活用について

3. おまけ(DynamoDB最新情報)

Page 21: Amazon DynamoDBの紹介と東急ハンズでの活用について

20

2. 東急ハンズでの活用方法について

• 毎年8月末にハンズ恒例の大セール「ハンズメッセ」開催。

• ネットストア(ハンズネット)も同時開催• セール開始時(00:00)にお客様が殺到• サーバーが落ちる

• というのを2年くらい経験

Amazon DynamoDB導入の背景

コストを抑えつつ、セールの爆発的なトラフィックにも耐えられる仕組みの構築が急務

Page 22: Amazon DynamoDBの紹介と東急ハンズでの活用について

21

2. 東急ハンズでの活用方法について

参考: セール時のスパイクアクセス

0.00

50.00

100.00

150.00

200.00

250.00

300.00

350.00

400.00

450.00

500.00

20

14-0

8-2

7 2

3:4

0

20

14-0

8-2

7 2

3:4

4

20

14-0

8-2

7 2

3:4

8

20

14-0

8-2

7 2

3:5

2

20

14-0

8-2

7 2

3:5

6

20

14-0

8-2

8 0

0:0

0

20

14-0

8-2

8 0

0:0

4

20

14-0

8-2

8 0

0:0

8

20

14-0

8-2

8 0

0:1

2

20

14-0

8-2

8 0

0:1

6

20

14-0

8-2

8 0

0:2

0

20

14-0

8-2

8 0

0:2

4

20

14-0

8-2

8 0

0:2

8

20

14-0

8-2

8 0

0:3

2

20

14-0

8-2

8 0

0:3

6

20

14-0

8-2

8 0

0:4

0

20

14-0

8-2

8 0

0:4

4

20

14-0

8-2

8 0

0:4

8

20

14-0

8-2

8 0

0:5

2

20

14-0

8-2

8 0

0:5

6

20

14-0

8-2

8 0

1:0

0

20

14-0

8-2

8 0

1:0

4

20

14-0

8-2

8 0

1:0

8

20

14-0

8-2

8 0

1:1

2

20

14-0

8-2

8 0

1:1

6

20

14-0

8-2

8 0

1:2

0

20

14-0

8-2

8 0

1:2

4

20

14-0

8-2

8 0

1:2

8

20

14-0

8-2

8 0

1:3

2

20

14-0

8-2

8 0

1:3

6

20

14-0

8-2

8 0

1:4

0

20

14-0

8-2

8 0

1:4

4

20

14-0

8-2

8 0

1:4

8

20

14-0

8-2

8 0

1:5

2

20

14-0

8-2

8 0

1:5

6

セール開始

Page 23: Amazon DynamoDBの紹介と東急ハンズでの活用について

22

2. 東急ハンズでの活用方法について

以前のハンズネット の構成

WEB Servers API Servers

ELB ELB

データをファイルで持っていたため、サーバを増やすごとにファイル同期コストが増大

ユーザ

Page 24: Amazon DynamoDBの紹介と東急ハンズでの活用について

23

2. 東急ハンズでの活用方法について

改善後のハンズネットの構成

WEB Servers API Servers

ELB ELB

Data Layer

DynamoDB

S3

データ層は単一障害点にならないアーキテクチャの中から選定

Elastic Beanstalk

Beanstalk による Auto Scale

ユーザ

Page 25: Amazon DynamoDBの紹介と東急ハンズでの活用について

24

2. 東急ハンズでの活用方法について

データの種類・用途によるストレージの使い分け

ユーザーが生成するデータサービス提供側が生成するデータ

商品マスタ商品詳細情報店舗在庫数

セッション情報ショッピングカート購入履歴会員情報

順次作られる動的データ半静的データ、読み込み専用データ

お気に入り商品情報商品レビューネットストア在庫

価格特集コンテンツ画像

= 増え続けるデータ

DynamoDB S3 SQLite DynamoDB

= コントロール可能なデータ

Page 26: Amazon DynamoDBの紹介と東急ハンズでの活用について

25

DynamoDB所感

• データ容量の制限がないことや、大量アクセス時の安心感は大きい。• DynamoDBを使ったプログラムは、コード改修なしでスケールできる• DynamoDBは最初とっつきにくいので、一部から導入して、自信をつ

けたら範囲を広げていくのが良いかもしれない。

2. 東急ハンズでの活用方法について

→ ハンズでは、セッションから始めて商品データ、カートへと徐々に用途拡大して行った。

• DynamoDBだけで全部やろうとするとつらい。

→ 検索はCloudSearchにするなど、他のシステムとの併用も検討。

• 料金は安い。心配しないで使ってみて。

Page 27: Amazon DynamoDBの紹介と東急ハンズでの活用について

26

1. Amazon DynamoDBの紹介

3. おまけ(DynamoDB最新情報)

2. 東急ハンズでの活用について

Page 28: Amazon DynamoDBの紹介と東急ハンズでの活用について

27

3. おまけ

DynamoDB最新情報

• オンラインでGlobal Secondary Indexが作成できるように。• リザーブドキャパシティが 100Unitから購入できるように。

• 以前は4000Unitだったので、より小規模でも導入しやすく• 月額課金に比べて53%(1年)から76%(3年)のコスト削減が可

能• DynamoDB Streams が Preview リリース

• Redshiftや、CloudSearchなどとの連携がやりやすく

Page 29: Amazon DynamoDBの紹介と東急ハンズでの活用について

Let's work together!

・AWSエンジニア

・iOSエンジニア

・Webエンジニア

ハンズラボは積極的に技術者採用中です。

Page 30: Amazon DynamoDBの紹介と東急ハンズでの活用について

29

ぜひ手を動かして、触ってみてください!

ご清聴ありがとうございました。

Try ! DynamoDB