人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

Webサーバの仮想ホスト単位のリソース使用量をFluentd+Norikra+GrowthForecastでグラフ化

ご存知の通り、ApacheのVirtualHost(以下vhost)、所謂、Webサーバの仮想ホストは単一のApacheで複数のホストを処理しています。そのため、複数のvhostを含めたCPU使用量といったリソース使用量をグラフ化することは簡単なのですが、vhost単位となると各vhostへのリクエスト単位でのリソースを計測しておかないとグラフ化することはできません。そういう意味でvhost単位でリソース使用量をグラフ化しようとすると一気に敷居が上がってしまいます。

また、uid毎に実行プロセスを分離しておけば、pacctといったプロセスアカウンティング機能でuidのカウントはできますが、リアルタイムの計測(秒とか分のオーダー)にはコストが高かったり、vhostで提供しているコンテンツによっては、Apache権限で配信されているものもある(静的コンテンツ)ため、正確に計測することは難しくなります。

一方で、ログをリアルタイムで集計して一定期間内で計測してグラフ化するツールとしては、FluentdやNorikra、GrowthForecastといった素晴らしいプロダクトがすでにあり、それらをうまく組み合わせてこれを実現したいという欲求が膨れ上がってきました。そう考えると、リクエスト単位でリソースを計測できれば、すぐに実装できそうです。

というわけで、思いついたらまずは手を動かしてみようということで、プロトタイプ実装をしてみました。

続きを読む

ApacheのVirtualHost単位でMaxClientsを設定するApacheモジュールをOSS化

一つのサーバに多数のホストを収容するような高集積なホスティングサービス(所謂レンタルサーバ)を提供しようとすると、収容しているユーザ単位でいかにリソースをコントロールするかが運用者には求められます。

そういう状況で、これまでApacheには色々なモジュールがあって、それらをうまく組み合わせながらリソースを制御してきたと思います。ですが、意外とシンプルなリソース制御として、VirtualHost(以下vhost)単位で個別にMaxClinetsを制御するだけのモジュールが無かったりします。それと同等の機能を提供するモジュールは幾つかあるのですが、色々と必要の無い機能が沢山盛り込まれていたりとか、特定のバージョン、特定のMPM、特定のOSでしか動かなかったりして微妙に使いにくかったりします。

要件的には単にvhost単位でMaxClinetsを各種MPMやバージョンで制御できれば良いです。こういうモジュールは各社社内で作っていたりすると思うのですが、汎用的なOSSとしてあまり公開されていないように思っています。

続きを読む

技術者が研究者のように論文を書くメリットはあるか

一度大学・大学院を修了した後に、研究職以外に就職した技術者は論文を書かなくなる事がほとんどだと思います。

僕は、一度インターネットのウェブサービスに関する企業で技術者をした後に、大学院に入りなおして同様の分野で論文を書き、現在再度技術者をやっているわけですが、技術者でも論文を書くメリットが ある と思っています。

以降でメリットについて述べますが、これらのメリットをまとめて手軽に享受できるツールって他にあんまりないんじゃないか(僕が思いつかないだけかも)と思ったので、この記事を書くに至りました。

というわけで、それを簡単にまとめます。

続きを読む

H2Oとmrubyを使ってIPアドレスベースでアクセス制御しつつリバースプロキシとして動かしてWebサイトをHTTP/2化しよう

h2oをリバースプロキシで使えば、http://でのアクセスはHTTP/1.xでコンテンツを返しつつ、https://からのアクセスについてはHTTP/2+TLSに対応したブラウザであればHTTP/2、対応していなければHTTP/1.xでコンテンツを返す事ができます。

また、h2oがmrubyによる機能拡張をサポートし、かつ、先日アクセス元IPアドレスをmruby内で参照することができるようになったので、IPアドレスを用いたアクセス制御もh2o+mruby側で簡単に制御できるようになりました。

今日はその設定例を簡単に紹介したいと思います。

続きを読む

mvコマンドの--strip-trailing-slashesをデフォルト有効にして大丈夫か?

mvに--strip-trailing-slashesというGNUオプションがあるのは皆さんご存知だと思います。

指定された全ての引き数について、 後ろに付いているスラッシュを取り除く。 これは mkdir a; ln -s a la; mv la/ b' のような場合に役立つ。 この場合 POSIX の要求により、 mv はシンボリックリンクla' ではなく ディレクトリ `a' を実際に移動してしまう。

ref: http://linuxjm.osdn.jp/html/gnumaniak/man1/mv.1.html

続きを読む