SlideShare a Scribd company logo
1 of 40
Download to read offline
AnyEventとEC2を使った
  クローラーのご紹介
    Songhee Han
    Kazuya Shono
自己紹介
                                                • 韓 松熙(@purewish)
                                                • 荘野 和也(@miniturbo)




10/14/2010   Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   2
本セッションの内容
• 本セッションでは、
 • EC2を用いたクローリングサーバのスケールアウト
 • AnyEventを用いたインスタンス管理や前後処理の制御
  についてご紹介します
• クローリングの対象や目的によって実装方法が異な
  るため、特定のク ローリング処理というよりも、ク
  ローリングをするための構成や設計を中心にお話
  したいと思います



        Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
クローラー
• 先日、業務でPerlを使ったHoneybeeというク
  ローラーを作成しました
• Honeybeeでは、クローリングに特化した
  Honeybee::Beeと、クローリングの前後に行
  う一連の処理フローを管理・実行する
  Honeybee::Hiveの2パッケージで構成されて
  います



        Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
AnyEventとは
• AnyEventのかんたんな説明
  • イベント駆動プログラミングをまとめるためのインターフェイス
  • I/O, Timer, HTTPなどのイベントが発生したタイミングで、非同期に
    処理を実行することができる
• 今回使ったモジュール
  • AE::timer
  • AnyEvent::Socket
  • AnyEvent::Handle




                Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
全体的なイメージ
                       Hive

                     事前処理




クロール                 クロール                           クロール        Bee


                     事後処理




   Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Honeybee::Beeについて




    Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
シンプルなアプリケーション
• 今回のクローラーでは、クローリング部分を楽にス
  ケールアウトできるように設計しました
• さまざまなホスティングサービスに設置できるように
  するため、クローリング処理だけを切り出し、環境に
  依存しないシンプルなアプリケーションになっていま
  す
• そのクローリング部分こそがHoneybee::Beeです




        Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Honeybee:: Beeの実装
• Bee自体は、受け取ったURLを対象にスクレ
  イピングを行い結果をJSON形式で返します
• そのため、BeeはWeb Application
  Frameworkを使用せず、単純なPSGIのアプ
  リケーションとして実装されています




       Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
スケールアウト

• シンプルな構成のアプリなので環境に依存せ
  ず、設置することができます
• 今回は、Amazon Web ServicesのEC2を利
  用し、複数のインスタンスに設置することでス
  ケールアウトをはかりました




        Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
連携のイメージ図
Hive                  パラメータを送信                                         Bee

                                                              EC2インスタンス


Crawler
                                                              EC2インスタンス
Daemon


                                                            他のレンタルサーバ


                         JSONで返す




          Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
EC2のイメージ管理
• EC2で楽にインスタンスを起動するために、
  あらかじめBeeを組み込んだOSイメージを
  AMIとしてS3に保存しています




      Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Honeybee::Hiveについて




    Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Hiveの機能
• Honeybee::Hiveでは、
  • クローリング対象のURLを生成し、データベースに格納
  • クローリング処理(Bee側とHTTP通信)
  • クローリング結果の重複対応
  といった機能が実装されています
• この機能を実行するために、Hive側では2つのデー
  モンが用意されています




           Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
2つのデーモン
• Crawler Daemon
   • インスタンスの管理
   • クローリング処理の実行
• Flow Management Daemon
  • 全体の処理を順次実行するための、メッセージの
    受信と機能の実行を行う




           Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Crawler Daemon
             Hive                                                          Bee

                事前処理
                                                                   EC2インスタンス
              クロール処理
   Flow
Management      Crawler
 Daemon         Daemon                                             EC2インスタンス



                 事後処理                                            他のレンタルサーバ




              Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
クローリング処理の管理
• 実際のクローリング処理はBeeで行います
• Hive側では、Beeが設置されているインスタンスを
  管理し、効率的にBee側に作業を行うようにリクエス
  トをする必要があります




        Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
インスタンスの管理
• 今回は、インスタンスの情報をデータベースに格納していま
  す
• AnyEventのtimerで、定期的にインスタンスの状態をチェック
  し、idleなインスタンスが存在すれば、そのインスタンスを
  activeにし、リクエストを送るようにしています
• レスポンスが返ってきたら、使用したインスタンスをidleの状
  態に戻します




          Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Bee側へのリクエスト
• 取得したidle状態のインスタンスにリクエストを送り
  ます
• インスタンスが複数存在する場合も考慮し、インスタ
  ンスの数だけ子プロセスを立ち上げ、並列でリクエ
  ストを送るようにしています
• 子プロセスは、レスポンスを処理し、インスタンスを
  idle状態に戻して終了します




        Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Bee側の処理フロー図
    Hive                                                               Bee

Crawler Daemon
                                                                    EC2インスタンス
  子プロセス                                                                 (idle)


                                                                    EC2インスタンス
  子プロセス                                                                 (idle)

                                                                    EC2インスタンス
                                                                       (active)




       Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
インスタンスの管理
             use AnyEvent;
             use Parallel::ForkManager;

             my $cv = AE::cv;
             my $timer = AE::timer 0, 1, sub {
                 # idle状態のインスタンスをデータベースから取得
                 my $instances =
                   $api->logic('Instance')->get_idle_instances(1);
                 my $pm = Parallel::ForkManager->new(scalar @$instances);
                 foreach my $instance (@$instances) {
                     $pm->start and next;
                     ・・・ # 次のページで詳細を記述
                     # インスタンスをidle状態に戻す
                     $api->logic('Instance')->idle_instance(
                        $instance->{instance_seq});
                     $pm->finish;
                 }
                 $pm->wait_all_children;
             };
             $cv->recv;


10/14/2010                  Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   22
Bee側とのやりとり
             $pm->start and next;

             my $crawl = $api->logic('Crawl')->get_crawl;
             my $res = $ua->post($instance->{instance_url}, {
                 seq    => $crawl->{crawl_seq},
                 url    => $crawl->{crawl_search_url},
                 domain => $crawl->{crawl_search_tool_domain}
             });

             my $content = JSON::decode_json( $res->content );
             if ( $content->{success} ) {
                 $api->logic('Crawl')
                    ->succeed($crawl->{crawl_seq}, $content->{urls});
             }
             else {
                 $api->logic('Crawl')
                    ->fail($crawl->{crawl_seq}, $content->{error});
             }

             $pm->finish;


10/14/2010                  Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   23
Flow Management Daemon
             Hive                                                          Bee

                事前処理
                                                                   EC2インスタンス
              クロール処理
   Flow
Management      Crawler
 Daemon         Daemon                                             EC2インスタンス



                 事後処理                                            他のレンタルサーバ




              Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
順次実行される仕組み
• Beeではスケールアウトが重要だったように、Hiveでは処理
  フローが順に実行される点を重視しました
• 順次実行される仕組みとして、
 • cronなどで定期的に処理のステータス(どこまで実行したか)を確認
   することは避けたい
 • 処理が実行された後、自動的に次の処理を実行するよう、メッセージ
   やシグナルで通知を行う
 • 通知を受け取ったとき、次の処理を実行する
 という観点で設計を行いました




         Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
メッセージを送る側
• 今回は、AnyEvent::Socketを使用し、tcp_serverでメッセー
  ジを受け取り、決められた処理を順に実行しています
• メッセージは各処理の最後で送信します
• 送る際に、
  • 次に実行するコールバック名
  • そのコールバックに渡す引数
  をシリアライズし、ソケット通信で送信します




            Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
メッセージを受け取る側
• 送られたメッセージをtcp_serverで受け取ります
• 受け取ったメッセージをアンシリアライズします
• 最後に、指定されたコールバックを、復元された引
  数を渡して実行します




        Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Hiveのイメージ図
                        Hive

                                      メッセージを送信
 事前処理

                                                                   Flow
                                                                Management
クロール処理                                                           Daemon



 事後処理
                                        次の処理を実行




   Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
イベントの処理
             package Honeybee::Hive::Event;
             use Storable qw/freeze/;
             use IO::Socket::UNIX;

             sub trigger {
                 my ( $self, $data ) = @_;
                 my $serialized = freeze($data);

                 my $sock = IO::Socket::UNIX->new(
                     Peer => $conf->{hive}->{socket}
                 );
                 $sock->send($serialized);
                 $sock->close;
             }

             sub execute {
                 my ( $self, $event, $args ) = @_;
                 eval { $self->$event($args); };
                 carp $@ if $@;
             }


10/14/2010                  Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   29
メッセージの送信
             #!/usr/bin/env perl
             use strict;
             use warnings;
             use utf8;
             use Honeybee::Hive::Event;

             my $event = Honeybee::Hive::Event->new;
             $event->trigger({
                 event => 'prepare_crawl',
                 args => {
                     process_seq => 1,
                 }
             });




10/14/2010                  Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   30
メッセージの受信と実行
             use   Storable qw/thaw/;
             use   AnyEvent::Socket;
             use   AnyEvent::Handle;
             use   Honeybee::Hive::Event;

             my $event = Honeybee::Hive::Event->new;
             tcp_server '', $conf->{socket}, sub {
                 my ($fh) = @_;
                 my $handle;
                 $handle = AnyEvent::Handle->new(
                     fh      => $fh,
                     on_read => sub {
                         my $buffer = $handle->rbuf;
                         my $data = thaw($buffer);
                         $event->execute($data->{event}, $data->{args});
                     }
                 );
             };
             AE::cv->recv;



10/14/2010                    Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   31
イベントの処理
             package Honeybee::Hive::Event;
             use Storable qw/freeze/;
             use IO::Socket::UNIX;

             sub trigger {
                 ...
             }

             sub execute {
                 my ( $self, $event, $args ) = @_;
                 eval { $self->$event($args); };
                 carp $@ if $@;
             }

             sub prepare_crawl {
                 ...
                 $self->trigger({ event => 'crawl' })
             }




10/14/2010                   Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   32
全体の流れ
             Hive                                                          Bee

                事前処理
                                                                  EC2インスタンス
              クロール処理
   Flow
Management      Crawler
                                                                  EC2インスタンス
 Daemon         Daemon


                 事後処理                                           他のレンタルサーバ




              Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
考察




Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
今までは...

• 一つのロジックに一連の処理の流れが書い
  てあったため、処理の一部分だけをスケール
  アウトすることが難しかった
• ロジックを分割したとき、状態遷移を管理する
  ためには、定期的にチェックするしかなかった
 • 例えば...状態を表すフラグをDBに設けそのフラ
   グを定期的にチェックしたり...



       Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
今回の設計で...

• 複雑なロジックを出来る限りシンプルに分割
  することで、特定の処理をスケールアウトしや
  すい設計にした
• crontabなどで定期的にチェックする構成をや
  め、各処理の最後で自動的に次の処理を実
  行させるようにした
 • 今回は、ソケット通信にて実装した



       Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
Amazon EC2を使用すると...

• 新しいインスタンスを立ち上げるだけで、捌け
  る数を増やすことができる
• クローリング部分はシンプルな処理なので、
  スペックを必要とせず、1インスタンスに掛か
  るコストが低い




      Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
まとめ

• 今回の実装コンセプトはほんの一例にすぎま
  せんが、こういったアプローチもよいのではな
  いかと思います
• ご意見ありましたら是非お聞かせ下さい




      Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
10/14/2010   Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   39
ご静聴ありがとうございました




10/14/2010      Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.   40

More Related Content

What's hot

次世代Webコンテナ Undertowについて
次世代Webコンテナ Undertowについて次世代Webコンテナ Undertowについて
次世代Webコンテナ UndertowについてYoshimasa Tanabe
 
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するオンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するKenkichi Okazaki
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版Masahiro Nagano
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohamaTetsuya Chiba
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題Masahiro Nagano
 
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~Takeshi Kuramochi
 
Rancher kubernetes storages
Rancher kubernetes storagesRancher kubernetes storages
Rancher kubernetes storagesTetsurou Yano
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発Nomura Yusuke
 
Rancher command line interface
Rancher command line interfaceRancher command line interface
Rancher command line interfaceMasahito Zembutsu
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編なべ
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
Management of Gems using Bundler.
Management of Gems using Bundler.Management of Gems using Bundler.
Management of Gems using Bundler.Tamotsu Furuya
 
Rancher Charts Introduction
Rancher Charts IntroductionRancher Charts Introduction
Rancher Charts IntroductionTetsurou Yano
 
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレperyaudo
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Bootなべ
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolateskoichik
 
すごく分かるwarden
すごく分かるwardenすごく分かるwarden
すごく分かるwardeni_yudai
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編なべ
 
AWS ベーシックトレーニング-トレーニング資料
AWS ベーシックトレーニング-トレーニング資料AWS ベーシックトレーニング-トレーニング資料
AWS ベーシックトレーニング-トレーニング資料Amazon Web Services Japan
 
マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版i_yudai
 

What's hot (20)

次世代Webコンテナ Undertowについて
次世代Webコンテナ Undertowについて次世代Webコンテナ Undertowについて
次世代Webコンテナ Undertowについて
 
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するオンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化する
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohama
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
 
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
 
Rancher kubernetes storages
Rancher kubernetes storagesRancher kubernetes storages
Rancher kubernetes storages
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
 
Rancher command line interface
Rancher command line interfaceRancher command line interface
Rancher command line interface
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Management of Gems using Bundler.
Management of Gems using Bundler.Management of Gems using Bundler.
Management of Gems using Bundler.
 
Rancher Charts Introduction
Rancher Charts IntroductionRancher Charts Introduction
Rancher Charts Introduction
 
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Boot
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
すごく分かるwarden
すごく分かるwardenすごく分かるwarden
すごく分かるwarden
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
 
AWS ベーシックトレーニング-トレーニング資料
AWS ベーシックトレーニング-トレーニング資料AWS ベーシックトレーニング-トレーニング資料
AWS ベーシックトレーニング-トレーニング資料
 
マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版
 

Similar to AnyEventとEC2を使ったクローリングツールのご紹介

[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編
[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編
[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編Amazon Web Services Japan
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsYoshio Terada
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみようHiroaki_UKAJI
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたHideaki Aoyagi
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangTakeru INOUE
 
負荷対策はCloudFront
負荷対策はCloudFront負荷対策はCloudFront
負荷対策はCloudFrontiret, Inc.
 
AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -SORACOM, INC
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例gree_tech
 
【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツール
【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツール【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツール
【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツールHinemos
 
沢山のスマホサービス環境を カジュアルにセキュアに運用する
沢山のスマホサービス環境を カジュアルにセキュアに運用する沢山のスマホサービス環境を カジュアルにセキュアに運用する
沢山のスマホサービス環境を カジュアルにセキュアに運用するHirotomo Oi
 
ConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキングConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキングMasatomo Ito
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.jsishiki-takai
 
Solr meeting in Japan 2011
Solr meeting in Japan 2011Solr meeting in Japan 2011
Solr meeting in Japan 2011Takahiko Ito
 

Similar to AnyEventとEC2を使ったクローリングツールのご紹介 (20)

[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編
[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編
[AWS Summit 2012] クラウドデザインパターン#6 CDP クラウド監視編
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab Contents
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
Em synchrony について
Em synchrony についてEm synchrony について
Em synchrony について
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみた
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
負荷対策はCloudFront
負荷対策はCloudFront負荷対策はCloudFront
負荷対策はCloudFront
 
AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
 
【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツール
【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツール【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツール
【HinemosWorld2014】A1-4_クラウドコントロールの最強タッグ Hinemosジョブ管理機能×コマンドラインツール
 
Dev@cloudの実装
Dev@cloudの実装Dev@cloudの実装
Dev@cloudの実装
 
沢山のスマホサービス環境を カジュアルにセキュアに運用する
沢山のスマホサービス環境を カジュアルにセキュアに運用する沢山のスマホサービス環境を カジュアルにセキュアに運用する
沢山のスマホサービス環境を カジュアルにセキュアに運用する
 
ConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキングConsulとNomadで簡単クッキング
ConsulとNomadで簡単クッキング
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.js
 
Solr meeting in Japan 2011
Solr meeting in Japan 2011Solr meeting in Japan 2011
Solr meeting in Japan 2011
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

AnyEventとEC2を使ったクローリングツールのご紹介

  • 2. 自己紹介 • 韓 松熙(@purewish) • 荘野 和也(@miniturbo) 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 2
  • 3. 本セッションの内容 • 本セッションでは、 • EC2を用いたクローリングサーバのスケールアウト • AnyEventを用いたインスタンス管理や前後処理の制御 についてご紹介します • クローリングの対象や目的によって実装方法が異な るため、特定のク ローリング処理というよりも、ク ローリングをするための構成や設計を中心にお話 したいと思います Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 4. クローラー • 先日、業務でPerlを使ったHoneybeeというク ローラーを作成しました • Honeybeeでは、クローリングに特化した Honeybee::Beeと、クローリングの前後に行 う一連の処理フローを管理・実行する Honeybee::Hiveの2パッケージで構成されて います Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 5.
  • 6. AnyEventとは • AnyEventのかんたんな説明 • イベント駆動プログラミングをまとめるためのインターフェイス • I/O, Timer, HTTPなどのイベントが発生したタイミングで、非同期に 処理を実行することができる • 今回使ったモジュール • AE::timer • AnyEvent::Socket • AnyEvent::Handle Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 7. 全体的なイメージ Hive 事前処理 クロール クロール クロール Bee 事後処理 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 8. Honeybee::Beeについて Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 9. シンプルなアプリケーション • 今回のクローラーでは、クローリング部分を楽にス ケールアウトできるように設計しました • さまざまなホスティングサービスに設置できるように するため、クローリング処理だけを切り出し、環境に 依存しないシンプルなアプリケーションになっていま す • そのクローリング部分こそがHoneybee::Beeです Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 10. Honeybee:: Beeの実装 • Bee自体は、受け取ったURLを対象にスクレ イピングを行い結果をJSON形式で返します • そのため、BeeはWeb Application Frameworkを使用せず、単純なPSGIのアプ リケーションとして実装されています Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 11. スケールアウト • シンプルな構成のアプリなので環境に依存せ ず、設置することができます • 今回は、Amazon Web ServicesのEC2を利 用し、複数のインスタンスに設置することでス ケールアウトをはかりました Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 12. 連携のイメージ図 Hive パラメータを送信 Bee EC2インスタンス Crawler EC2インスタンス Daemon 他のレンタルサーバ JSONで返す Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 13. EC2のイメージ管理 • EC2で楽にインスタンスを起動するために、 あらかじめBeeを組み込んだOSイメージを AMIとしてS3に保存しています Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 14. Honeybee::Hiveについて Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 15. Hiveの機能 • Honeybee::Hiveでは、 • クローリング対象のURLを生成し、データベースに格納 • クローリング処理(Bee側とHTTP通信) • クローリング結果の重複対応 といった機能が実装されています • この機能を実行するために、Hive側では2つのデー モンが用意されています Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 16. 2つのデーモン • Crawler Daemon • インスタンスの管理 • クローリング処理の実行 • Flow Management Daemon • 全体の処理を順次実行するための、メッセージの 受信と機能の実行を行う Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 17. Crawler Daemon Hive Bee 事前処理 EC2インスタンス クロール処理 Flow Management Crawler Daemon Daemon EC2インスタンス 事後処理 他のレンタルサーバ Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 18. クローリング処理の管理 • 実際のクローリング処理はBeeで行います • Hive側では、Beeが設置されているインスタンスを 管理し、効率的にBee側に作業を行うようにリクエス トをする必要があります Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 19. インスタンスの管理 • 今回は、インスタンスの情報をデータベースに格納していま す • AnyEventのtimerで、定期的にインスタンスの状態をチェック し、idleなインスタンスが存在すれば、そのインスタンスを activeにし、リクエストを送るようにしています • レスポンスが返ってきたら、使用したインスタンスをidleの状 態に戻します Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 20. Bee側へのリクエスト • 取得したidle状態のインスタンスにリクエストを送り ます • インスタンスが複数存在する場合も考慮し、インスタ ンスの数だけ子プロセスを立ち上げ、並列でリクエ ストを送るようにしています • 子プロセスは、レスポンスを処理し、インスタンスを idle状態に戻して終了します Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 21. Bee側の処理フロー図 Hive Bee Crawler Daemon EC2インスタンス 子プロセス (idle) EC2インスタンス 子プロセス (idle) EC2インスタンス (active) Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 22. インスタンスの管理 use AnyEvent; use Parallel::ForkManager; my $cv = AE::cv; my $timer = AE::timer 0, 1, sub { # idle状態のインスタンスをデータベースから取得 my $instances = $api->logic('Instance')->get_idle_instances(1); my $pm = Parallel::ForkManager->new(scalar @$instances); foreach my $instance (@$instances) { $pm->start and next; ・・・ # 次のページで詳細を記述 # インスタンスをidle状態に戻す $api->logic('Instance')->idle_instance( $instance->{instance_seq}); $pm->finish; } $pm->wait_all_children; }; $cv->recv; 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 22
  • 23. Bee側とのやりとり $pm->start and next; my $crawl = $api->logic('Crawl')->get_crawl; my $res = $ua->post($instance->{instance_url}, { seq => $crawl->{crawl_seq}, url => $crawl->{crawl_search_url}, domain => $crawl->{crawl_search_tool_domain} }); my $content = JSON::decode_json( $res->content ); if ( $content->{success} ) { $api->logic('Crawl') ->succeed($crawl->{crawl_seq}, $content->{urls}); } else { $api->logic('Crawl') ->fail($crawl->{crawl_seq}, $content->{error}); } $pm->finish; 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 23
  • 24. Flow Management Daemon Hive Bee 事前処理 EC2インスタンス クロール処理 Flow Management Crawler Daemon Daemon EC2インスタンス 事後処理 他のレンタルサーバ Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 25. 順次実行される仕組み • Beeではスケールアウトが重要だったように、Hiveでは処理 フローが順に実行される点を重視しました • 順次実行される仕組みとして、 • cronなどで定期的に処理のステータス(どこまで実行したか)を確認 することは避けたい • 処理が実行された後、自動的に次の処理を実行するよう、メッセージ やシグナルで通知を行う • 通知を受け取ったとき、次の処理を実行する という観点で設計を行いました Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 26. メッセージを送る側 • 今回は、AnyEvent::Socketを使用し、tcp_serverでメッセー ジを受け取り、決められた処理を順に実行しています • メッセージは各処理の最後で送信します • 送る際に、 • 次に実行するコールバック名 • そのコールバックに渡す引数 をシリアライズし、ソケット通信で送信します Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 27. メッセージを受け取る側 • 送られたメッセージをtcp_serverで受け取ります • 受け取ったメッセージをアンシリアライズします • 最後に、指定されたコールバックを、復元された引 数を渡して実行します Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 28. Hiveのイメージ図 Hive メッセージを送信 事前処理 Flow Management クロール処理 Daemon 事後処理 次の処理を実行 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 29. イベントの処理 package Honeybee::Hive::Event; use Storable qw/freeze/; use IO::Socket::UNIX; sub trigger { my ( $self, $data ) = @_; my $serialized = freeze($data); my $sock = IO::Socket::UNIX->new( Peer => $conf->{hive}->{socket} ); $sock->send($serialized); $sock->close; } sub execute { my ( $self, $event, $args ) = @_; eval { $self->$event($args); }; carp $@ if $@; } 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 29
  • 30. メッセージの送信 #!/usr/bin/env perl use strict; use warnings; use utf8; use Honeybee::Hive::Event; my $event = Honeybee::Hive::Event->new; $event->trigger({ event => 'prepare_crawl', args => { process_seq => 1, } }); 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 30
  • 31. メッセージの受信と実行 use Storable qw/thaw/; use AnyEvent::Socket; use AnyEvent::Handle; use Honeybee::Hive::Event; my $event = Honeybee::Hive::Event->new; tcp_server '', $conf->{socket}, sub { my ($fh) = @_; my $handle; $handle = AnyEvent::Handle->new( fh => $fh, on_read => sub { my $buffer = $handle->rbuf; my $data = thaw($buffer); $event->execute($data->{event}, $data->{args}); } ); }; AE::cv->recv; 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 31
  • 32. イベントの処理 package Honeybee::Hive::Event; use Storable qw/freeze/; use IO::Socket::UNIX; sub trigger { ... } sub execute { my ( $self, $event, $args ) = @_; eval { $self->$event($args); }; carp $@ if $@; } sub prepare_crawl { ... $self->trigger({ event => 'crawl' }) } 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 32
  • 33. 全体の流れ Hive Bee 事前処理 EC2インスタンス クロール処理 Flow Management Crawler EC2インスタンス Daemon Daemon 事後処理 他のレンタルサーバ Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 34. 考察 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 35. 今までは... • 一つのロジックに一連の処理の流れが書い てあったため、処理の一部分だけをスケール アウトすることが難しかった • ロジックを分割したとき、状態遷移を管理する ためには、定期的にチェックするしかなかった • 例えば...状態を表すフラグをDBに設けそのフラ グを定期的にチェックしたり... Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 36. 今回の設計で... • 複雑なロジックを出来る限りシンプルに分割 することで、特定の処理をスケールアウトしや すい設計にした • crontabなどで定期的にチェックする構成をや め、各処理の最後で自動的に次の処理を実 行させるようにした • 今回は、ソケット通信にて実装した Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 37. Amazon EC2を使用すると... • 新しいインスタンスを立ち上げるだけで、捌け る数を増やすことができる • クローリング部分はシンプルな処理なので、 スペックを必要とせず、1インスタンスに掛か るコストが低い Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 38. まとめ • 今回の実装コンセプトはほんの一例にすぎま せんが、こういったアプローチもよいのではな いかと思います • ご意見ありましたら是非お聞かせ下さい Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved.
  • 39. 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 39
  • 40. ご静聴ありがとうございました 10/14/2010 Copyright Since 1999 © GaiaX Co. Ltd. All rights reserved. 40