30
Google APP Engine vs リアルタイムウェブ

Google APP Engine vs リアルタイムウェブ

Embed Size (px)

DESCRIPTION

Google APP Engine Java Night 7でのスライド資料です。  資料中に出てくるBotはこちら http://twitter.com/livernal_jp

Citation preview

Page 1: Google APP Engine vs リアルタイムウェブ

Google APP Engine vs リアルタイムウェブ

Page 2: Google APP Engine vs リアルタイムウェブ

自己紹介

● Twitterid:takayuki_h● ブログでは技術解説ネタを主に

● Google APP Engine Python入門● http://d.hatena.ne.jp/kagigotonet/20100209/1265726225

● 長らく体を壊してほぼニート状態● ホームページ屋さんの下っ端の孫の手の先を細々と● IphoneアプリのバックエンドのGAE開発とかやってます

● ちょっとあいちゃったのでお仕事のお話とかあれば

Page 3: Google APP Engine vs リアルタイムウェブ

今日のBeerTalkについて

● livernalnet jpというTwitterBotの開発経験のシェア

● Twitterのようなリアルタイムウェブを相手にしたサービスをどうGAEで作るか?

● 自由にプロダクトをインストールできないGAEの弱点の克服にも

Page 4: Google APP Engine vs リアルタイムウェブ

@livernal_jp● ネットを通じた「ライブ」をサポートするBOT● livernal.netというWebサービスの一機能

● 現在はUSTREAMのライブ放送をサポート● 開始の捕捉・告知● 盛り上がっているライブを報告● @でライブの告知や予告● 非公式RTとリプライでオススメ

Page 5: Google APP Engine vs リアルタイムウェブ

バックエンド

● 言語はPython● フレームワークは現在開発中のもの● テストは根性(ぉ

Page 6: Google APP Engine vs リアルタイムウェブ

最大の課題はVSリアルタイムウェブ

Page 7: Google APP Engine vs リアルタイムウェブ

VS リアルタイムウェブ

● 全てがリアルタイム● 変動が大きい

● 100倍程度違う● 不要な時には「たたむ」仕組が必要

● 変化が速い● 短ければ1分程度で色々なことが起きる● シーケンシャルなアクセスでは追いつかない

Page 8: Google APP Engine vs リアルタイムウェブ

クローリングも大変

● 時間が見積もれない● 相手がある

● Twitterは調子のいい時と悪い時が全然違う● .USTREAMはあまり頻繁にアクセスするとはじかれる

● 相手が原因のエラー対応● 30秒制限のクリア

Page 9: Google APP Engine vs リアルタイムウェブ

リアルタイムウェブと戦うには?

● 不要な時は最小限● 変動にはすばやく対処● 高速なクローリング

● 並行処理必須

Page 10: Google APP Engine vs リアルタイムウェブ

でもこんなこと最初はまったくわかってませんでした ( ´д`;)

Page 11: Google APP Engine vs リアルタイムウェブ

最初は全部CRON

未展開の短縮URLを展開

ustre.amをTwitter検索

未展開の短縮URLを展開

タイトルを取得

メッセージ送信

完全に問題の見積もりを間違えていた

Page 12: Google APP Engine vs リアルタイムウェブ

全然ダメ( ´д`;)● USTに連続してアクセスしようとするとはじかれる

• はじかれるとリトライ処理が面倒• そもそも、スローペースでのアクセスが必要

• 詰まっているものだからアクセス中に30秒制限超える• 先の処理に進まない● さらにうっかり日本語のみのライブに限らなかったものだ

からえらいことに● db.put()は500エンティティまでって解りました

● ( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \

Page 13: Google APP Engine vs リアルタイムウェブ

TaskQueueを使う方式に変更

展開・タイトル取得・分析結果保存

1.urlごとにTaskQueueに投入

メッセージ送信

ustre.amをTwitter検索

盛り上がり告知

Page 14: Google APP Engine vs リアルタイムウェブ

● Ustの処理は専用のキューを設定● 一分あたり10回程度のゆっくりとしたアクセス● Backet_Sizeを大きくすることで、タスク量にあわせた処理

速度を自動的にできるようにも● メッセージ送信もキューに入れるように

● 反応の加速とリトライの自動化

変更点

Page 15: Google APP Engine vs リアルタイムウェブ

結果

● 失敗の影響は局限化できた● ある程度リトライして、それでもダメなら諦めればいい● TaskQueueの設計のコツは、副作用がなくなるまで細分化

することだとわかる

● しかしUST配信が多い夜間は詰まる● 詰まり具合に応じて柔軟には対応してくれるけど、量が多すぎる

● Twitterのインデクシングもいい加減● 部分一致は頼りにならない● 個別のURL単位でのクローリングが必要

Page 16: Google APP Engine vs リアルタイムウェブ

現在ustre.amをTwitter検索

盛り上がり告知

展開・タイトル取得

1.新しいurlごとにキューイング

メッセージ送信URLごとに検索・分

同じタスクをキューに投入

2.

Page 17: Google APP Engine vs リアルタイムウェブ

現在のキュー構成● デフォルト● 全般の監視

● 最初の一回はcronで起動。次があった場合はページングをTaskQueueで順次処理

● Memcahceによるセマフォでロック

● Utream短縮アドレスの展開● 新しいURLを展開し、タイトルを取得● 個別チャンネルのクローラーを起動

● 個別チャンネルのクローリング● チャンネルのURLで検索・分析・終了判定● 同じタスクにcountdownつきで投げる擬似cron

Page 18: Google APP Engine vs リアルタイムウェブ

TaskQueueの活用にサービス層は大事

● TaskQueueをフル活用すると、どうしても一つの処理を複数のリクエストで分散して行うことになる

● コードが拡散する● リクエストを受け取る層とモデルの間データに対する共

通処理を表現するサービス層を挟んで解決● CakePHPで言うCompornentを発展させたもの

● はてなが使っているというMVACパターン

Page 19: Google APP Engine vs リアルタイムウェブ

例 リプライと短縮URLの処理

リクエスト受け取り

リプライ取得

メッセージ判定

お勧め、告知などのサービス層

短縮URL展開サービスリプライ取得

3.展開の必要の有無を返す

1.

2.

4.

7.コールバック

5.キューイング6.展開

Page 20: Google APP Engine vs リアルタイムウェブ

サービス層のメリットデメリット

● メリット● TaskQueueを介した処理を隠蔽できる

● 適切なリクエストさえサービス層に出せばいい● コードが集約できる● 再利用性が高まる

● デメリット● 依存性の切り分け

● サービス間の依存をどこまで許容するか● オーバーヘッド

Page 21: Google APP Engine vs リアルタイムウェブ

まとめ

● リアルタイムウェブに対抗するにはTaskQueueが必要

● TaskQueueの設計は副作用がゼロになるように

● TaskQueueはサービス層を挟むようにすると便利

● TaskQueueはゆっくりしたアクセスにも便利

● TaskQueueは面白いです

Page 22: Google APP Engine vs リアルタイムウェブ

御清聴、ありがとうございました

Page 23: Google APP Engine vs リアルタイムウェブ

おまけです

Page 24: Google APP Engine vs リアルタイムウェブ

@livernal_jpからみたUSTREAM

Page 25: Google APP Engine vs リアルタイムウェブ

● 現在判明している日本語USTチャンネル数は約5600件● 同時放映数は一桁から数百オーダーまで● 一日あたりだと700~1000くらい

どのくらいの人がUST流しているの?

Page 26: Google APP Engine vs リアルタイムウェブ

どんなのがあるの?● DJ系

● ライブハウスと自宅● トーク番組

● 女の子が出ていると盛り上がる● 報道・講演系● ゲーム実況● 作業中継● 定点ストリーミング● 会見放送は盛り上がりはともかく数としては少ない

● というか、他が多すぎ(^^;)

Page 27: Google APP Engine vs リアルタイムウェブ

放送のパターン

● 基本的に深夜に大盛り上がり● 数としてはクラブ・ライブハウス文化が主流

● 昼にも中盛り上がり● 5時からも小盛り上がりがあることも● 曜日的に言うと、意外と水曜日が盛り上がる● 時間的には、夜の8時から午前1時くらいまで● 一番大きいのは土曜から日曜にかけて

● 八時くらいから翌朝九時までオールでアゲアゲ

● ζ*'ヮ')ζ<今夜はもやし祭りです~

Page 28: Google APP Engine vs リアルタイムウェブ

例:4月22日午後5時から24時間の負荷

Page 29: Google APP Engine vs リアルタイムウェブ

でもGAEでは無料枠で戦えてます

● CPU負荷でも多くても30~40%くらい

● 通信料は大きくても10%程度● 多分、ちょっといい共有サーバーレベルが無料

● 運営会社によっては追い出されているかも?

● ありがたいことですm(_ _)m

Page 30: Google APP Engine vs リアルタイムウェブ

御清聴、ありがとうございました