/ / 最新 / 2009-09 / RSS / twitter / tumblr / 09014502501 / mail@ssig33.com

屋久島沈没


AP4R で適当にジョブ分割して並列実行したりしてた

Twitter クローラーを Rails でなんとなく作ってて、速くする為に、

「Twitter にアクセスして結果を DB に投げまくる」

という処理を切り出して AP4R で非同期化して、さらにスレッド沢山作って並列実行というのを 5 時間ぐらいで作った。

適当に回してみたら、そこそこ速いのだけど、ロードアベレージが凄く高い。


これを解決するには、「Twitter にアクセスする」「DB に投げまくる」という風にさらに分割して、「Twitter にアクセスする」という部分は EventMachine とかで I/O 多重化してシングルスレッド化するというのがよさそうな感じ。 DB は MyISAM なので( Tritonn )どうせインサートは一度には一個しか出来ないので「DB に投げまくる」という部分もまた別にスレッド 1 個で回せばいいのだろうと思う、と近隣の知人のスライドを読んで思った。

「AP4R で非同期化も並列化もやった」という感じだったけど、 AP4R で非同期化をやるのは正しくて、 AP4R で並列化をするというのはあまり正しくないアプローチだったのかなーと今は思ってる。

それにしても、 AP4R を使うと、「タスクの分割」と「非同期化」の部分はほぼ何も考えなくて出来るのでいいですね。



AP4R は、非同期化するメソッドは public にしなきゃいけなかったりとか、設計が若干マズい部分があるので、既存のアプリケーションを非同期化するのに使うのはちょっと厄介な気がするのだけど(まあ精々接続元制限かけるくらいだから大したことも無かろうが)、新規に非同期な何かを作る時には楽だと思いました。

blog comments powered by Disqus

Referrer (Inside):

[ 固定リンク ]