CONNECTION
用件は一瞬なのに、つながるまでが長い。だったら、切らなければいい。
お客さんが窓口に来るたび、担当者は倉庫に電話をかけます。ダイヤルして、呼び出して、相手が出て、名乗って、本人確認をして、やっと「あの荷物ある?」と聞ける。
用事が終わると、担当者は受話器を置きます。次のお客さんが来たら、また最初のダイヤルから。1 日に何万回も、同じ儀式を最初からやり直していました。
かけ先はひとつではありません。台帳のある倉庫に 1 本、すぐ出せる棚に 2 本。棚の方は「よく使う荷物」と「一時的な預かり」で回線が分かれているので、2 本必要でした。
つまり 1 人のお客さんのために、最大 3 回の「つなぐ儀式」。しかも回線は暗号化されているので、儀式そのものが余計に長い。
やったことは、ひとことで言えばこれだけです。用事が終わっても受話器を置かず、机の上に保留のまま伏せておく。
次のお客さんが来たら、その受話器を取り上げて、いきなり用件を言えばいい。ダイヤルも呼び出しも本人確認も、1 回目だけで済みます。
受話器を使い回すなら、当然こう思います。「前のお客さんが『荷物を出して』と言いかけたまま席を立ったら、その中途半端な状態が次の人に引き継がれるのでは?」
これは本当に起きたら大事故なので、実際に試しました。半分だけ書きかけの伝票を残したまま受話器を置き、もう一度取り上げて確認する。結果は白紙に戻っていました。受話器を置く瞬間に「言いかけたことは全部なかったことにする」巻き戻しが自動で走る仕組みが、電話機そのものに入っていたのです。
「たぶん大丈夫」ではなく、実際に半端な状態を作って確かめました。心配ごとは、想像ではなく実験で潰します。
同じ実験で、もうひとつ分かりました。伝票は白紙に戻るのに、机に貼った付箋のメモは残ります。
今のところ、この窓口では誰も付箋を使っていません。だから今は問題ない。でも将来だれかが付箋を使い始めたら、前のお客さんのメモを見ながら仕事をすることになります。そこで「ここは付箋が残る場所だ」と、机に貼り紙をしておきました。
棚には回線が 2 本ありました。この 2 本、機械から見ると「同じ相手・同じ設定」なので、見分けがつきません。保留にした受話器を机に伏せておくと、2 本のはずが 1 本にまとまってしまう設定が存在します。
そうなると何が起きるか。1 本になった電話で「その1 の棚につないで」と言い直すたび、もう一方の用事まで一緒に引っ越します。お客さんの持ち物を預ける棚と、使い捨ての一時置き場が入れ替わる。しかもエラーは一切出ません。ただ静かに、間違った棚に入る。
この設定は「普段は安全な側」が初期値です。でも初期値は、いつか誰かが変えられます。しかも電話機のメーカーとバージョンは自動で上がり続けるので、「今の初期値が明日も同じ」とは言えません。
2 本の電話に、それぞれ違う名札を貼りました。「棚 その1 用」「棚 その2 用」。名札が違えば、機械はもう 2 本をまとめません。
普段の設定では、この名札はまったく使われません。何も変わらない。でも設定が切り替わった瞬間だけ、名札が効いて事故を止めます。紙 2 枚ぶんの手間で、静かな事故がひとつ消えます。
受話器を置かないということは、回線を占領し続けるということです。担当者が増えれば、保留の電話も増える。交換機には「同時に受けられる本数」の上限があるので、そこを超えたら新しいお客さんが誰もつながらなくなります。
ここが一番怖いところでした。上限の値は交換機のメーカーが公開しておらず、「自分の交換機に聞いてください」としか書かれていない。なので、聞きました。
27 倍の余裕がありました。おまけに、ひとまわり小さい交換機でも同じ 4030 で、上限は機械の大きさに比例していないことも分かりました。「小さい方は半分くらいだろう」という予想は外れたので、推測せず測ったのは正解でした。
この確認は、少しずつ出す方式では代わりになりません。少しずつ出しても、混み合ってきて担当者が増えたときに初めて上限に当たるからです。危ないのは「出した直後」ではなく「流行った後」。
この仕組みは作りましたが、スイッチは OFF のまま置いてあります。出荷しても、今日の窓口は今までどおり毎回かけ直します。
理由は単純で、交換機の上限を測り終わる前に勝手に始まってほしくないから。「あとで確認します」と書き置きするのではなく、物理的に動かないようにしておく。書き置きは守られないことがありますが、OFF のスイッチは守られます。
最後に、盛らないための注意書きです。切らずに済むようになるのはダイヤル・呼び出し・本人確認の部分だけ。受話器を取り上げたあと、毎回かならず言うことがまだ残っています。
だから「接続の時間がゼロになる」とは書きませんでした。「同じ担当者が同じ相手にかけ直すときの、つなぐ儀式のぶん」——効くのはその区間だけです。どこまで効くかを言わない自慢は、あとで誰かを困らせます。
| 電話をかける | データベース / キャッシュへの接続 |
|---|---|
| ダイヤルから本人確認まで | TCP + TLS + 認証のハンドシェイク |
| 受話器を置かず保留にする | 永続接続(コネクションの再利用) |
| 担当者 | アプリケーションのワーカープロセス |
| 棚 その1 / その2 | キャッシュ用の 2 つの論理データベース |
| 電話の名札 | 接続ごとの識別子 |
| 書きかけの伝票が白紙に戻る | 未コミットのトランザクションの自動ロールバック |
| 机に残る付箋 | セッション変数・一時テーブル |
| 交換機の上限 | データベースの最大同時接続数 |
| OFF のスイッチ | 既定オフの環境変数フラグ |
用件より「つなぐまで」の方が長かったので、電話を切らずに保留にした。使い回しで怖いのは「前の人の残り」と「2 本の取り違え」の 2 つで、前者は電話機が自分で巻き戻すことを実験で確かめ、後者は名札を貼って塞いだ。回線の本数に余裕があるかは推測せず交換機に聞いた。そしてスイッチは、確かめ終わるまで切ったままにしてある。
速くする変更のいちばん難しいところは、速くすることではなく、速くしたせいで静かに壊れる場所を先に見つけることでした。