SixApartの宮川さんが昔に翻訳された「大規模なeコマースサイトをApacheとmod_perlで構築する」という記事を読んで

はじめに

先週の金曜日、研究室のPCに蓄積されていたブックマークを漁っていると、興味深い記事を昔にブックマークしていたことを思い出しました。その記事とは、SixApartの宮川さんが昔に翻訳された「大規模なeコマースサイトをApacheとmod_perlで構築する」というものです。この記事をブックマークした時は、「宮川さんが翻訳されたくらいだから、きっと有益な情報に違いない」と思ってブックマークしていました。しかし、長い間ブックマークされたままで本文をきちんと読むのをずっと忘れていました(笑。 そこで、いつものように印刷して読んでみることにしました。

大規模システムが持つ特性を理解する

この記事を読むことで、大規模システムの問題点とそれに対する解決のアプローチが何となく見えてきました。大規模システムで特に重要になる話題が一通り説明されている印象を受けました。また、大規模システムである はてなとの類似点もいくつか発見できました。

各所に見られるCPANモジュール

本文では、このeコマースサイトで利用されたCPANモジュールのモジュール名が各所に書かれています。これは、Perlで大規模サイトを構築される開発者にとって有益なポインタとなるのではないでしょうか? 特に興味深かったCPANモジュールを以下に列挙しておきます。

おわりに

大規模システムでは、非常に高度な技術が要求される所に魅力を感じます。この記事を読んで、大規模なシステムの洗練されたアーキテクチャに触れられる仕事がますますしたくなりました。特にApachePerlといったオープンソースソフトウエアでシステム開発できる仕事に就職できれば、本当に幸せだなあと思っています。でも大規模システムに興味を持ったからと言って、銀行とかの金融系のSEになるのは嫌です。そのアーキテクチャとクローズさに魅力を感じませんので(笑。

どこでもCatalystを実験できる環境を整備する

はじめに

実は1週間くらい前にMVCフレームワークCatalystを研究室にあるFedora Core 4のマシンにひそかにインストールしてみました。Fedora Core 4だと全くトラブルなしでCatalystをインストールできました。そしてHello WorldなCalalystアプリケーションも作ってみました。意外と簡単でした。しかしながら、Catalystをインストールした研究室にあるFedora Core 4のマシンはプライベートIPを持ったマシンなので、このままでは自宅から思う存分Calalystを実験することができません。そこで、このエントリーではCatalystをリモートの環境からでも実験できるようにするための準備方法について説明したいと思います。

coLinuxのインストールで挫折、さてどうする?

id:naoyaさんやid:miyagawaさんは、coLinuxWindowsにインストールしてlocalhostでごにょごにょするという開発スタイルを取られています。先日、私もcoLinuxのインストールに挑戦して、coLinuxdebianのイメージをロードさせて、ネットに接続できる所までは設定できました。しかし、開発環境の整備まではできませんでした。もう少したっぷり時間が取れれば、引き続き頑張っても良かったのですが、これ以上時間をかける気にはなりませんでした。

ちょっと冷静に考えてみました。何でcoLinuxに拘っていたのかわからなくなりました。おぃ!

私は以下のような2台のマシンを研究室で所有しています。

labserverは研究室のメンバーが色んなことに利用しているサーバで、私もよくsshでリモートログインしてPerlの勉強をしています。ですが最近はfedoraがあるので、Perlの勉強は主にFedora Core 4が入っているマシンで行っています。(というかRedhat Linux 9でCPANモジュールがちゃんとインストールできないものが多すぎるのでFedora Core 4を使うようになりました) labserverはインターネットから8080番ポートのアクセスを許可していますが、現在は利用されていません。

fedoraはプライベートIPが設定されているので、当然インターネットからのアクセスは受け付けません。なので、Catalystの実験は研究室に行かないとできません。

labserverとfedoraは大学のVPNで接続されており、互いに通信可能です。自宅からfedorasshで操作したい時は、まずlabserverにsshでログインします。そして、labserverから再度sshfedoraにログインしています。

問題は、fedoraCatalysthttpd(script/xxx_server.pl)を起動しても、研究室でないとCatalystアプリケーションをテストできないところです。何とかして、危険を承知の上で、Catalysthttpdをインターネット上から叩けるようにすれば、ひとまずこの問題は解決です。幸いにも、グローバルIPを持っているlabserverは8080番ポートをListenしようと思えばできる状態にあります。これで何とか解決できないものでしょうか...

任意のマシン宛てにTCPポート転送を行うHack

前述した問題を解決するための良い方法がないか、LinuxサーバHacksの本をちょっと読んでみました。そうすると、ちょうど良い解決方法が載っていました。その解決法とは、HACK #48の「任意のマシン宛てにTCPポート転送を行う」というもので、このHackによって別のところにあるサービスを自分が提供しているかのように見せかけることができるようになるそうです。

そこで、早速試してみました。

以下のコマンドをlabserverで行いました。manのインストール場所を少しだけ調整する必要がありました。

$ cd /usr/local/src/
$ wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
$ tar -zxvf rinetd.tar.gz 
$ cd rinetd
$ vi Makefile
(Redhat Linux 9用にmanのインストール場所を「/usr/share/man/man8」に修正)
$ make
$ sudo make install
$ vi /etc/rinetd.conf
0.0.0.0 8080 fedora 3000
$ sudo /usr/sbin/rinetd

これでlabserverで利用されずにいた8080番ポートに対してインターネットからアクセスがあると、fedoraの3000番ポート(Catalysthttpdが標準でListenするポート)にトラフィックが転送されるようになります。

前に実験で作ったHello WorldなCalalystアプリケーションのscriptディレクトリにあるhttpdサーバを起動して、インターネットからhttp://labserver:8080で叩いてみると、見事に動作しました。LinuxサーバHacks、ありがとう。

おわりに

このエントリーで紹介したHackで、どこにいてもCatalystの実験ができるようになりました。残るはセキュリティーの問題です。これについてはまた後日エントリーを書こうと思います。

参考文献

LinuxサーバHacks―プロが使うテクニック&ツール100選

LinuxサーバHacks―プロが使うテクニック&ツール100選