riak 2.0 pre5 @ riak meetup #3

28
©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED. Shunichi Shinohara Basho Japan KK 2013-11-06 Riak Meetup Tokyo #3 @ Yahoo!JAPAN セミナールーム 2.0 pre5

Upload: shunichi-shinohara

Post on 15-Jan-2015

2.462 views

Category:

Documents


1 download

DESCRIPTION

Riak 2.0 pre5 新機能紹介 @ Riak Meetup #3, 2013-11-06

TRANSCRIPT

Page 1: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Shunichi Shinohara Basho Japan KK

2013-11-06 Riak Meetup Tokyo #3

@ Yahoo!JAPAN セミナールーム

2.0 pre5

Page 2: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

2.0 =  Riak  1.x            +  アプリ向け機能強化            +  さらなる運用の容易さ  

pre5

Page 3: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

• 運用の容易さ • 高可用性 • 水平拡張性

設計ポリシー

Page 4: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riak 1.x •  Riak  1.0    クラスタ管理  Bitcask  /  LevelDB  2i  /  MapReduce  

•  Riak  1.x    クラスタ操作の改善  各種バックプレッシャー  Capability  ネゴシエーション  

node  

node   node  

node   node  

Page 5: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Riak 2.0 アプリ向け 機能強化 全文検索

データ型 (CRDT)

強い整合性

・・・

さらなる 運用の容易さ バケットタイプ

セキュリティ

設定ファイル刷新

・・・

Page 6: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

注意 •  Tech  Preview  (2.0pre5)  をベースにしています  

•  2.0  正式リリース時には色々変わるかも

Page 7: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

バケットタイプ •  動機  

•  キーの名前空間としてのバケット •  カスタム設定が個別のバケットごとに必要 •  O(1000)のバケットのカスタム設定はネットワークを圧迫

•  解決策 •  同種のバケットをまとめて管理 •  効率的なクラスタ内情報共有

Page 8: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

バケットタイプ

$ riak-admin bucket-type <sub-command>

list status <type> activate <type> create <type> <json> update <type> <json>

•  明示的に作成し、有効化する

Page 9: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

バケットタイプ

# 設定を取得$ curl http://127.0.0.1:8098/types/my-type/props

# タイプ/バケット/キーの3段階でアクセス$ curl http://127.0.0.1:10018/types/my-type/ buckets/my-bucket/keys/my-key

Page 10: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

データ型 (CRDT) •  動機

•  並列アクセス、並列更新をアプリで考慮、対処する必要があった •  単純な後勝ち  または Vector  Clocks  以外の対処はアプリの責任  

Page 11: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

データ型 (CRDT) •  例:  フォローしている人  

•  ユーザーの集合、(簡単のため)  追加しかできない  

•  フォローの追加で並列更新が発生  

太郎

太郎, 花子 三郎

太郎, 花子 次郎

太郎, 花子 ???? 更新の衝突 太郎, 花子

Page 12: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

データ型 (CRDT) •  例:  フォローしている人  

•  ユーザーの集合、(簡単のため)  追加しかできない  

•  フォローの追加で並列更新が発生  

•  衝突の解決はほぼ自明  

太郎

太郎, 花子 三郎

太郎, 花子 次郎

太郎, 花子 次郎, 三郎 更新の衝突 太郎, 花子

Page 13: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

アプリの擬似コード class User def initialize(following=Set.new): @following = following

def follow(user): @following.add(user)

def self.resolve(user1, user2): merged = user1.following.union(user2.following) User.new(merged)

Page 14: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

データ型 (CRDT) •  解決策

•  データ型を指定するだけで自動的に衝突解決  カウンター、フラグ(Boolean)、セット、レジスター、  およびそれらの入れ子 (マップ)

•  アプリの設計+開発を簡単にする  

•  設計で考慮すること:  ライフサイクル、データの肥大化、効率  

Page 15: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

アプリの擬似コード CRDT class User def initialize(following=Set.new): @following = following

def follow(user): @following.add(user)

def self.resolve(user1, user2): merged = user1.following.union(user2.following) User.new(merged)

Page 16: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

Set データ型を使う # バケットタイプの設定$ riak-admin bucket-type create bt-sets '{"props": {"datatype": "set"}}'$ riak-admin bucket-type activate bt-sets

# コード (Eralng)riakc_pb_socket:modify_type(Riakc, fun(Set) -> riakc_set:add_element(NewElement, Set) end, {<<"bt-sets">>, <<"b">>}, <<"k">>, []);

サンプルコード:  hKps://gist.github.com/shino/a8da9791926976122b8a  

Page 17: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

セキュリティ: 認証/認可 •  動機

•  セキュリティでは「穴」がひとつでもあると全体が弱くなる  

•  Riak  でしか対応出来ないことは Riak  で対応する •  解決策

•  AuthenScate:  誰がアクセスしてきたか  (ユーザ名のみ、ユーザ名+パスワード、ユーザ名+証明書、PAM)

•  Authorize:  なににアクセスできるのか •  Audit:  だれがどうアクセスしたか (pre5  には入っていない) •  EncrypSon:  MITM  排除 (PKI,  TLS)  

Page 18: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

セキュリティ: 認証/認可 # 設定$ riak attach> application:set_env(riak_core, security, true).

# ユーザ追加$ riak-admin security add-user andrew

# 経路の追加$ riak-admin security add-source all 127.0.0.1/32 trust

Page 19: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

セキュリティ: 認証/認可 # GET => エラー "401 Unauthorized"$ curl -k -i --user andrew:foo https://127.0.0.1:11018/buckets/b/keys/k

# 権限追加 GET+PUT$ riak-admin security grant riak_kv.get ON ANY TO andrew$ riak-admin security grant riak_kv.put ON ANY TO andrew

Page 20: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

セキュリティ: 認証/認可 # PUT, GET => 成功$ curl -X PUT --data 'val' -k -i --user andrew:foo https://127.0.0.1:11018/buckets/b/keys/k$ curl -k -i --user andrew:foo https://127.0.0.1:11018/buckets/b/keys/k

# PUT 権限取り消し$ riak-admin security revoke riak_kv.put ON ANY FROM andrew

# GET => 成功, PUT => エラー [コマンド省略]

Page 21: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

強い整合性 •  動機

•  これまでは結果整合性の参照+更新のみ、可用性が第一  

•  強い整合性が欲しいデータもあり得る (在庫数の管理)  

•  解決策 •  レプリカごとにリーダーを選出、整合性を課す  

•  条件付き更新(CAS)、単一レコード、アトミック •  並列更新は失敗する、部分更新は発生しない  

•   参照では最新が見えることを保証 (ダーティーリードがない)  

•  「強い」≠「良い」、Riak  内で結果整合性とトレードオフ可能になった

Page 22: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

強い整合性 1.  設定:  riak.conf  

enable_consensus = true

2.  設定:  bucket  type  '{"props": {"consistent": true}}'

3.  PUT  =>  成功  

4.  GET  せずにもう一度 PUT  =>  エラー  

5.  GET  してから  PUT  =>  成功  

6.  古い GET  を元に PUT  する =>  エラー

4. PUTエラー

3. PUT成功

キーなし (最初の状態)

5. PUT成功

6. PUTエラー

Read-Modify-Put

Page 23: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

設定ファイル刷新 •  動機

•  あまり一般的ではない設定ファイル書式  

•  複数に分かれていた  

•  解決策 •  1ファイルに統合  

•  1行に1項目  

•  grep,  sed  などとの親和性が高い

Page 24: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

設定ファイル刷新 {riak_kv, [ {anti_entropy, {on, []}}, {anti_entropy_build_limit, {1, 3600000}}, {anti_entropy_expire, 604800000}]},

anti_entropy = onanti_entropy.build_limit.number = 1anti_entropy.build_limit.per_timespan = 1hanti_entropy.expire = 1w

Page 25: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

参考 •  全般  

•  ブログ  [日本語]  hKp://basho.co.jp/introducing-­‐riak-­‐2-­‐0-­‐data-­‐types-­‐strong-­‐consistency-­‐full-­‐text-­‐search-­‐and-­‐much-­‐more/  

•  ブログ  [英語]  hKp://basho.com/introducing-­‐riak-­‐2-­‐0/  

•  RICON  West  2013  ビデオ hKp://ricon.io/west2013.html  

•  ビルド済みパッケージ:  hKp://docs.basho.com/riak/2.0.0pre5/downloads/  

Page 26: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

参考 •  バケットタイプ  

•  RICON  スライド:  hKps://speakerdeck.com/jrwest/controlled-­‐epidemics-­‐riaks-­‐new-­‐gossip-­‐protocol-­‐and-­‐metadata-­‐store  

•  提案+議論:  hKps://github.com/basho/riak/issues/362  

•  データ型 (CRDT)  •  RICON  スライド:  hKps://speakerdeck.com/lenary/crdts-­‐an-­‐update-­‐or-­‐just-­‐a-­‐put  

•  いろいろな型:  hKps://gist.github.com/russelldb/7316f83ddd38965d9f76  

•  さらに詳細:  hKps://gist.github.com/russelldb/f92f44bdg619e089a4d  

Page 27: Riak 2.0 pre5 @ Riak Meetup #3

©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.

参考 •  セキュリティ:  認証/認可  

•  提案+議論:  hKps://github.com/basho/riak/issues/355  

•  HTTP  の例:  hKps://gist.github.com/Vagabond/05b7dc8ae6d3ca4af6c2  

•  PB  の例:  hKps://gist.github.com/Vagabond/6222793a1d352f1ccdd2  

•  強い整合性  

•  RICON  スライド:  hKps://speakerdeck.com/jtuple/ricon-­‐west-­‐2012-­‐bringing-­‐consistency-­‐to-­‐riak-­‐part-­‐2  

•  開発ブランチ:  hKps://github.com/basho/riak_ensemble/tree/jdb-­‐wip-­‐2.0  

•  設定ファイル刷新  

•  Wiki:  hKps://github.com/basho/cuKlefish/wiki  

•  hKps://github.com/joedevivo/ricon/blob/master/cuKlefish.md  

Page 28: Riak 2.0 pre5 @ Riak Meetup #3

Basho Technologies

2013-11-06 Riak Meetup #3