KmKb TeleVision

- 俺とお前とどどんとふ(2)~接触編 (2013.01.18) -

どどんとふとの関わりを綴る誰得伝記その2

俺とお前とどどんとふ(2)~接触編

2013.01.18(Fri) in Japan

前回 からのつづき。

・・・の前に、そもそも俺が何者なのかについてちょっとだけ。俺は一言でいえば「元サーバー構築屋」である。 既にネットワークが構築された鯖に環境を構築する簡単なお仕事であったが、あくまで「元」であり現役ではない。経験を話題に活かすことはあれど、今は実際に業務に関わることは稀である。たぶん。

ただ、サーバー構築を「趣味」にはしている。プラモデルと似たようなもんである。 「どどんとふむせる」 はその作品の1つと思ってもらえればよい。

(説明になっていないような気もするが考えるな、感じろ)

~10年後~

さて。

9月中旬に意気揚々と「どどんとふ」のパッケージをDLした俺であるが、実はその後10月中旬まで触っていない。

Aマホのセッション を挟んだこともあるのだが、一番の理由は「VMでの鯖構築が楽しかった」からである。 VMの基礎設定をしてる時にnginxに興味を惹かれ、どどんとふ以前にnginxでのWEBサーバー構築に(没頭的な意味で)ハマり、あれやこれやと遊んでいたのだ。 本末転倒とはこの事であるが、構築屋崩れには稀によくある現象である。

nginx に Apache が加わり最強に見える

その時に作っていた構成は以下の通りである。今の「どどんとふむせる」も基本構成は全く変わらない。

ベースシステムはCentOS6.3の標準repoにnginxのrepoを加えた程度のもの。 nginxをフロントエンドとし、静的コンテンツはすべてnginxで返し、動的コンテンツはバックエンドのApacheへリバースプロクシをかけている。

nginxで静的コンテンツ、という所までは特に迷うことなく構築を終えた。 問題はruby-CGIをどうやって連携させるか。

nginxでCGIと言えばFastCGIのWASを立てて連携するケースが多いようだが、非railsのruby-CGI用のWASでコレといったものが見つからず、spawn-fcgiも一度プロセスがコケると色々と面倒くさいことがわかり、nginxやめてApacheで動かそうかなと思った所で「ApacheをWASにしちゃえばいいんじゃね?」と、割と安直な経緯で解決を見る。結果として極端な苦労なく安定稼働しており、伊達にApacheは長年WEBサーバーのスタンダードやってないなぁと感心しきり。

そうと決まればまずはApacheで「どどんとふ」動かすべーと、README見ながら設置してパーミッションも設定。コマンドプロンプトでrubyから読んでもエラー出さないし大丈夫だろうと思いながら起動。本番はここからである。

♪ちゃーらーらららららーらー (E.Tのアレ)

最初に軽くアホなミスでエラーを出しながらも修整して稼働。swfにアクセスし画面が出て万歳三唱。0番ルームに入り一通り動いて万歳三唱。意気揚々とログアウトし、新規ルーム作成をして万歳三s

Server Error

( ゚д゚)

よ、よしよし。こうでなくちゃイカン。はははコヤツめ俺に立てつこうなんて約3年早いわー、とか思いながらlog.txtを見て「貴様の権限でルートディレクトリにlockファイルなんて作れるわけねーべ?」というexceptionメッセージに大きく首を傾げる羽目になる。 そらrootでもない権限で「/」にファイルが作れるわけがない。それは正しい。いったい何が起きてるのか処理を追おうとサーバー側のコードを見て、その首はさらに傾くことになる。

動的言語の手前にあった壁

先に断っておくと俺はKENT-WEB世代の生粋の駄目Perl使いであり、phpは何とかわかるがrubyに関しては初見に近い状態だった。 そして「どどんとふ」のrubyソースにはコメントの類が綺麗に無い。

インタプリタ言語だし高速化のためにパッケージングの際にコメント消してるのかなーと思ったりしつつも、とにかくこれでは動作は追えるが「意図」がわからない。意図が分からないと動作が正しいのか判断ができないのだ。 (この件は時折他の人からもツッコまれている)

本屋でruby関連の書籍もいくつか眺めては見たが、大概railsの文字が並んでおり「rubyってひょっとしてrails専用?」などと誤解をしつつも「何か作らない限り理解でき無さそう」という当たり前の結論に達したところで、時間的コストとの相談の末に理解を諦めることにした。 言語仕様をいくつも頭に放り込むのは得策ではない。特に容量の無い俺の頭には割と致命傷である。

コーディングスタイルの件は俺も他人の事言えないので置いといて、ただでさえrubyの仕様に馴染めない俺の脳はアッサリと思考を放棄。 何となくそれっぽいところを触ってなんとなくエラーを潰したような(実際には的外れ)状態でBBSでお伺いを立てることになる。

竹流氏にLinuxサーバー(さくらのレンタルサーバー)借りてもらってまで検証いただいた結果としては「Linux環境で発生する環境依存の不具合」であり、その後めでたく修整対応された。 くるみ氏作のインストーラーの効果もあって、特にさくらのレンタルサーバーにおいて「どどんとふ自鯖」の流れが加速していく。 (この後、さくらインターネットのシャッチョが「どどんとふ面倒みようやないかい」と tweetぶっ放した のは皆の知る所である)

壁を越えたと思ったか? 壁だよ!

そんな自鯖の流れを横目に俺は俺とで割とピーキーな構築を進めていた。 自前環境でもさくらのレン鯖でもパッケージの状態で動くようになり、MySQL版もざっくりと動作確認終了。じゃ負荷実験でもしましょうかねという段階になってふとlog.txtを見ると「動いてはいるがmsgpackでexceptionを吐かれる」という動作を見つけ追ってみる。結局、messagepackじゃない文字列を食わされたmsgpackライブラリがunpackエラーを出してるだけっぽいとわかり、当面は気にしないことにした。人生、ただちに影響がない事は見なかったことにするのも大事である。

そしていよいよabで DodotoFServer.rbのwebif=chat を単純に叩くテストを開始。結果、

10req/秒。

( ゚д゚)

VMだしfcgidやmod_rubyを使ってない状態、とはいえちょっとこれは何事という値である。クライアントからは最低でも2秒に1回リクエストが来る。20req/2秒では20クライアントの処理だけで精一杯、他のリクエストが来たらどんどん遅延していくことになる。試しにHello,World的なrubyのサンプルスクリプトを置いてみた所、軽く数千req/秒。何かしらの大きなボトルネックがあることは疑いの余地が無い。

さて、ここで「これ遅ぇ」と言うのは簡単である。しかしせっかく動く環境を作ったのだから「何が遅い」という所は突き止めたい。 それがわかればプログラム側の修整も楽になるだろうし、ぶっちゃけコイツを早く動かせる環境作れれば公開できる! へっぽこ構築屋の意地を注ぎ込むにふさわしいお題ではないか。

と考えた所で「快適などどんとふ公開鯖作る」という無暗な目標が設定された。そう、「むせる」プロジェクトはドM魂がキックしたドMなプロジェクトだったのである。

黎明編 に続く)