特定のディレクトリ下の古いファイルを掃除するPHPスクリプト

Posted filed under ServerSide.

Photo by IanVisits  Twitterで友達に「Webサーバ上の古いファイルを消すスクリプトが欲しい」と相談されて、PHPで作ってみました。 このまま眠らせるのも勿体ないので、ブログ書くことにしました。  はじめはcronとfind -exec rmしようと思ったんですが、sshが使えないらしいので、PHPで作って外部から定期的に呼び出すことにします。  下のファイルを適当な所に設置して、Webcron.org、Free Web Cron Serviceなど外部から定期的にURLをアクセスしてくれるサービスに登録します。 (これらのサービスを私は利用したことがないので、内容や安定性についてはコメントできません)  ダウンロードはgistから。

NoSQL – SQLはもう古い?

Posted filed under ServerSide.

Photo by shindotv  ここ最近、海外のブログで「NoSQL」という単語をちょこちょこと見るようになりました。  これは新しいデータベースのムーブメントで、「SQL=リレーショナル」ではないデータベースの事を指しています。  NoSQL DBサーバの有名な物は、Facebookがリリースした「Cassandra」、Erlangで書かれた「CouchDB」、日本からは、mixiがリリースしている「TokyoTyrant」があります。  またGoogle App Engineでは、DataStoreというBigTableベースのNoSQLサービスが提供されています。  ある程度ユーザを集めたコンシューマ向けサービスは、大抵の場合パフォーマンスとの戦いとなります。  技術誌の中でも「スケールアウト技法」的な記事を目にすることが増えてきたことからも、多くのサイト運営者が、パフォーマンスの問題を抱えていることがわかります。  多くの場合、問題になるのは、データベースのパフォーマンスです。

AmazonがMySQL 5.1をサービス化 – Amazon RDS

Posted filed under ServerSide.

 AmazonがAmazon RDSという、MySQL専用のインスタンスをサービス始めました。  これは、MySQL 5.1がセットアップしてあるインスタンスで、Small(1CPU, 1.7 GBメモリ)〜Quadruple Extra Large(26CPU, 68 GBメモリ)までスペックが提供されています、Smallは$0.11/時 ($81/月)か。Largeだと$0.44時で$327/月なので、通常のEC2よりはちょっと高めの様です。  EC2と違うのは、ネットワーク代は別でDBへ外部からアクセスした場合には、1GB辺り、Inは$0.10、Outは$0.10〜$0.17掛かります。  これ以外に、1GB辺り$0.1のストレージ代と、100万IOアクセス辺り$0.1の代がかかります。この辺はEBSと同じみたいですね。

OSXのApacheにmod_reproxyをインストールする

Posted filed under ServerSide.

OSXのApacheにKazuho@Cybozu Labsさんのmod_reproxyをインストールする方法。 sudo apxs -i -a -c -Wc,-Wall -Wc,-g -Wc,-O2 -Wc,”-arch x86_64 -arch i386 -arch ppc” -Wl,”-arch x86_64 -arch i386 -arch ppc” -lcurl mod_reproxy.c sudo echo “Reproxy On” > /etc/apache2/other/reproxy.conf sudo /usr/sbin/apachectl restart いつか作らないとなーと、ずっと思っていたので、非常にうれしい!

PerlbalのX-Reproxy-Urlで、ヘッダを渡すパッチ

Posted filed under ServerSide.

Photo by E Cashell  PerlbalのX-Reproxy-Urlを使おうと思ったのですが、Reproxy先のURLへヘッダを渡す方法が無かったので、ちょっとしたハックをしました。  X-Reproxy-Headersに渡したいヘッダをカンマ区切りで入力すると、そのヘッダをReproxy先にも渡します。  下記のようなリクエストをperlbalに返すと、 X-Reproxy-Url: http://example.com/ X-Reproxy-Header: Cookie,X-Version Cookie: ID=foobar X-Version: 1.0  Reproxy先には、下記のようなヘッダが渡されます。 Cookie: ID=foobar X-Version: 1.0  Perlは4止まりだったのですが、がんばってパッチを作ってみました。 perlbal-reproxy-header-060108.patch ホントは、プラグインとかにしたいんですが、どなたか手伝ってくれませんか? 追記 RailsConfで出ていた、WarBookがPerlbalを使ってるって言ってたなぁ。

Amazon EC2、S3の解説記事がgihyo.jpで公開されました

Posted filed under Publications, ServerSide.

 WEB+DB PRESSに執筆した、Amazon EC2/S3の解説記事が、連載:はじめてのAmazon EC2&S3 ~これからの新サービスの公開の形~|gihyo.jp … 技術評論社として、webで公開されました。本日から4日連続で公開されていきます。  Amazon EC2/S3は、柔軟性の高いサーバとして、Webサービスを作る側としては非常におもしろく、注目されているサービスだと思います。  RailsやJavaを動かすサーバがない! ちょっと新しいアプリをサーバにインストールしてみたいけど、既存のマシンにはいれたくない!そんなときにはEC2がおすすめです。  ぜひこの記事を読んで、試してみてください。 追記  質問、リクエストなどありましたら、このコメント欄にお願いします。

Ubuntu / OSXにPerlbalをインストールする

Posted filed under ServerSide.

Photo by stebulus  nginxなども調査してみたのですが、Perlbalが一番細かくキャッシュコントロールできること、Perlで書かれているので改造がしやすいことから、これを使う方向で進めてみることにしました。  まずは、S3にreproxyする場合に、認証用のヘッダを付けるようにしないとな。  ときどき死ぬとの情報もあるのですが、これはプロセス監視と複数起動することで対処することにします。  OSXや、UbuntuにPerlbalのパッケージが無かったので、インストールする方法をまとめておきます。  パフォーマンスはまだ計測していないけど、WassrもPerlbalを使ってるんですね。

[メモ] AmazonS3とEC2を使う時にはX-REPROXY-URL

Posted filed under Ruby on Rails, ServerSide.

 S3+EC2を使っていると、S3に保存したムービーや画像と言った大きなデータを、クライアントに返したい場合があります。 そのときにリバースプロキシを使う方法もあるけど、権限やユーザによって振り分けたい場合などは、単純なリバースプロキシではうまくいきません。  Rails側でNet::HTTPなどを使ってS3からデータを取ってくる方法もあるのですが、それだとパフォーマンスが悪すぎです。  負荷分散することを考えると、これはApacheモジュールか、リバースプロキシ側でやって欲しい作業です。自分で書こうと思ったけど、調べてみたらやっぱり同じようなのがありました。  リバースプロキシなどの中には、X-REPROXY-URLというヘッダをサポートしているものがあり、これを戻すとリバースプロキシが代わりにこのURLにアクセスしてデータを返してくれます。  Perlbalが始めにサポートしたらしいですが、lightlyやapacheもパッチが出ているようです。Perlbalはリバースプロキシとしても、性能が高いらしいので、これを評価してみようと思います。 メモリンク X-SendFile, X-REPROXY-FILE, X-REPROXY-URLを試してみる – Yet Another Hackadelic X-REPROXY-CACHE-CLEAR もあわせて使いたい人向けショート BK

Google App Engineは罠じゃないか?

Posted filed under ServerSide.

 「Google版EC2欲しいよねー」と昨日チャットで話していたら、いきなりGoogle App Engineがリリース。夢かとオモタ。  Google App Engineは、Googleが一般ユーザに提供するGoogle製サーバ環境。Googleが検索やgmailに使っている環境と同じ環境が使えるらしい。  Googleの舞台裏とも言える、GoogleのファイルシステムGFSや、超大容量データベースのBigtableが自由に使えるのは、非常に楽しそう。クロール用APIまで標準で提供されているのが、Googleらしい。  ただし、Amazon EC2とは違い、LinuxなどのOSを解放するのではなく、言語環境だけが提供されている。 いま公開されているのは、Pythonだけ。なので、Pythonで書かれたアプリケーションしか対応しない。 ほかの言語も対応する予定らしい。  MySQLとかPostgreSQLも用意されていないので、データベースはBigtableだけ。Bigtableはリレーショナルデータベースではないので、ほとんどのアプリケーションは、この辺を書き直す必要がありそう。  そのため、ほかで動いているPythonのアプリを、そのままApp Engineで動かすのは難しそう。 という訳で、Google App Engineでアプリを動かすには、データベースをBigtableにする必要があり、それはほかの環境では動かないわけで、Googleでしか動かせないアプリケーションになってしまう。  さすがにGoogle以外で動かせない環境で、プログラムを作ってサービスを立ち上げるのは、あまりにGoogleに依存していて怖いなぁ。  Googleとしては、これで面白いアプリが出れば、その作者をスカウトしたり、会社を買収したりするだろうし、そもそも、これによって多様なアプリケーションが出る事は、ユーザがネットに滞在する時間が増え、Googleにはメリットがあるんだろうなとは思うけど。  これ専用にガリガリとアプリを書いて、サービスするのは罠だと思うけど、自分用WikiEngineをインストールしたり、Plaggerを常駐させておくのには便利そう。  Plaggerを簡単にインストール出来て、ついでにBigtableにデータ突っ込んでRSS検索できるようなパッケージでないかなぁw p.s  乗り遅れたので、サインアップは出来ませんでした。ただいま順番待ち。

EC2の固定IPを使ってみる

Posted filed under ServerSide.

 初期状態では、一つのインスタンスに、EC2の中だけで使えるPrivate IPと、外部からアクセスするためのPublic IP(グローバルアドレス)が割当たってます。  インスタンス自体への割当IPはPrivate IPですが、上位のルータに1:1のNATがあり、これによって外部からPublic IPでアクセスできる様になっています。  今までの、Private IPとPublic IPに加えて、今度は固定IPのグローバルアドレスが割り当てられるElastic IPを選択出来るようになりました。 これは、Public IPと同じ様に、外部からアクセスするためのグローバルアドレスですが、AWSアカウント毎に発行されるので、インスタンスの再起動などによって代わる事はありません。  これを使えば、EC2で最大の問題点であった、「インスタンスを再起動するとIPアドレスが代わる」という問題から解放されます。  Elastic IPを使うために、EC2 Toolsのアップデート。Amazon EC2 Command-Line ToolsからEC2 API toolをダウンロードしてインストール。  自分のアカウントに割り当てられたElastic IP(EC2の固定IP)を確認。 $ ec2-allocate-address ADDRESS 75.101.xxx.xxx 現在のアカウントで起動しているインスタンスを確認。 $ ec2-describe-instances RESERVATION r-e729dbxx 036701054xxx default INSTANCE i-876892xx ami-7034d119 ec2-67-202-xxx-xxxcompute-1.amazonaws.com domU-12-31-38-00-xx-xx.compute-1.internal running nobody 0 m1.small 2008-03-24T04:17:43+0000 us-east-1b  Elastic IPのアドレスと、割り当てたいインスタンス番号(i-から始まる番号)を指定して、ec2-associate-addressを実行します。 これを実行すると、今までのPublic IPではアクセス出来なくなります。インスタンスに割り当てられるグローバルアドレスはPublic IPかElastic IPのどちらかになります。 $ ec2-associate-address -i i-876892xx… Read more »