タグ

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

  • PSGI/Plackで非同期 Web Server - blog.nomadscafe.jp

    PSGI/Plackにおいて、非同期にレスポンスが返せるstreamingという仕様/機能が追加されました。 PSGI/Plack streaming is now complete これを使うと、streamingをサポートしたサーバから非同期/nonblockingにhttpやGearmanを利用して外部へ問い合わせを行い、その結果をレスポンスしたりできます。 また、これがPlackで既に実装済みなので、非常に短いコードでサーバの実装ができちゃいます。 すばらしいですね。 すでにmiyagawaさんが、この機能を利用した非同期Web Framework「Tatsumaki」を書かれています。 イベントを扱う部分が隠蔽されているので、これを使うとさらに簡単に実装できます。 すばらしすぐる。 ここでは、簡単に外部へAnyEvent::HTTPを用いて、HTTPリクエストを行うサンプルを書い

  • データベースサーバを複数台構成とか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という数字がならんでいます。怖い怖

  • Plack::Server::AnyEvent::Prefork - blog.nomadscafe.jp

    Preforkした上でAnyEventのloopを動かすPlack::Server::AnyEvent::Preforkを、先週のPlack Hackathonの時間で形にしてgithubにpushしました。 はなぼくろ師との共作です。 目的は、AnyEventでもマルチコアを使いたいよねという理由ですが、それほど一般的な利用はないと思います。plackupの方でprefork処理を行うとかいう話もあったりなかったりなので、しばらくCPANにはアップロード予定ありません。不足している部分もありますので、fork & patchウェルカムです Hello Worldだけのテストで生AnyEventとの比較 ベンチマークをしたサーバはVMware ESXi上の仮想マシン。一応CPU 2つ割当てある 起動はこんな感じ plackup -a hello.psgi --server AnyEvent

  • YAPC::Asia 2009で発表した件をブログに書いた件 - blog.nomadscafe.jp

    YAPC::Asia 2009で大規模画像配信とPerlについて発表しました。 会社のブログの方に資料公開しましたので、 このブログでも紹介です 一部パワポのアニメーション機能使っている部分が抜けていますので 会社ブログの方で公開しているPPTファイルも参照して頂けると幸いです 資料の中で、Image::Magickのベンチマークをしているのですが、その際画像サイズの変更のアルゴリズムについては触れていませんでした。 確かに画質は悪くなりますが、変換のアルゴリズムを変更するとスピードがあがります。 ImageMagickの画像の拡大縮小のアルゴリズムについては以下のページが参考になります。 りゃくえふ » Blog Archive » ImageMagickの画像の縮小 しかし実際、Image::Magickが重たいのは画像loadの時です。 Image::MagickのReadだけと、I

  • mod_libmemcached_cacheでApacheのcacheをmemcachedに保存する : blog.nomadscafe.jp

    mod_libmemcached_cacheでApacheのcacheをmemcachedに保存する Apacheのmod_cacheのキャッシュ保存先にmemcachedが使えればいいのにと長年思ってきましたが、mod_libmemcached_cacheがそれを実現してくれました。 しかも、libmemcachedを利用しているので、性能も高く、またConsitent Hashingも使えますし、バイナリプロトコルもばっちりです。 図にするとこんな感じ。revserse proxyのcacheがmemcachedになるので、cache効率が上がり、またApplicationサーバからも同じmemcachedが参照できるのでcacheを変更したりできるかもしれません。 導入 mod_libmemcached_cacheはgithubから入手できます http://github.com/a

  • Squidのキャッシュの消し方 : blog.nomadscafe.jp

    Squidのキャッシュの消し方 Net::Squid::Purgeというモジュールがでてたので。 Squidのcacheの消し方は、Squidから特定のキャッシュのみを削除する方法にsquidclientを使ったやりかたが紹介されているのですが、上のモジュールはそれをPerlから便利に使えるようにしたもの見たいですね。 主にReverse Proxyとして使っているパターンですが、最近ではsquidclient使ったり、IO::Socketやtelnetで叩くのが面倒なので、HTTPの仕様を利用しています。 HTTP/1.1の仕様でキャッシュサーバは Cache-Control: max-age=n のようなリクエストを受け付けた場合に、キャッシュの経過時間がn秒よりも古かった場合、expires等が切れてなくても、オリジンのサーバにリクエストを行うことになっています。 そこでこれを利用し

  • WWW::Curlで進捗表示しつつダウンロード : blog.nomadscafe.jp

    WWW::Curlで進捗表示しつつダウンロード 意味のないエントリー perl - LWP::UserAgentで進捗表示しつつダウンロード WWW::Curlだとcurlの機能でできるYo #!/usr/bin/perl use strict; use warnings; use WWW::Curl::Easy; use File::Basename; my $uri = shift || die "$0 http://example.com/big.iso [filename]"; my $filename = shift || basename($uri); open my $content, '>', $filename or die "$filename:$!"; open(my $header, '>', \my $header_data); my $curl = WWW::C

    lapis25
    lapis25 2008/11/21
  • バイナリ版Q4Mインストールメモ : blog.nomadscafe.jp

    バイナリ版Q4Mインストールメモ バイナリ版のQ4Mをインストールしたときのメモ バージョンは、MySQL-5.1.26とQ4M-0.8.3。OSはFedora8@x86_64 MySQL オフィシャルのrpmを利用します。 MySQLのサイトだと5.1.28になっているので適当なミラーから5.1.26を探してくる。 http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.1/ MySQL-client-5.1.26-0.glibc23.x86_64.rpm MySQL-server-5.1.26-0.glibc23.x86_64.rpm MySQL-shared-compat-5.1.26-0.glibc23.x86_64.rpm をダウンロードしてきてインストール Q4M Q4Mのサイトにファイルがあるので落としてくる http://q4

    lapis25
    lapis25 2008/10/20
  • WEB+DB PRESS Vol.47でmemcachedの記事書きました : blog.nomadscafe.jp

    WEB+DB PRESS Vol.47でmemcachedの記事書きました WEB+DB PRESS Vol.47にてmemcachedの特集がされます。その中の2つの章を執筆させて頂きました。 Perlでのライブラリの利用方法の紹介、それとTokyo Tyrantなどの互換アプリケーションについて書きました。 詳しい目次等は技術評論社様のサイトで見れます。 http://gihyo.jp/magazine/wdpress/archive/2008/vol47 WEB+DB PRESS Vol.47は今月(10月)24日発売です。 WEB+DB PRESS Vol.47 posted with amazlet at 08.10.16 WEB+DB PRESS編集部 技術評論社 売り上げランキング: 4249 Amazon.co.jp で詳細を見る 他にもgihyo.jpで、memcache

  • Cache::Memcached::Fastを試す : blog.nomadscafe.jp

    Cache::Memcached::Fastを試す Perlの新しいmemcachedクライアント「Cache::Memcached::Fast」がでていたので試してみた 結論から言うと、これは使えそう。 まず、C::M::Fastはmemcached-1.2.4でサポートされた、append, prepend, cas, gets, gets_multiをサポートする唯一のPerlクライアントです。また、常に問題となるCache分散にKetama consistent hashing algorithmをサポートしているためCacheの組み替えを最小限にしてCacheサーバの追加が行えます。 手元のベンチマークでは50%〜80%、処理によりますが300%以上高速化されてます インストールは普通にCPANから行えます。ただし、memached-.1.2.4が動いていないとmake test

  • OpenIDでテキストを共有できるWebサービス LIMILIC つくりました : blog.nomadscafe.jp

    OpenIDでテキストを共有できるWebサービス LIMILIC つくりました URLがIDっていうのはキャッチーじゃないのでOpenIDは使えないと言い続けていましたが、ここ最近の盛り上がりについカッとなってサービスをつくりました LIMILIC - OpenIDでテキストを共有できるWebサービス OpenIDをつかってLIMILICにログインすると、はてな記法を用いてWikiライクなページを作成できます。そのページに対して閲覧と編集それぞれにアクセス制御をかけるできます。 閲覧はすべてのユーザに、編集は一部の方にというようにアクセス制御することでお知らせページを作ったりと、writeboard風に使えます。メールアドレスや共有のパスワードなどよりもずっと安全じゃないかと思います。 あと、おまけ的にanonymous機能も付いていますので、匿名日記も書けます OpenIDって何?って方

  • ImageMagickでAnimated GIFのサムネイルをきれいにつくる方法 : blog.nomadscafe.jp

    ImageMagickでAnimated GIFのサムネイルをきれいにつくる方法 ImageMagickでアニメーションGIFのサムネイルをきれいに作るには、 PerlMagickなどのAPIを使うのではなく、コマンドラインを使うのが楽です # /usr/bin/convert animated.gif -coalesce -resize 30x30 -deconstruct resized.gif coalesceオプションとdeconstructがポイント。 それぞれ、 coalesce: 画像シーケンスをマージ deconstruct: 画像シーケンスを構成要素 という意味になります あと問題は、出来上がった画像サイズがどうしても大きくなってしまうことです

  • Perlで「もごもご」にアクセスする : blog.nomadscafe.jp

    Perlで「もごもご」にアクセスする もごもごのAPIは、Twitter互換なので、Perlからアクセスする場合は、Net::Twitterが使えます。 APIの互換性重要 my $mogo2 = Net::Twitter->new( username => 'xxx@example.com', password => 'myapipass', apirealm => 'mogo2 api basic auth', apihost => 'api.mogo2.jp:80', apiurl => 'http://api.mogo2.jp/statuses' ); my $result = $mogo2->update($status); もごもごのAPIでは、さらに、timelineにオプションが渡せたり、スレッドの取得の拡張APIがあるので、Net::Twitterをbaseにして書いてみ

  • Plagger::Plugin::Aggregator::Async : blog.nomadscafe.jp

    Plagger::Plugin::Aggregator::Async Plaggerネタ YAPC::Asiaのikebeさんのプレゼンにも名前がでてきたHTTP::Asyncを使ったAggregator。 パラレルでFeedの取得ができるので、Simple使うより早い。Xangoより使うのが簡単。 まだ、Cache周りが不完全。 confに以下で使える plugins: - module: Aggregator::Async - module: Subscription::Config config: feed: - https://blog.nomadscafe.jp/ ソースは↓追記に張り付けた。

  • Cache-Control: max-ageとSquid : blog.nomadscafe.jp

    Cache-Control: max-ageとSquid 「Cache-Control: max-age=秒数」が、クライアントからのリクエストにあった場合、キャッシュサーバの振る舞いは、『HTTPプロトコル(ソフトバンクパブリッシング・isbn:4797318333)』によると max-ageディレクティブのもう一つの目的は、クライアント側での使用を前提としたものです。クライアントは、リクエストにmax-ageディレクティブを含めることによって、指定した値より古くなければキャッシュされたオブジェクトを受け入れる用意があることを伝えます。キャッシュサーバが保持しているエントリが、クライアントが要求した経過時間より古い場合には、キャッシュサーバは、たとえオリジンサーバから受け取ったオリジナルのレスポンスの中で該当エントリーが以前有効であるべきと指示されていても、クライアントに対してはキャッシ

  • Shell::Perl と pirl を試してみる : blog.nomadscafe.jp

    Shell::Perl と pirl を試してみる id:naoya氏がブクマしてたのを見て入れてみた。 pirlは、perlshのような対話型のperlシェルです。 Shell::Perlをinstallしようとすると、新しいExtUtils::MakeMakerを要求されるので、cpanコマンドでいれずに、Makefile.PLを書き換えた -use ExtUtils::MakeMaker 6.31; +use ExtUtils::MakeMaker; 同時にinstallされるpirlコマンドを実行するとこんな感じ。 $ pirl [~] Welcome to the Perl shell. Type ':help' for more information pirl @> 1+1 2 pirl @> log 10 "2.30258509299405" pirl @> :helpでヘ

    lapis25
    lapis25 2007/03/15
  • デブサミ2007の発表資料 Nagiosのプラグインの話 : blog.nomadscafe.jp

    デブサミ2007の発表資料 Nagiosのプラグインの話 2月14日のデブサミの「出張Shibuyaイベント」でLTしてきました。 内容は、Nagiosのプラグインを作成する話と、nrpeの簡単な説明です。 発表資料:nagios.pdf プラグインを作る時には、exit時のステータスコードだけ気にすればいいので、 監視したいものがちょっと複雑なもの、例えばWWW::Mechanizeでログインしてほげほげするとかいう時でも難しくない。当たり前だけどPerlじゃなくても全然おk。 そういえば、Nagiosって個人で使う機会あまりないですよね。 発表資料を作成するときに、自宅サーバ(CentOS)にyumでインストールしてみましたが、監視するものがないので起動すらしていません。 強いて言えば、femoかもしれないけど、femoのサーバが落ちるより自宅の回線が落ちる回数の方が多いというオチにな

  • 同じコマンドを複数のサーバで実行 : blog.nomadscafe.jp

    同じコマンドを複数のサーバで実行 Assurerにシェルモードが追加されたので、もういいかなという感じですが、自分の使っているスクリプトをさらしてみる。 sshで1つのコマンドを複数のサーバに順番に実行させていけます。 「password:」のプロンプトに対して、expectを使って自動で入力する機能もあるので、sudoなどにも対応 mssh -f list.txt -u user -p -- id -f ファイル名: ホスト名が書いてあるファイル名。1行1ホスト -u ユーザ名: ログインするユーザ名 -p: パスワードを使うフラグ --: これ以降にコマンド 以下ソース #!/usr/bin/perl package MSH; use strict; use warnings; use Expect; sub new { my $class = shift; bless {@_}, $

  • lighttpd-1.5.0-r1454 ベンチマーク : blog.nomadscafe.jp

    lighttpd-1.5.0-r1454 ベンチマーク http://blog.lighttpd.net/articles/2006/11/15/pre-release-lighttpd-1-5-0-r1454-tar-gz にでているlighttpd 1.5.0のpre releaseを前回と同じように3KB*100万個でテスト。 結論から言うと、このlighttpdのaioの実装では小さいファイルがたくさんという条件ではそれほど効果がなさそうです ■普通にlinux-sendfile ・設定 server.document-root="/var/www/html" server.port=8080 server.network-backend = "linux-sendfile" server.event-handler="linux-sysepoll" ・結果 $ ./http_lo

  • 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