岡崎市立中央図書館事件

この忙しい時期に東北地方では情報漏洩が、Twitter 界隈では東さんカンニング事件*1が、ホームズ君事件が、民主党の代表選が、MMD杯が、が、が、と色々あって、久しぶりに書きたい事が大量に積み上がって、でも忙しくて……と、いった感じなのですが、そこは一応本業、首記、岡崎市立中央図書館事件について触れておきたいと思います。

岡崎市立中央図書館事件とは?

http://www26.atwiki.jp/librahack/
まとめサイトを読んでおいて下さい。

1 秒間に 1 回アクセスって多くない?

少ないです、という事は技術者はそこら中で言ってるのですが、技術的に難しそうな話で、理解できているか不安なので、ちょっとキャッシュを空にして(全部のリクエストが発生するようにして)Yahoo! のトップページにアクセスしてみました。

こんな感じになります。色の付いたバーは全部リクエストです。紫の縦線の右あたりが 1 秒です。1 秒間にだいたい 30 リクエストぐらいしています。
リクエストは厳密にはアクセスと異なりますが、最も厳密な単位では 1 リクエスト 1 アクセスです。これはサーバーのそれぞれに異なるファイルへのアクセスを伴うからで、サーバー側の「アクセスログ」にも別々のアクセスとして記録されるからです。
視覚的にはこのリクエストの塊、つまり Yahoo! のトップページを一回表示する操作を「アクセス」と呼びます。これは、今の標準的な OS とブラウザを使っていれば妥当な単位です。今の標準的なブラウザとサーバーは、この 1 回分をできるだけまとめて処理するために、機械と機械の間の接続(=アクセス)を 1 回に保とうとするからです*2
ホームページに設置される標準的なアクセスカウンタは「誰が?」の回数を数えていたりします。これはさすがに機械的な「アクセス」の単位として一般的ではありません。ブラウザを一度終了させるまでの同じホームページへの接続をまとめて管理する技術があるので「その1回を1アクセスだ」と言えば言えない事もありませんが。


そして今回の問題となった事件の「アクセス」の単位ですが(やろうとしていた事からするとおそらく)色の付いたバー1本分、1 リクエスト 1 アクセスのはずです。


なお、私はここで「たくさん応答できるもの」で例を示しています。その方が「一般的なサーバー」の応答性能が分かりやすいだろうと思ったからです。サーバーへの検索リクエストはもっと重たい処理で、「あまりたくさんは応答できないもの」になります。
Yahoo! というのも実はあまり良くありません。有名なホームページの場合、間に入ってよく発生するリクエストを代わりに処理してくれるサーバーが居たりするので目的のサーバーへのアクセスは減ります。とはいえその分、たくさんのユーザーからのリクエストを受け付けます。トータルでは応答性能は相当高いものになります。
それらを割引いた上の図を見て、それでもどうでしょう? みなさんも日頃、普通にたくさんのリクエストを行っているんだ、という事は理解して頂けるのではないでしょうか? 1 秒間に 1 回のアクセスは決して多くないのです。

じゃあ結局どうすればいいの?

http://twitter.com/masanork/status/22046847349
この方のこのツイートが全てを物語っています。まあ確かにそうなんですけどね。


とはいえ、そんな事を言っても現実には技術者とそうでない人との間には認識の差があるわけで、そこの対立を深めても仕方ありません。
そういうわけで現実解として、個人的にはネットワークのプログラムが起した事件は、送り手側プログラムと受け手側プログラム、双方を当事者として扱う、そういう捜査が原則になって欲しいと思っています。というのも、ネットワークのプログラムは協調動作、送り手受け手、双方のプログラムの動きで実現されているものだからです。何か問題が起きた時は「両方調べる」べきなのです。どちらも技術者を相手に調べる事になれば技術的問題点がどちらにあるのか明らかになるはずですし、そうしていれば今回のように事件は起きない(あるいは起き難くなる)はずだからです。

*1:東さんがカンニングしたわけではない

*2:どちらか一方が対応できていない場合、そういう省力化はできません。ネットワークのプログラムは協調動作で動いているのです!