Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Perl and Riak

Perl and Riak

Tatasuro Hisamori

September 21, 2013
Tweet

More Decks by Tatasuro Hisamori

Other Decks in Technology

Transcript

  1. 1FSMBOE3JBL

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

    View Slide

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

    View Slide

  3. <5PLZPc,ZPUP>
    Perl  and  Riak

    View Slide

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

    View Slide

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

    View Slide

  6. Perl  and  Riak
    1FSMBOE3JBL

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  11. ՝୊
    Perl  and  Riak

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. ՝୊lͩͬͨz
    Perl  and  Riak

    View Slide

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

    Perl  and  Riak

    View Slide

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

    View Slide

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

    View Slide