2015年Webサーバアーキテクチャ序論

2023年03月31日追記:この記事を基に、@sadnessOjisanさんより、コードレベルにより踏み込んだ、かつ、グリーンスレッドベースの新しいWebサーバアーキテクチャも含めて整理された記事 Webサーバーアーキテクチャ進化論2023 | blog.ojisan.io が公開されました。

主に新卒のWebエンジニア向けに、古典的なWebサーバアーキテクチャを学ぶ道のりと代表的な実装モデルの概要を紹介します。

この辺りの話題がWeb界隈で流行っていたのは数年以上前というイメージですが、Webサービスは相変わらずWebサーバの上で動いているので、流行り廃り関係なく学ぶべき内容だと思っています。

また、HTTP/2がいよいよRFC化し、既にh2otrusterdなどのHTTP/2のサーバ実装があり、今後Webサーバアーキテクチャを再訪することが増えるような気がしています。

ところが、Webサーバアーキテクチャを学ぼうとすると、情報は古いものから新しいものまで山のようにあり、まさに海のものとも山のものともつかない、ググる度に翻弄されているという若者には厳しい状況があり、一旦自分の中でまとめてみようと思いました。

序論ということで、Webサーバアーキテクチャの基本を俯瞰できるということと、より発展的な話題へ進んでいくためのルーターのような役割を目指しています。

続きを読む

Go言語によるCLIツール開発とUNIX哲学について

この記事ははてなエンジニアアドベントカレンダー2014の8日目です。

今回は、Go言語でサーバ管理ツール Mackerel のコマンドラインツールmkr を作るときに調べたこと、考えたこと、やったことについて紹介します。(mkr は現時点では開発版での提供になります。)

コマンドラインツールについて

コマンドラインツールを作るにあたって、@ さんの YAPC Asia 2014 での発表資料が非常に参考になります。 書籍 UNIXという考え方ーその思想と哲学 の内容をベースに、コマンドラインツールはどうあるべきかということが丁寧に説明されています。

続きを読む

UNIXという考え方―その設計思想と哲学 を読んだ

人間とウェブの未来 - Linuxエンジニアを目指して入社一年目にやって役にたったと思う事 で紹介されていた書籍のうちのひとつ。

原版は90年代前半くらいに出版されていて、今から20年前くらいに書かれた本だった。

小さいソフトウェアを組み合わせて大きなソフトウェアをつくるのがとにかく良いことで、 ひたすら、下記のワンライナーみたいなのがいかに最高かが書かれている。

$ tail -10000 access_log | cut -f 1 -d ' ' | sort | uniq -c | sort -nr | head -10

UNIX勉強するときにだいたいそういうことは勉強するんだけど、ある日気づいたら忘れてしまっていて、今つくってるソフトウェアにどんどん機能を追加していたりする。 もしくはシェルスクリプトを30行ぐらい書けばすむことをいろいろなオプションを処理させるためにがんばってRubyで書いたりする。 YAPCでしゃべったサーバ管理ツールのメトリクス収集する実装も、ジョブキューとか持ち出さずに、gnu parallel とPerlスクリプトの組み合わせで十分だったんじゃないかという反省も生まれてる。

運用エンジニアという職種上、いろいろなツール/ミドルウェアを組みあわせて目的を達成することが多いので、自分でアプリケーションを実装する場合も、他のツールとの組み合わせをよく考えて、てこの原理をうまく行かせるような設計にしたい。

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学