SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Riak and FreakOut
Riak をプロダクションに投下 [した¦している] 話
Riak Meetup Tokyo #2 7/10 19:00 ‒ 19:45
© FreakOut Inc.,
Riak Meetup Tokyo #2 7/10 19:00 ‒ 19:45
FreakOut と RTB
RTB	
  
媒体	
  広告主	
   SSP	
  DSP	
  
ROI	
   収益	
  
最大化	
  
AdEx	
  
(取引所)	
  
•  SSP	
  は「媒体側の収益最大化」が目的	
  
•  Supply	
  Side	
  Platform	
  
•  DSP	
  は「広告主の投資対効果(ROI)最大化」が目的	
  
•  Demand	
  Side	
  Platform	
  
•  2つの事業者間で、入札による取引が行われている	
  
•  Real	
  Time	
  Bidding	
  (RTB)	
  
RTB概略
RTBエコシステムの特徴
媒体	
  広告主	
  
AdEx	
  
SSP	
  
DSP	
  
ROI	
   収益	
  
最大化	
  Imp.売買	
  
•  FreakOut	
  は広告主のネット広告における	
  ROI	
  最適を
目指した	
  DSP	
  を展開	
  
Riak Meetup Tokyo #2 7/10 19:00 ‒ 19:45
RTB の技術的課題
広告表示までに
許された時間は
0.1秒
RTB	
  and	
  FreakOut
RTB	
  
媒体	
  広告主	
  
SSP	
  
AdEx	
  
DSP	
  
•  0.1秒	
  =	
  SSP	
  がrequestを投げ、DSPがresponseを返し切るまで	
  
•  RTB	
  は	
  TCP	
  の RoundTripTime	
  (RTT)	
  を含んだ時間	
  
•  SSP	
  は複数あり、多くの同時多発的リクエストが発生する	
  
•  同時多発的なリクエストを	
  DSP	
  は出来るだけ吟味する必要	
  
RTB	
  and	
  FreakOut
50ms
or
die.
・レイテンシの軽減
・多数の RTB 処理
RTB	
  and	
  FreakOut
安く 早く うまく
捌く必要がある
RTB	
  and	
  FreakOut
1. FreakOut のシステム
RTB	
  and	
  FreakOut
RTB は CPU バウンド
RTB	
  and	
  FreakOut
FreakOut	
  のサーバインフラ
FreakOut	
  のサーバインフラ
FreakOut	
  のサーバインフラ
多コアを 安く 並べる
FreakOut	
  のサーバインフラ
一方
FreakOut	
  のサーバインフラ
入札判断に必要な
データストアも重要
FreakOut	
  のサーバインフラ
[Tokyo¦Kyoto]
FreakOut	
  のサーバインフラ
•  性能	
  
•  [Tokyo|Kyoto]	
  [Tyrant|Tycoon]	
  は高速	
  
•  50ms	
  or	
  die.	
  を支えるためには速度が必要	
  
•  スケーラビリティ	
  
•  クライアントサイドのアルゴリズム分散のため、スケールし
にくい	
  
•  「10台じゃ足りない!!	
  11台目を追加しよう」が簡単にできない	
  
•  運用	
  
•  通常運用では高負荷な状況でも実績がある	
  
•  データ検索したりできない(踏み込んだデータ活用に難有)	
  
[Tokyo¦Kyoto] [Tyrant¦Tycoon] の課題
FreakOut	
  のサーバインフラ
Riak	
  and	
  FreakOut	
2. Riak and FreakOut
•  Perl	
  
•  アプリケーションはほぼ全て	
  Perl	
  
•  Perl	
  <-­‐>	
  Riak	
  のやり取りを受け持つモジュールが必要	
  
•  KVS	
  
•  既存の	
  TT/KT	
  へのアクセスは	
  Cache::Memcached::Fast	
  
•  Memcached	
  クライアントを使っている	
  
•  運用	
  
•  メトリクス収集	
  -­‐>	
  CloudForecast	
  
•  監視	
  -­‐>	
  Nagios	
  
FreakOutのシステム
Riak	
  and	
  FreakOut
•  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	
  
Riak	
  and	
  FreakOut	
Perl と Riak
•  その他のモジュールとの比較	
  
•  https://gist.github.com/myfinder/5232845	
  
	
  
•  結果	
  
•  3000%	
  over	
  faster	
  
•  現状	
  Perl	
  の世界では(たぶん)最速	
  
•  memcached	
  like	
  interface	
  
•  Cache::Memcached::Fast	
  使ってる人には使いやすい	
  
Riak	
  and	
  FreakOut	
作った module の性能
•  Test::riak	
  
•  https://github.com/myfinder/p5-­‐test-­‐riak	
  
	
  
•  動作	
  
•  テスト実行時に、空きポートを	
  bind	
  して Riak	
  を起動	
  
•  テスト終了時に、Riak	
  を終了してくれる	
  
	
  
•  テスト重要	
  
•  継続的に運用していくシステムにおいて”テストができる”こ
とはマスト要件	
  
Riak	
  and	
  FreakOut	
単体テストモジュール
運用構成
Riak	
  and	
  FreakOut
•  Engine	
  Yard	
  方式	
  
•  アプリケーションと Riak	
  の間に haproxy	
  を配置	
  
Riak	
  and	
  FreakOut	
運用構成
app	
Riak	
Riak	
Riak	
Riak	
Riak	
Riak	
Riak	
Riak	
app	
 haproxy	
app
•  監視方法	
  
•  stats	
  で取得可能なデータを cloudforecast	
  でグラフ化	
  
•  死活監視は Nagios	
  で	
  port	
  を叩く	
  
Riak	
  and	
  FreakOut	
運用構成
スクショ参照
3. 課題
Riak	
  and	
  FreakOut
RTB	
  
媒体	
  広告主	
  
SSP	
  
AdEx	
  
DSP	
  
約0.1秒	
  
おさらい
Riak	
  and	
  FreakOut
広告表示までに
許された時間は
0.1秒
Riak	
  and	
  FreakOut
RTB処理に
許された時間は
約0.05秒
Riak	
  and	
  FreakOut
50ms
or
die.
Riak そのままでは
(現状)性能不足
Riak	
  and	
  FreakOut
•  Redirect	
  がつらい	
  
•  haproxy	
  で分散しているので、redirectが起こりやすい	
  
•  スループットが上がらない	
  
	
  
•  Set	
  が詰まるとつらい	
  
•  Set	
  が詰まり始めると、worker	
  の	
  busy	
  率が上がる	
  
•  書き込みの非同期化が必要	
  
•  もう一歩踏み込んだ対策が必要	
  
	
  
Riak	
  and	
  FreakOut	
50ms or die.的な見地からの課題
•  キャッシュ層を設ける	
  	
  
•  hot	
  な	
  key	
  については memcached	
  に任せる	
  
•  データの	
  origin	
  を Riak	
  に持つ	
  
•  -­‐>	
  実装済み	
  
Riak	
  and	
  FreakOut	
スループット向上のために
app	
Riak	
Riak	
Riak	
Riak	
Riak	
Riak	
app	
app	
Riak	
Riak	
memd	
haproxy
•  hash	
  から	
  partition	
  を特定する	
  
•  Riak	
  の持っている partition	
  情報を	
  RPC	
  経由で取得	
  
•  bucket	
  /	
  key	
  から	
  hash	
  を取得して、収容	
  partition	
  を特定	
  
•  @itawasa++	
  
•  partition	
  に所属するノードに直接getしに行く	
  
•  Riak::Lite::PBC	
  でサポート予定	
  
•  -­‐>	
  今後の課題	
  
Riak	
  and	
  FreakOut	
スループット向上のために
•  素のままでは50ms or die.的に厳しめ
•  構成の工夫が必要
•  但しスループットを上げる手はある
•  スケーラビリティの問題を克服できるメリッ
トは大きい
•  サーバを足すだけ に運用を落とし込める
ここまでのまとめ
Riakmeetup2forupload

Contenu connexe

Tendances

ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略bitbank, Inc. Tokyo, Japan
 
小規模チームで Type script と向き合う話
小規模チームで Type script と向き合う話小規模チームで Type script と向き合う話
小規模チームで Type script と向き合う話Tatsuya Yamamoto
 
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話terurou
 

Tendances (6)

ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略
 
小規模チームで Type script と向き合う話
小規模チームで Type script と向き合う話小規模チームで Type script と向き合う話
小規模チームで Type script と向き合う話
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
 
Design pattern in presto source code
Design pattern in presto source codeDesign pattern in presto source code
Design pattern in presto source code
 
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajpKafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
 

En vedette

YAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたYAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたTatsuro Hisamori
 
今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれTatsuro Hisamori
 
CGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレスCGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレスTatsuro Hisamori
 
My sql event_scheduler_casual_slideshare__
My sql event_scheduler_casual_slideshare__My sql event_scheduler_casual_slideshare__
My sql event_scheduler_casual_slideshare__Tatsuro Hisamori
 
JS開発環境を晒す。
JS開発環境を晒す。JS開発環境を晒す。
JS開発環境を晒す。Eiji Kuroda
 
プログラミング言語とは ~ 非エンジニアの方へ ~
プログラミング言語とは ~ 非エンジニアの方へ ~プログラミング言語とは ~ 非エンジニアの方へ ~
プログラミング言語とは ~ 非エンジニアの方へ ~Eiji Kuroda
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch dbEiji Kuroda
 
HTMLElementの派生が作りたかった。
HTMLElementの派生が作りたかった。HTMLElementの派生が作りたかった。
HTMLElementの派生が作りたかった。Eiji Kuroda
 
新卒のみなさんへ 〜大志のいだき方〜
新卒のみなさんへ 〜大志のいだき方〜新卒のみなさんへ 〜大志のいだき方〜
新卒のみなさんへ 〜大志のいだき方〜Eiji Kuroda
 
Hotサービスの傾向
Hotサービスの傾向Hotサービスの傾向
Hotサービスの傾向Eiji Kuroda
 
いまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐいまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐEiji Kuroda
 
SmartPhone と AdTechの世界
SmartPhone と AdTechの世界SmartPhone と AdTechの世界
SmartPhone と AdTechの世界Eiji Kuroda
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuningrisou
 
アドテク勉強会(第1回)
アドテク勉強会(第1回)アドテク勉強会(第1回)
アドテク勉強会(第1回)Noriaki UCHIYAMA
 
Encoder-decoder 翻訳 (TISハンズオン資料)
Encoder-decoder 翻訳 (TISハンズオン資料)Encoder-decoder 翻訳 (TISハンズオン資料)
Encoder-decoder 翻訳 (TISハンズオン資料)Yusuke Oda
 
アドテク勉強会0819
アドテク勉強会0819アドテク勉強会0819
アドテク勉強会0819Hideya Kato
 
AdServerの仕組み
AdServerの仕組みAdServerの仕組み
AdServerの仕組みEiji Kuroda
 
アドテク勉強会
アドテク勉強会アドテク勉強会
アドテク勉強会Shoho Kozawa
 

En vedette (20)

Html5j 8
Html5j 8Html5j 8
Html5j 8
 
YAPCEurope2014-myfinder
YAPCEurope2014-myfinderYAPCEurope2014-myfinder
YAPCEurope2014-myfinder
 
YAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたYAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきました
 
今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ
 
CGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレスCGI Perlでわかる!サーバレス
CGI Perlでわかる!サーバレス
 
My sql event_scheduler_casual_slideshare__
My sql event_scheduler_casual_slideshare__My sql event_scheduler_casual_slideshare__
My sql event_scheduler_casual_slideshare__
 
JS開発環境を晒す。
JS開発環境を晒す。JS開発環境を晒す。
JS開発環境を晒す。
 
プログラミング言語とは ~ 非エンジニアの方へ ~
プログラミング言語とは ~ 非エンジニアの方へ ~プログラミング言語とは ~ 非エンジニアの方へ ~
プログラミング言語とは ~ 非エンジニアの方へ ~
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
HTMLElementの派生が作りたかった。
HTMLElementの派生が作りたかった。HTMLElementの派生が作りたかった。
HTMLElementの派生が作りたかった。
 
新卒のみなさんへ 〜大志のいだき方〜
新卒のみなさんへ 〜大志のいだき方〜新卒のみなさんへ 〜大志のいだき方〜
新卒のみなさんへ 〜大志のいだき方〜
 
Hotサービスの傾向
Hotサービスの傾向Hotサービスの傾向
Hotサービスの傾向
 
いまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐいまどきのチームびるでぃんぐ
いまどきのチームびるでぃんぐ
 
SmartPhone と AdTechの世界
SmartPhone と AdTechの世界SmartPhone と AdTechの世界
SmartPhone と AdTechの世界
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
アドテク勉強会(第1回)
アドテク勉強会(第1回)アドテク勉強会(第1回)
アドテク勉強会(第1回)
 
Encoder-decoder 翻訳 (TISハンズオン資料)
Encoder-decoder 翻訳 (TISハンズオン資料)Encoder-decoder 翻訳 (TISハンズオン資料)
Encoder-decoder 翻訳 (TISハンズオン資料)
 
アドテク勉強会0819
アドテク勉強会0819アドテク勉強会0819
アドテク勉強会0819
 
AdServerの仕組み
AdServerの仕組みAdServerの仕組み
AdServerの仕組み
 
アドテク勉強会
アドテク勉強会アドテク勉強会
アドテク勉強会
 

Similaire à Riakmeetup2forupload

本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能mametter
 
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現UnityTechnologiesJapan002
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】洵貴 佐川
 
JavaScript And Keywords
JavaScript And KeywordsJavaScript And Keywords
JavaScript And Keywordsuupaa
 
130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏Developers Summit
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Y Watanabe
 
rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法Takeshi Mikami
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updatemganeko
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
クラウド概要 by Engine Yard
クラウド概要 by Engine Yardクラウド概要 by Engine Yard
クラウド概要 by Engine YardYu Kitazume
 
Open capi meetup20180409 (revised)
Open capi meetup20180409 (revised)Open capi meetup20180409 (revised)
Open capi meetup20180409 (revised)Yutaka Kawai
 

Similaire à Riakmeetup2forupload (20)

本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
 
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
 
JavaScript And Keywords
JavaScript And KeywordsJavaScript And Keywords
JavaScript And Keywords
 
Vrodeo agenda 200930
Vrodeo agenda 200930Vrodeo agenda 200930
Vrodeo agenda 200930
 
Paa s and oss
Paa s and ossPaa s and oss
Paa s and oss
 
Riakを利用したパーソナライズ事例
Riakを利用したパーソナライズ事例Riakを利用したパーソナライズ事例
Riakを利用したパーソナライズ事例
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
vRodeo rancher 200702
vRodeo rancher 200702vRodeo rancher 200702
vRodeo rancher 200702
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
 
rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
クラウド概要 by Engine Yard
クラウド概要 by Engine Yardクラウド概要 by Engine Yard
クラウド概要 by Engine Yard
 
Open capi meetup20180409 (revised)
Open capi meetup20180409 (revised)Open capi meetup20180409 (revised)
Open capi meetup20180409 (revised)
 

Riakmeetup2forupload

  • 1.
  • 2. Riak and FreakOut Riak をプロダクションに投下 [した¦している] 話 Riak Meetup Tokyo #2 7/10 19:00 ‒ 19:45
  • 4. Riak Meetup Tokyo #2 7/10 19:00 ‒ 19:45 FreakOut と RTB
  • 5. RTB   媒体  広告主   SSP  DSP   ROI   収益   最大化   AdEx   (取引所)   •  SSP  は「媒体側の収益最大化」が目的   •  Supply  Side  Platform   •  DSP  は「広告主の投資対効果(ROI)最大化」が目的   •  Demand  Side  Platform   •  2つの事業者間で、入札による取引が行われている   •  Real  Time  Bidding  (RTB)   RTB概略
  • 6. RTBエコシステムの特徴 媒体  広告主   AdEx   SSP   DSP   ROI   収益   最大化  Imp.売買   •  FreakOut  は広告主のネット広告における  ROI  最適を 目指した  DSP  を展開  
  • 7. Riak Meetup Tokyo #2 7/10 19:00 ‒ 19:45 RTB の技術的課題
  • 9. RTB   媒体  広告主   SSP   AdEx   DSP   •  0.1秒  =  SSP  がrequestを投げ、DSPがresponseを返し切るまで   •  RTB  は  TCP  の RoundTripTime  (RTT)  を含んだ時間   •  SSP  は複数あり、多くの同時多発的リクエストが発生する   •  同時多発的なリクエストを  DSP  は出来るだけ吟味する必要   RTB  and  FreakOut
  • 14. RTB は CPU バウンド RTB  and  FreakOut
  • 18. 多コアを 安く 並べる FreakOut  のサーバインフラ
  • 22. •  性能   •  [Tokyo|Kyoto]  [Tyrant|Tycoon]  は高速   •  50ms  or  die.  を支えるためには速度が必要   •  スケーラビリティ   •  クライアントサイドのアルゴリズム分散のため、スケールし にくい   •  「10台じゃ足りない!!  11台目を追加しよう」が簡単にできない   •  運用   •  通常運用では高負荷な状況でも実績がある   •  データ検索したりできない(踏み込んだデータ活用に難有)   [Tokyo¦Kyoto] [Tyrant¦Tycoon] の課題 FreakOut  のサーバインフラ
  • 23. Riak  and  FreakOut 2. Riak and FreakOut
  • 24. •  Perl   •  アプリケーションはほぼ全て  Perl   •  Perl  <-­‐>  Riak  のやり取りを受け持つモジュールが必要   •  KVS   •  既存の  TT/KT  へのアクセスは  Cache::Memcached::Fast   •  Memcached  クライアントを使っている   •  運用   •  メトリクス収集  -­‐>  CloudForecast   •  監視  -­‐>  Nagios   FreakOutのシステム Riak  and  FreakOut
  • 25. •  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   Riak  and  FreakOut Perl と Riak
  • 26. •  その他のモジュールとの比較   •  https://gist.github.com/myfinder/5232845     •  結果   •  3000%  over  faster   •  現状  Perl  の世界では(たぶん)最速   •  memcached  like  interface   •  Cache::Memcached::Fast  使ってる人には使いやすい   Riak  and  FreakOut 作った module の性能
  • 27. •  Test::riak   •  https://github.com/myfinder/p5-­‐test-­‐riak     •  動作   •  テスト実行時に、空きポートを  bind  して Riak  を起動   •  テスト終了時に、Riak  を終了してくれる     •  テスト重要   •  継続的に運用していくシステムにおいて”テストができる”こ とはマスト要件   Riak  and  FreakOut 単体テストモジュール
  • 29. •  Engine  Yard  方式   •  アプリケーションと Riak  の間に haproxy  を配置   Riak  and  FreakOut 運用構成 app Riak Riak Riak Riak Riak Riak Riak Riak app haproxy app
  • 30. •  監視方法   •  stats  で取得可能なデータを cloudforecast  でグラフ化   •  死活監視は Nagios  で  port  を叩く   Riak  and  FreakOut 運用構成 スクショ参照
  • 31. 3. 課題 Riak  and  FreakOut
  • 32. RTB   媒体  広告主   SSP   AdEx   DSP   約0.1秒   おさらい Riak  and  FreakOut
  • 37. •  Redirect  がつらい   •  haproxy  で分散しているので、redirectが起こりやすい   •  スループットが上がらない     •  Set  が詰まるとつらい   •  Set  が詰まり始めると、worker  の  busy  率が上がる   •  書き込みの非同期化が必要   •  もう一歩踏み込んだ対策が必要     Riak  and  FreakOut 50ms or die.的な見地からの課題
  • 38. •  キャッシュ層を設ける     •  hot  な  key  については memcached  に任せる   •  データの  origin  を Riak  に持つ   •  -­‐>  実装済み   Riak  and  FreakOut スループット向上のために app Riak Riak Riak Riak Riak Riak app app Riak Riak memd haproxy
  • 39. •  hash  から  partition  を特定する   •  Riak  の持っている partition  情報を  RPC  経由で取得   •  bucket  /  key  から  hash  を取得して、収容  partition  を特定   •  @itawasa++   •  partition  に所属するノードに直接getしに行く   •  Riak::Lite::PBC  でサポート予定   •  -­‐>  今後の課題   Riak  and  FreakOut スループット向上のために
  • 40. •  素のままでは50ms or die.的に厳しめ •  構成の工夫が必要 •  但しスループットを上げる手はある •  スケーラビリティの問題を克服できるメリッ トは大きい •  サーバを足すだけ に運用を落とし込める ここまでのまとめ