Slide 1

Slide 1 text

1FSMBOE3JBL 3JBLΛ1FSM͔Βര଎ͰҎԼུ :"1$"TJBl1FSMBOE3JBLz

Slide 2

Slide 2 text

.FNDBDIFEϓϩτίϧޓ׵ϓϩμΫτͷ࣋ͭ՝୊ 1FSMBOE3JBL

Slide 3

Slide 3 text

<5PLZPc,ZPUP> Perl  and  Riak

Slide 4

Slide 4 text

•  性能   •  [Tokyo|Kyoto]  [Tyrant|Tycoon]  は高速   •  50ms  or  die.  を支えるためには速度が必要   •  スケーラビリティ   •  クライアントサイドで分散内容決まる  =>  スケールしにくい   •  「10台じゃ足りない!!  11台目を追加しよう」が簡単にできない   •  運用   •  通常運用では高負荷な状況でも実績がある   •  データ検索したりできない(踏み込んだデータ活用に難有)   <5PLZPc,ZPUP><5ZSBOUc5ZDPPO>ͷ՝୊ Perl  and  Riak

Slide 5

Slide 5 text

•  35#ʹ͸ɺ"VEJFODF৘ใΛେྔʹ஝ੵɺ ׆༻Մೳͳ෼ࢄσʔλετΞ͕ඞཁ •  Ωʔͷ਺͕͡ΌΜ͡ΌΜ૿͍͑ͯͨ͘Ίɺε έʔϥϏϦςΟͷ֬อ͕՝୊ •  ͜ΕΒͷ՝୊ʹ3JBL͕Ұఆͷճ౴Λ΋ͨΒ ͢ͷͰ͸ͱظ଴͍ͯ͠Δ ͜͜·Ͱͷ·ͱΊ

Slide 6

Slide 6 text

Perl  and  Riak 1FSMBOE3JBL

Slide 7

Slide 7 text

•  Perl   •  アプリケーションはほぼ全て  Perl   •  Perl  <-­‐>  Riak  のやり取りを受け持つモジュールが必要   •  KVS   •  既存の  TT/KT  へのアクセスは  Cache::Memcached::Fast   •  Memcached  クライアントを使っている   •  運用   •  メトリクス収集  -­‐>  CloudForecast   •  監視  -­‐>  Nagios   'SFBL0VUͷγεςϜ Perl  and  Riak

Slide 8

Slide 8 text

•  Riak  Client  for  Perl   •  Net::Riak,  Riak::Light,  Data::Riak,  AnyEvent::Riak   •  REST  だけ  or  PurePerl  の Protobuf  サポート   •  残念ながら遅い   •  Memcached  クライアントとインターフェース互換がない   •  既存の処理に組み入れにくい   •  ないなら作るしかない   •  Riak::PBC  <-­‐  Protobuf  のオブジェクト   •  Riak::Lite::PBC  <-­‐  実際に Riak  とやり取りする  client   Perl  and  Riak 1FSMͱ3JBL

Slide 9

Slide 9 text

•  その他のモジュールとの比較   •  https://gist.github.com/myfinder/5232845     •  結果   •  3000%  over  faster   •  現状  Perl  の世界では(たぶん)最速   •  memcached  like  interface   •  Cache::Memcached::Fast  使ってる人には使いやすい   Perl  and  Riak ࡞ͬͨNPEVMFͷੑೳ

Slide 10

Slide 10 text

•  Test::riak   •  https://github.com/myfinder/p5-­‐test-­‐riak     •  動作   •  テスト実行時に、空きポートを  bind  して Riak  を起動   •  テスト終了時に、Riak  を終了してくれる     •  テスト重要   •  継続的に運用していくシステムにおいて”テストができる”こ とはマスト要件   Perl  and  Riak ୯ମςετϞδϡʔϧ

Slide 11

Slide 11 text

՝୊ Perl  and  Riak

Slide 12

Slide 12 text

3JBLͦͷ··Ͱ͸ ݱঢ় ੑೳෆ଍ Perl  and  Riak

Slide 13

Slide 13 text

•  Redirect  がつらい   •  haproxy  で分散しているので、redirectが起こりやすい   •  スループットが上がらない     •  Set  が詰まるとつらい   •  Set  が詰まり始めると、worker  の  busy  率が上がる   •  書き込みの非同期化が必要   •  更に踏み込んだ対策が必要   •  ハードウェア  /  ソフトウェア 両面から   Perl  and  Riak ՝୊

Slide 14

Slide 14 text

•  SSD  必須  &  RAM  もできるだけ多く   •  必然的にRandomAccessの多いKVSでHDDはNG     •  ネットワーク機器  /  構成を取る   •  内部通信が増えるので、耐えられる構成にする   Perl  and  Riak εϧʔϓοτ޲্ͷͨΊʹ

Slide 15

Slide 15 text

•  キャッシュ層を設ける     •  hot  な  key  については memcached  に任せる   •  データの  origin  を Riak  に持つ   •  -­‐>  実装済み   Perl  and  Riak εϧʔϓοτ޲্ͷͨΊʹ app Riak Riak Riak Riak Riak Riak app app Riak Riak memd haproxy

Slide 16

Slide 16 text

•  hash  から  partition  を特定する   •  Riak  の持っている partition  情報を  RPC  経由で取得   •  bucket  /  key  から  hash  を取得して、収容  partition  を特定   •  @itawasa++   •  partition  に所属するノードに直接getしに行く   •  Riak::Lite::PBC  でサポート予定   •  -­‐>  今後の課題 だった…   Perl  and  Riak εϧʔϓοτ޲্ͷͨΊʹ

Slide 17

Slide 17 text

՝୊lͩͬͨz Perl  and  Riak

Slide 18

Slide 18 text

μΠίʔϯ࣌୅ͷ౸དྷ Perl  and  Riak

Slide 19

Slide 19 text

•  Memcached  interface  local  proxy   •  https://github.com/kuenishi/dicorn     •  Memcached  ProtocolでRiakとやりとりが出来る   •  こちらにcontributeしたほうが筋が良さそう   •  Cache::Memcached::Fast  がそのまま使える   Perl  and  Riak μΠίʔϯʁ

Slide 20

Slide 20 text

•  ૉͷ··Ͱ͸NTPSEJFతʹݫ͠Ί •  ߏ੒ͷ޻෉͕ඞཁ •  ୠ͠εϧʔϓοτΛ্͛Δख͸͋Δ •  εέʔϥϏϦςΟͷ໰୊Λࠀ෰Ͱ͖ΔϝϦο τ͸େ͖͍ •  zαʔόΛ଍͚ͩ͢zʹӡ༻Λམͱ͠ࠐΊΔ •  ՝୊Λࠀ෰ͯ͠ɺΑΓ҆৺͔ͯͭ͑͠ΔΑ͏ʹ ͍͖͍ͯͨ͠͠ɺͦͷϊ΢ϋ΢Λڞ༗͍ͨ͠ ͜͜·Ͱͷ·ͱΊ