Perl and Riak

Perl and Riak

50eeba52e7889f4ed616d9e097b1f76b?s=128

Tatasuro Hisamori

September 21, 2013
Tweet

Transcript

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

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

  3. <5PLZPc,ZPUP> Perl  and  Riak

  4. •  性能   •  [Tokyo|Kyoto]  [Tyrant|Tycoon]  は高速   •  50ms

     or  die.  を支えるためには速度が必要   •  スケーラビリティ   •  クライアントサイドで分散内容決まる  =>  スケールしにくい   •  「10台じゃ足りない!!  11台目を追加しよう」が簡単にできない   •  運用   •  通常運用では高負荷な状況でも実績がある   •  データ検索したりできない(踏み込んだデータ活用に難有)   <5PLZPc,ZPUP><5ZSBOUc5ZDPPO>ͷ՝୊ Perl  and  Riak
  5. •  35#ʹ͸ɺ"VEJFODF৘ใΛେྔʹ஝ੵɺ ׆༻Մೳͳ෼ࢄσʔλετΞ͕ඞཁ •  Ωʔͷ਺͕͡ΌΜ͡ΌΜ૿͍͑ͯͨ͘Ίɺε έʔϥϏϦςΟͷ֬อ͕՝୊ •  ͜ΕΒͷ՝୊ʹ3JBL͕Ұఆͷճ౴Λ΋ͨΒ ͢ͷͰ͸ͱظ଴͍ͯ͠Δ ͜͜·Ͱͷ·ͱΊ

  6. Perl  and  Riak 1FSMBOE3JBL

  7. •  Perl   •  アプリケーションはほぼ全て  Perl   •  Perl  <-­‐>

     Riak  のやり取りを受け持つモジュールが必要   •  KVS   •  既存の  TT/KT  へのアクセスは  Cache::Memcached::Fast   •  Memcached  クライアントを使っている   •  運用   •  メトリクス収集  -­‐>  CloudForecast   •  監視  -­‐>  Nagios   'SFBL0VUͷγεςϜ Perl  and  Riak
  8. •  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
  9. •  その他のモジュールとの比較   •  https://gist.github.com/myfinder/5232845     •  結果  

    •  3000%  over  faster   •  現状  Perl  の世界では(たぶん)最速   •  memcached  like  interface   •  Cache::Memcached::Fast  使ってる人には使いやすい   Perl  and  Riak ࡞ͬͨNPEVMFͷੑೳ
  10. •  Test::riak   •  https://github.com/myfinder/p5-­‐test-­‐riak     •  動作  

    •  テスト実行時に、空きポートを  bind  して Riak  を起動   •  テスト終了時に、Riak  を終了してくれる     •  テスト重要   •  継続的に運用していくシステムにおいて”テストができる”こ とはマスト要件   Perl  and  Riak ୯ମςετϞδϡʔϧ
  11. ՝୊ Perl  and  Riak

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

  13. •  Redirect  がつらい   •  haproxy  で分散しているので、redirectが起こりやすい   •  スループットが上がらない

        •  Set  が詰まるとつらい   •  Set  が詰まり始めると、worker  の  busy  率が上がる   •  書き込みの非同期化が必要   •  更に踏み込んだ対策が必要   •  ハードウェア  /  ソフトウェア 両面から   Perl  and  Riak ՝୊
  14. •  SSD  必須  &  RAM  もできるだけ多く   •  必然的にRandomAccessの多いKVSでHDDはNG  

      •  ネットワーク機器  /  構成を取る   •  内部通信が増えるので、耐えられる構成にする   Perl  and  Riak εϧʔϓοτ޲্ͷͨΊʹ
  15. •  キャッシュ層を設ける     •  hot  な  key  については memcached

     に任せる   •  データの  origin  を Riak  に持つ   •  -­‐>  実装済み   Perl  and  Riak εϧʔϓοτ޲্ͷͨΊʹ app Riak Riak Riak Riak Riak Riak app app Riak Riak memd haproxy
  16. •  hash  から  partition  を特定する   •  Riak  の持っている partition

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

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

  19. •  Memcached  interface  local  proxy   •  https://github.com/kuenishi/dicorn    

    •  Memcached  ProtocolでRiakとやりとりが出来る   •  こちらにcontributeしたほうが筋が良さそう   •  Cache::Memcached::Fast  がそのまま使える   Perl  and  Riak μΠίʔϯʁ
  20. •  ૉͷ··Ͱ͸NTPSEJFతʹݫ͠Ί •  ߏ੒ͷ޻෉͕ඞཁ •  ୠ͠εϧʔϓοτΛ্͛Δख͸͋Δ •  εέʔϥϏϦςΟͷ໰୊Λࠀ෰Ͱ͖ΔϝϦο τ͸େ͖͍ • 

    zαʔόΛ଍͚ͩ͢zʹӡ༻Λམͱ͠ࠐΊΔ •  ՝୊Λࠀ෰ͯ͠ɺΑΓ҆৺͔ͯͭ͑͠ΔΑ͏ʹ ͍͖͍ͯͨ͠͠ɺͦͷϊ΢ϋ΢Λڞ༗͍ͨ͠ ͜͜·Ͱͷ·ͱΊ