Riak 2.0 pre5 @ Riak Meetup #3

3,312 views

Published on

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

Riak 2.0 pre5 @ Riak Meetup #3

  1. 1. 2.0 pre5 Shunichi Shinohara Basho Japan KK 2013-11-06 Riak Meetup Tokyo #3 @ Yahoo!JAPAN セミナールーム ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  2. 2. 2.0 pre5 =  Riak  1.x            +  アプリ向け機能強化            +  さらなる運用の容易さ   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  3. 3. 設計ポリシー • 運用の容易さ • 高可用性 • 水平拡張性 ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  4. 4. Riak 1.x •  Riak  1.0     クラスタ管理   Bitcask  /  LevelDB   2i  /  MapReduce   node   node   node   node   node   •  Riak  1.x     クラスタ操作の改善   各種バックプレッシャー   Capability  ネゴシエーション   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  5. 5. Riak 2.0 アプリ向け 機能強化 さらなる 運用の容易さ 全文検索 バケットタイプ データ型 (CRDT) セキュリティ 強い整合性 設定ファイル刷新 ・・・ ・・・ ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  6. 6. 注意 •  Tech  Preview  (2.0pre5)  をベースにしています   •  2.0  正式リリース時には色々変わるかも ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  7. 7. バケットタイプ •  動機   •  キーの名前空間としてのバケット •  カスタム設定が個別のバケットごとに必要 •  O(1000)のバケットのカスタム設定はネットワークを圧迫 •  解決策 •  同種のバケットをまとめて管理 •  効率的なクラスタ内情報共有 ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  8. 8. バケットタイプ •  明示的に作成し、有効化する $ riak-admin bucket-type <sub-command> list status <type> activate <type> create <type> <json> update <type> <json> ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  9. 9. バケットタイプ # 設定を取得 $ 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 ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  10. 10. データ型 (CRDT) •  動機 •  並列アクセス、並列更新をアプリで考慮、対処する必要があった •  単純な後勝ち  または Vector  Clocks  以外の対処はアプリの責任   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  11. 11. データ型 (CRDT) •  例:  フォローしている人   •  ユーザーの集合、(簡単のため)  追加しかできない   •  フォローの追加で並列更新が発生   太郎, 花子 次郎 太郎 太郎, 花子 更新の衝突 太郎, 花子 三郎 ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED. 太郎, 花子 ????
  12. 12. データ型 (CRDT) •  例:  フォローしている人   •  ユーザーの集合、(簡単のため)  追加しかできない   •  フォローの追加で並列更新が発生   •  衝突の解決はほぼ自明   太郎, 花子 次郎 太郎 太郎, 花子 更新の衝突 太郎, 花子 三郎 ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED. 太郎, 花子 次郎, 三郎
  13. 13. アプリの擬似コード 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) ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  14. 14. データ型 (CRDT) •  解決策 •  データ型を指定するだけで自動的に衝突解決   カウンター、フラグ(Boolean)、セット、レジスター、   およびそれらの入れ子 (マップ) •  アプリの設計+開発を簡単にする   •  設計で考慮すること:  ライフサイクル、データの肥大化、効率   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  15. 15. アプリの擬似コード 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) ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  16. 16. 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   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  17. 17. セキュリティ: 認証/認可 •  動機 •  セキュリティでは「穴」がひとつでもあると全体が弱くなる   •  Riak  でしか対応出来ないことは Riak  で対応する •  解決策 •  AuthenScate:  誰がアクセスしてきたか   (ユーザ名のみ、ユーザ名+パスワード、ユーザ名+証明書、PAM) •  Authorize:  なににアクセスできるのか •  Audit:  だれがどうアクセスしたか (pre5  には入っていない) •  EncrypSon:  MITM  排除 (PKI,  TLS)   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  18. 18. セキュリティ: 認証/認可 # 設定 $ 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 ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  19. 19. セキュリティ: 認証/認可 # 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 ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  20. 20. セキュリティ: 認証/認可 # 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 => エラー [コマンド省略] ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  21. 21. 強い整合性 •  動機 •  これまでは結果整合性の参照+更新のみ、可用性が第一   •  強い整合性が欲しいデータもあり得る (在庫数の管理)   •  解決策 •  レプリカごとにリーダーを選出、整合性を課す   •  条件付き更新(CAS)、単一レコード、アトミック •  並列更新は失敗する、部分更新は発生しない   •   参照では最新が見えることを保証 (ダーティーリードがない)   •  「強い」≠「良い」、Riak  内で結果整合性とトレードオフ可能になった ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  22. 22. 強い整合性 1.  設定:  riak.conf   enable_consensus = true キーなし (最初の状態) 2.  設定:  bucket  type   '{"props": {"consistent": true}}' 3. PUT成功 3.  PUT  =>  成功   4.  GET  せずにもう一度 PUT  =>  エラー   5.  GET  してから  PUT  =>  成功   ReadModify-Put 4. PUTエラー 6.  古い GET  を元に PUT  する =>  エラー 5. PUT成功 6. PUTエラー ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  23. 23. 設定ファイル刷新 •  動機 •  あまり一般的ではない設定ファイル書式   •  複数に分かれていた   •  解決策 •  1ファイルに統合   •  1行に1項目   •  grep,  sed  などとの親和性が高い ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  24. 24. 設定ファイル刷新 {riak_kv, [ {anti_entropy, {on, []}}, {anti_entropy_build_limit, {1, 3600000}}, {anti_entropy_expire, 604800000} ]}, anti_entropy = on anti_entropy.build_limit.number = 1 anti_entropy.build_limit.per_timespan = 1h anti_entropy.expire = 1w ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  25. 25. 参考 •  全般   •  ブログ  [日本語]   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/   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  26. 26. 参考 •  バケットタイプ   •  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   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  27. 27. 参考 •  セキュリティ:  認証/認可   •  提案+議論:  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   ©2013 BASHO TECHNOLOGIES INC. ALL RIGHTS RESERVED.
  28. 28. Basho Technologies 2013-11-06 Riak Meetup #3

×