48
クラウド時代の ストーレジ技術 Marat Zhanikeev [email protected] maratishe.github.io 2014/11/08 Cloudy会第2回@天神 PDF: bit.do/marat141108

Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

Embed Size (px)

Citation preview

Page 1: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

クラウド時代の

ストーレジ技術

Marat Zhanikeev [email protected]

maratishe.github.io

2014/11/08

Cloudy会第2回@天神

PDF: bit.do/marat141108

Page 2: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

楽天が買収したViber

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 2/47...

2/47

Page 3: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Rakuten Conference 2014

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 3/47...

3/47

Page 4: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viberのストーリーhttp://tech.rakuten.co.jp/timetable.html

7:00, 7:40(1G) 9:30(2G) 14:00(specs) 17:24(3G)

• at 7:00• at 7:40• at 9:30• at 14:00• at 17:24

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 4/47...

4/47

Page 5: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viberのストーリー

• 1G: in-memory backend• 2G: Redis frontend + MongoDB backend

◦ + custom Redis (sharding)◦ + MongoDB + alpha (cache)

• 3G: Redis + CoachDB backend

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 5/47...

5/47

Page 6: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viber : Redis

• in-memory: RAM内でDBを扱う• 実際には、RAM + HDDです、もちろん、溢れたデータをHDDに書き込む

• キャッシュ技術です、使用の激しい分をRAMで保持することが目的である

• VIBERがRedisがbackendの状態で数ヶ月運用していた

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 6/47...

6/47

Page 7: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viber: 1G• すごく簡単に、Redisのみのストーレジ

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 7/47...

7/47

Page 8: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viber: 2G• Redis front +MongoDB backの切り分け

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 8/47...

8/47

Page 9: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viber: 3G• backendでMongoDB → CouchDBのマイグレーション

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 9/47...

9/47

Page 10: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

実用化上のストーレジ

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 10/47...

10/47

Page 11: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

A視点 (構造): SQL - noSQL

• SQLの欠点: 表ごとに構成を固定する必要がある、変えることが難しい

• noSQLにより解決:◦ データはアイテムごとに扱う◦ key-valueにばらして扱うので、構造は関係ない

• BigDataなどの世界も、もちろん、構造なし

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 11/47...

11/47

Page 12: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

B視点 (ネットワーク): 単ノード・複数ノード

• ネットワーク上で分散するかどうか

• 現在、殆どの技術が分散型である

• 重要: LuceneなどのnoSQLの一部の単ノードの技術です

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 12/47...

12/47

Page 13: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

C視点 (ファイル): 明確度

• 単品のコンポーネントを開発する時に明確なファイルシステムが望ましい

• MongoDBやBigDataなど、データを増えれば増えるほどファイル構造が不明になっていく

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 13/47...

13/47

Page 14: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

実用化上のストーレジ技術

• SQL DB• SQLite (ファイルベースSQL)• Indexing (Lucene)• Key-Value store (MongoDB, CouchDB, ...)• BigData (Hadoop)

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 14/47...

14/47

Page 15: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

クラウド上のストーレジ

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 15/47...

15/47

Page 16: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Key-Value → BigDataのスコープ

• key-valueとhadoopが極端なところ

• 今の技術では、途中に技術があまり存在しないのは問題です

KV Store

Hadoop (HDFS)

and MapReduce

TABID Time-Aware

Big Data (this demo)

HDFS +

Lucene Index

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 16/47...

16/47

Page 17: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

CAP Theorem

• A: Availability = 稼働率• C: Consistency• P: Partition tolerance =分解トレランス(裕度)

• ストーレジの研究者が通常に知る定理

• 3角形の中で2つを選んで技術を決定する:3つとも不可能

• SQLを含めてほとんどの技術が乗っている

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 17/47...

17/47

Page 18: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viber's CAP

• ViberのMongoDB→CouchDBのマイグレーションの理由が分かる

• 何と何のトレードオフ?• 何が良くなった?• 何が悪くなった?

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 18/47...

18/47

Page 19: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Heroku as the Cloudification Platform

• herokuはスケールを中心にした開発・実行環境である

• EC2上に出来ている、EC2自身はスケール無し(自分で実装しないと)

• cloudificationの定義: 何らかの技術をクラウド上で使える形にする◦ ある意味で、クラウド化が出来るかどうかのテスト

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 19/47...

19/47

Page 20: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Cloudification: Heroku has Postgres

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 20/47...

20/47

Page 21: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Cloudification: Heroku has MongoDB

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 21/47...

21/47

Page 22: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Cloudification: Heroku has Redis

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 22/47...

22/47

Page 23: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Cloudification: Heroku has KVStores

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 23/47...

23/47

Page 24: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

BigData

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 24/47...

24/47

Page 25: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

BigData: Hadoop

.Hadoop=HDFSとは?..

.分散ストーレジ、冗長・複数化を利用した分散型ファイルシステム

.MapReduceとは?..

.Hadoop上で実行するビッグデータを処理するプロセス

• MapReduceの利用無しのHDFSは殆ど存在しないので、Hadoop=MapReduce

• 分散の簡単な理由:単ノードで保存できないからです

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 25/47...

25/47

Page 26: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

BigData: ジョブを派遣・回収 vs データ再生型

• 大量のデータなので、効率アップの技術が大事• Hadoop最大スループット:大体60Mbps• 再生+マルチコアの処理速度:(HDD/SSDの限定の)数Gbps - 処理の負担

One Physical Machine (1 shard)

file A file B

file C …

Hadoop Space

Manager

Hadoop Job (your code) Hadoop Job (your code) Hadoop Job (your code) Hadoop Job (your code)

many many

Name Server(s)

Client Machine

Hadoop Client

Your Code

You

Start Use

Deploy

Find Read/parse

One Physical Machine (1 shard)

Tim

elin

e Su

b-St

ore

Store

TABID Node

TABID Manager

Client Machine

TABID Client

Your Sketcher

You

Start Use

Schedule

Multicore Replay

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 26/47...

26/47

Page 27: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

BigData = Cloud Storage

• 量の大きいデーはは、全部BigData• ただし、検索・処理などの必要性に応じて、データの単位をkey-valueの細かさまでに減らせる

KV Store

Hadoop (HDFS)

and MapReduce

TABID Time-Aware

Big Data (this demo)

HDFS +

Lucene Index

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 27/47...

27/47

Page 28: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

ストーレジの基盤

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 28/47...

28/47

Page 29: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

ストーレジの基盤

1.基盤◦ メモリマップ◦ Double-Linked List (DLL)◦ ハッシュ化、インデックス化◦ Bloom Filter◦ 共有メモリ

2. 基盤の次の層◦ キャッシュ化とその技術・手法◦ ネットワーク上分散◦ ...

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 29/47...

29/47

Page 30: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

技術のピラミッド• 黒色の部分は、高性能処理に関わる手法

Other Uses

Data Streaming

Other uses Bloom Filter

Other Hashing Methods Fast Hashing A uses B

All hashing All blooming

All related technologies

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 30/47...

30/47

Page 31: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Hashing and Blooming

Item

1

0

1

0

1

1

1

0

Hash Keys Bloom

Filter

Bit length OR

1

1

1

1

0

1

0

1

Each in turn

Multiple Hash

Functions

Multiple Hash

Functions

Multiple Hash

Functions

Multiple Hash

Functions

1

0

1

0

1

1

1

0

1

0

1

0

1

1

1

0

1

0

1

0

1

1

1

0

… Replace current state

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 31/47...

31/47

Page 32: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Double Linked List (DLL)

Item

Item

Item

Item Item

side

prev

side

next

side

prev

prev

next sdie

next

next

prev

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 32/47...

32/47

Page 33: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Hashing/Bloomingの効率アップ• 大体、fast hashingか効率的bloomingの2つになる

x Item

1

0

1

0

1

1

1

0

Hash Keys Bloom

Filter

Bit length OR

*

*

*

*

*

*

*

*

Each in turn

Multiple Hash

Functions

Multiple Hash

Functions

Multiple Hash

Functions

Multiple Hash

Functions

1

0

1

0

1

1

1

0

1

0

1

0

1

1

1

0

1

0

1

0

1

1

1

0

… Replace current state

A non-trivial manipulation

state

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 33/47...

33/47

Page 34: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Hashing実用化の事例:o2mデータ構成• トラヒックかSNSの中で良く現れる、1人が他の数人との通信パターンを捕まえたい

No Pointer01 #001

#002

2X

PacketEntry

Entry

Hashfunction

SubentrySubentrySubentry

Digests IP addresslists

Subentry

Entry/Subentry DLLExport

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 34/47...

34/47

Page 35: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

DLL実用化の事例:マルチコア処理

Manager

Shared memory

One thread

Create

Fork

Lifespan Stale check

Process/wrap Wrap wait

Doub

le-L

inke

d Li

st (D

LL)

Assign

Cap-ture

• マルチコア処理の際に、並列でも、ロックフリー方式が望ましい

• 共有メモリとDLLが使える• DLLの技: 更新したものをDLLの頭にもってくれば、古い(除いての良い)データがDLLの尻尾に沈んでいく◦ この技でロックフリーを実現する

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 35/47...

35/47

Page 36: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

性能ボトルネックの分析

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 36/47...

36/47

Page 37: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

性能ボトルネック

• HDD/SSD読み・書き込む• ネットワークのスループット• データの中身そのもの(処理の負担)

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 37/47...

37/47

Page 38: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

PetriNets:可視化の1例

Meter Merger

Analyzer

Analyzer

Analyzer

Buffer 5s Timeout 5s Sampling timeout 10s

Buffer 1s

Buffer 10s

Buffer 30s

Lower cluster Upper cluster

47kb

25kb

21kb

12kb

0.6kb

0.3kb

Per second Per buffer

10kb

7.4kb

32kb

26kb

• 少なくても2クラスに分解する(多いこともある・分類問題)

• クラスを処理負担と確率で示す

• 可視化として、自動で図を作成する

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 38/47...

38/47

Page 39: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

クラウド技術の可視化:レンズのモデル• 手前のレンズで全てのユーザをキャッチする• focal point (集点)がある、何もしなければ、ユーザの皆さんの多人数により混雑が起こる◦ SPOF: Single Point of Failure◦ Flash Crowd: 突然・急激に人数が増えたときの混雑

• 青色: クラウドサービスの中で混雑を避けることが1つの大事な目的がある

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 39/47...

39/47

Page 40: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

APIs: HTTP or not

• あまり考えていないところでボトルネックが生じる:ほとんどのAPIがノード内でもHTTPを使う

• 共有メモリ(SHM)の方が絶対に効率的な方ですが、別途でソフトを開発する形になる

◦ でも、効率を増やすなら、開発しても構わないと思っている企業が沢山ある

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 40/47...

40/47

Page 41: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

データストリーミングの見方(性能の分析)

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 41/47...

41/47

Page 42: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

データストリーミングの基盤• データストリーミングの定義:データを保存せずに(実時間に)処理する方法

• 特徴: 数学的に真面目に出ている理論、スペース効率の最適化、処理負担の効率化

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 42/47...

42/47

Page 43: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

データストリーミングのデザイン

• 殆ど、goodput(スループット)とメモリサイズ(footprint)で記述する

• 情報理論を使って、両方の数字化が簡単に出来る

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 43/47...

43/47

Page 44: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viberの性能

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 44/47...

44/47

Page 45: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

ViberのE2E• 2つの経路: ABCとADE ... (とのその帰り) --サブ秒の厳しい性能目標

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 45/47...

45/47

Page 46: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

Viber Problem: Discussion

• 現在のViber1. Ridus front2. CouchDB back

• どこで改善すれば?

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 46/47...

46/47

Page 47: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

.

maratishe.github.io

That’s all, thank you ...

M.Zhanikeev -- [email protected] クラウド時代のストーレジ技術 -- bit.do/marat141108 47/47...

47/47

Page 48: Cloudy会 第2回 (11.8@天神) クラウド時代のストーレジ技術

Viber users

Amazon Cloud

Web Redis

x100 CouchDB

Other Webs

WebSocket

Middle Layer

Remember that Viber gave up on consistency by migrating from MongoDB to Cough DB (CAT theorem) Efficiency Trick 1: Direct WebSockets across Web VMs ‒ a possibility for efficient cache syncing and realtime Efficiency Trick 2: Middle Layer implementing a self -built sharded DB as the ultimate flexible offload (reverse VNE)