タグ

ブックマーク / blog.nomadscafe.jp (18)

  • Webアプリケーションにおける Job Queue システムの構成例と Worker を作る際に気をつけること - blog.nomadscafe.jp

    Webアプリケーション内で処理を直列に実行せずにJob Queueに回して非同期に実行することが多くなって来て久しいと思いますが、そのおすすめ構成と気をつけることについてつらつらと。 1) 既存のデータベースをキューとして使う構成例 1つ目はMySQLなどのデータベースをキューとして用いる例。既にアプリケーションで利用しているデータベースにキュー用のテーブルを作成して利用します。データベースを利用したキュー管理の仕組みとしてJonk、Qudo、TheSchwartzなどがPerlでは有名どころです。 依存するミドルウェアが増えないので最もシンプルな構成になると思います。 上記の図ではWorkerはアプリケーション内で実行することで冗長性を確保しますが、キューを格納するデータベースはSPOFになります。しかし、、データベースに障害があった場合キューだけでなくすべてのサービスが停止すると思われ

    ikebe
    ikebe 2011/06/13
  • 株式会社ライブドアに入社しました - blog.nomadscafe.jp

    先月末にミクシィを退職し、6月1日より株式会社ライブドアにて働かせていただくことになりました。 出社日2.0日目的な意味で。 ライブドアには以前からの知り合いのエンジニアも多くいたり、先月にはJPAの代表の牧さんが(再)就職をしていたり、同日入社にはアノPerlエンジニアもいます。それぞれが高い技術をもっている楽しみな職場です。ライブドアでの主な業務内容は前職に引き続きシステム運用を見ることになります。 Blogをはじめとするlivedoorのメディア、サービスを運用やスケーラビリティといった立場から支えて行きたいと思いますので、これからもよろしくお願いします。

    ikebe
    ikebe 2010/06/03
  • nginxの組み込みperlで非同期に遅延させてレスポンス - blog.nomadscafe.jp

    ひさびさにnginxなどいじっている。 nginxがnon-blockingで動いているので、組み込みのPerlでもblockingする処理をいれることはおすすめされていないのですが、sleepだけは機能が用意されていました。使い道がよくわからないけど、とりあえずレスポンスを遅延させるのだけやってみた。 まず、handlerとなるperlモジュール package delay; use nginx; sub handler { my $r = shift; my $args = $r->args; $args =~ m/sleep=([^&]+)/; my $sleep = $1 || 1; $r->variable("sleep", $sleep); if ( $sleep ne "no" ) { $r->sleep($sleep * 1000, \&next); return; } $

    ikebe
    ikebe 2010/02/08
  • 来年度(2010年度)のRFPで主流となりそうなサーバ - blog.nomadscafe.jp

    WEB+DB PRESS Vol.51の連載で、サーバRFPを設定してそれに基づいて購入していると書きましたが、来年度(2010年度)ぐらいのRFPになりそうな主流となるサーバを考えてみました。 まず、共通していること、前提など CPUのコア数はHTなどによる論理コア含む計算 ネットワークインターフェイスは1Gbpsを2つ以上。RX/TX MultiQueueをサポートしていること SSDはIntel X25-M 160GBもしくは同等製品 サーバは主に4タイプあります。 ■Utility Server 小規模DB、Q4MやGearmanなどのJobQueue/Workerサーバ、memcachedやSquid/Varnishなどのキャッシュサーバに利用するサーバ。目的に応じてHDDをSSDに換装して利用できることが必要となります。 CPU 8コア以上 * 1 Memory 16GB HD

    ikebe
    ikebe 2010/01/27
  • データベースサーバを複数台構成とか2010年代には流行らない - blog.nomadscafe.jp

    奥一穂さんの「ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない」にフォローのような感じで。 例によってタイトルは煽りです。 奥一穂さんのエントリーでは、「5,000万PV/Month」という見積もりでアプリケーションサーバの台数を1台と計算していますが、これからは「1,000万PV/Day」を超えるサイトが多く生まれてくると予想しています。どんなサイトかというと、mixiアプリやモバゲーなどにソーシャルゲームを提供するサイトです。 ソーシャルゲームサイトのキャパシティプランニングについては中澤さんのエントリーが参考になります。 The Art of モバゲー Capacity Planning The Art of Mixi-mobile-appli Capacity Planning 最も人気がでた場合には数千万から数億PV/Dayという数字がならんでいます。怖い怖

    ikebe
    ikebe 2010/01/12
  • lighttpd vs Perlbal : blog.nomadscafe.jp

    lighttpd vs Perlbal lighttpdのlinux-aioサポートの記事を読んでいて気になったので、既にaioをサポートしているPerlbalの静的コンテンツを配信するWebサーバとしての性能を調べてみた。 サーバは CPU Pen4 2.8GHz ( HyperThreading付き) Memory 512MB FedoraCore6 な環境です。 上記の記事の様にファイルを3GBほど作成(メモリーより明らかに多い量) 小さい画像ファイルと見立てて、3KBのファイルを10*100*1000=1M個作成しました。 #/bin/bash for i in `seq 1 10`; do for k in `seq 1 100`; do mkdir -p $i/$k; for j in `seq 1 1000`; do dd if=/dev/zero of=$i/$k/$j b

  • Squid2.6 のCOSSがいい感じ : blog.nomadscafe.jp

    Squid2.6 のCOSSがいい感じ Squidの比較的新しいcache_dirのCOSSが結構いい感じに動いている。 COSSだと、cache objectが1つの大きなファイルに納められるので、ディスクIOがかなり改善しています。 あまり情報がないのですが、Wikiに設定の説明と、aufsとの比較とかがあります。 cache_dir coss /var/spool/squid/coss 30000 block-size=2048 max-size=500000 cache_swap_log /var/spool/squid/%s こんな感じの設定のサーバで、cache個数 50万ファイル以上、最大リクエスト数500req/sec以上、Hit rateが99%の状態において、CPU負荷がUser:数%、iowait:1%弱とかで推移。もうちょっとcache個数の多いサーバでもiowai

    ikebe
    ikebe 2006/10/10
  • Deployツール : blog.nomadscafe.jp

    Deployツール 会社でYAMLでDeployのPlanを書いて、実行できるDeployツールを作成中 common: proxies: - proxy1 - proxy2 plans: - name: mod_proxy concurrency: 2 base: ModProxy method: - rsync - httpd_graceful rsync_exclude: - .svn/ rsync_src: /mod_proxy rsync_dest: /var/proxy hosts: c{proxies} - name: mod_perl concurrency: 1 base: ModPerl method: - proxy_drop - httpd_stop - rsync - httpd_start - proxy_add balancers: c{proxies} ba

    ikebe
    ikebe 2006/09/29
    うちも今作ってたりする。やはり Plagger を参考にしてるのですげー似てる。あとでちょっと晒す
  • Load Balancer ManagerにアクセスするPerl Module : blog.nomadscafe.jp

    Load Balancer ManagerにアクセスするPerl Module mod_proxy_balancerのLoad Balancer ManagerにアクセスするPerl Moduleなんかも作っていたりするので、簡略版を載せてみる。 my $manager = BalancerManager->new( manager => 'http://proxy/lbman', balancer => 'test', # balancer://testの設定 ); $manager->enable('http://foo:8000'); #balancermanagerに登録してあるuri $manager->disable('http://foo:8000'); enable/disableの戻り値は画面のまんまで、Ok or Dis or Err。 該当しない場合は、「-」になる。

    ikebe
    ikebe 2006/09/22
  • mod_proxy_balancerのretry : blog.nomadscafe.jp

    mod_proxy_balancerのretry mod_proxy_balancer(mod_proxy)のretry設定は、 コネクションをプーリングするための、リトライのタイムアウトを秒で 指定します。バックエンドサーバへのコネクションプーリングが失敗した場合は、 タイムアウトの期間が過ぎるまで、そのサーバにリクエストをフォワードしません。 というもので、 BalancerMember http://1.2.3.6:8000 retry=60 loadfactor=10 こんなように書ける。 アプリケーションサーバにデプロイするときに、 httpdの停止 rsync httpdの開始 という順番で行うのが通常だと思うけど、デフォルトのretry間隔が60秒になっているため、httpdを開始してからアクセスがバックエンドに届くには、最大1分間待たなければならない。 バックエンドのサーバ

  • Tagの検索にMySQLの全文検索を使う : blog.nomadscafe.jp

    Tagの検索にMySQLの全文検索を使う Tags with MySQL fulltextを参考にして試してみた。 Femoの中で、タグの絞り込み機能を実装したのに続いて、「完了」や「finish」と言ったタグがついている場合表示しないというオプションを考えている。 そうなってくると、SQLをどう書けばいいのか、また複雑なSQLを構築したときにパフォーマンスは大丈夫なのかと心配。そこで、上記のURLを参考にしながらMySQLの全文検索に注目。 create table ft_tags( id int unsigned not null auto_increment primary key, tags text, unpack text, fulltext (unpack) ) と言うテーブルを作成。 ここに、 my @tags = ( q/task femo/, q/femo mail t

    ikebe
    ikebe 2006/03/28
  • WebService::Livedoor::Weather : blog.nomadscafe.jp

    WebService::Livedoor::Weather すでに誰かが作っていそうな、PerlでLivedoor Weather Hacksにアクセス。とりあえず版。 id:p4lifeさんのPHP で Livedoor のお天気Webサービスを使うとほぼ同じインターフェイス。地域名とidとの結び付けデータのforecastmap.xmlをモジュール内部ではなくサーバから持ってくるところが違うぐらい。 my $lwws = WebService::Livedoor::Weather->new(); my $ret = $lwws->get('70','tomorrow'); #my $ret = $lwws->get('東京','today'); #print Dumper($ret); print $ret->{title},"¥n"; print $ret->{description

  • pure-ftpdのカスタム認証ハンドラ : blog.nomadscafe.jp

    pure-ftpdのカスタム認証ハンドラ ライブドアBlogでも使っているらしいpure-ftpdは、カスタム認証ハンドラを簡単につくれます。 認証だけではなく、ftpd内蔵のquota機能なんかも使えて便利です。 http://www.pureftpd.org/ ドキュメントも上のサイトから行けます。 インストールは、 $ ./configure --with-altlog --with-extauth --with-paranoidmsg --with-quotas --with-throttling --without-inetd --prefix=/usr/ $ make install-strip こんなconfigureでやってます。 認証ハンドラに使うスクリプトでは環境変数として #!/bin/sh $AUTHD_REMOTE_IP $AUTHD_ACCOUNT $AUTHD

    ikebe
    ikebe 2005/12/18
  • Class::DBI::SweetでのJOIN : blog.nomadscafe.jp

    Class::DBI::SweetでのJOIN Class::DBI::Sweetのjoinをつかった検索を試してみた。 ソースコードは作っているアプリケーションからの抜きだしなので足りないところがあるかも。 EntryとそのTagを想定して、 package Entries; __PACKAGE__->table('entries'); __PACKAGE__->columns(All=>qw/id title text created_on/); __PACKAGE__->has_many("tags"=>'Tags'); 1; package Tags; __PACKAGE__->table('tags'); __PACKAGE__->columns(All=>qw/id entry_id tag/); __PACKAGE__->has_a('entry_id'=>'Entries'

  • Class::DBIでobejctやreferenceを保存 : blog.nomadscafe.jp

    Class::DBIでobejctやreferenceを保存 「Class::DBI で疑似的カラム」をちょっと機能強化で書いたモジュールをもとにClass::DBI でobejctやreferenceをシームレスに保存できるプラグインを書いてみた。 使い方 package My::Film; use base 'Class::DBI'; use Class::DBI::Plugin::SerializeColumn; __PACKAGE__->columns(All => qw/id title props/); __PACKAGE__->serialize_column('props'); などとクラスを書いて、 My::Film->create({ id=>1, title=>'四月物語', props =>{year=> 1998,director=>'岩井俊二'} }); とでき

    ikebe
    ikebe 2005/11/22
  • FormValidator::Simpleにエラーメッセージ機能がついた。 : blog.nomadscafe.jp

    FormValidator::Simpleにエラーメッセージ機能がついた。 FormValidator::Simpleがバージョン0.10でMESSAGE HANDLING機能が追加されたのでさっそく試してみた。 想定するフォームは、以前試した時と同じ <form> メールアドレス:<input name="mail" type="text" id="mail" size="20" /><br /> パスワード:<input name="password" type="password" id="password" size="20" /><br /> もう一度パスワード:<input name="password_confirmation" type="password" id="password_confirmation" size="20" /><br /> パスワードは半角英数字5

    ikebe
    ikebe 2005/11/18
  • フォームの入力を確認するData::FormValidatorとFormValidator::Simple : blog.nomadscafe.jp

    フォームの入力を確認するData::FormValidatorとFormValidator::Simple フォームから送信されたデータのチェックをするモジュールはCPANに二つあります。Data::FormValidatorと加藤さんのFormValidator::Simpleがそれ。いままでガリガリと書いていた部分をこれを用いて楽ができないかと試し中。 メールアドレスとパスワードを入れるような以下の登録画面があって、 <form> メールアドレス:<input name="mail" type="text" id="mail" size="20" /><br /> パスワード:<input name="password" type="password" id="password" size="20" /><br /> もう一度パスワード:<input name="password_co

    ikebe
    ikebe 2005/10/27
  • Catalystでのセッション管理はどれがいいのだろう : blog.nomadscafe.jp

    Catalystでのセッション管理はどれがいいのだろう Catalystをちょっとやり始めている。 シスコのHUBの方はデータセンター内で他者さんのラックで使われているのをよく見ます。 うちは使ってないけど。管理機能は別としてすぐに代替が可能なお手頃なHUBの方がうちの運用にあっているんじゃないかと思うのだがごもごもごも。。 んで、勉強にCatalystでアプリケーションを作るのにあたって、セッション管理をどうしたらいいのか調べ中。 プラグインが4つほどあるんですよね。 Catalyst::Plugin::Session::FastMmap Catalystの制作者のプラグイン。データの保存には、Cache::FastMmapを使う。セッションキーのリダイレクト時の書き換え機能やHTML上のリンクへの埋め込み機能もある。FastMmapはけっこう速いらしい。たぶん一番ベーシック Catal

  • 1