← eli5

CONNECTION

切らない
電話

用件は一瞬なのに、つながるまでが長い。だったら、切らなければいい。

01

用事のたびに、電話をかけ直していた

これまで

お客さんが窓口に来るたび、担当者は倉庫に電話をかけます。ダイヤルして、呼び出して、相手が出て、名乗って、本人確認をして、やっと「あの荷物ある?」と聞ける。

用事が終わると、担当者は受話器を置きます。次のお客さんが来たら、また最初のダイヤルから。1 日に何万回も、同じ儀式を最初からやり直していました。

1回目 2回目 3回目 つなぐまで 用件
色の濃い方が用件。それより「つなぐまで」の方がずっと長い。
02

しかも、電話は 3 本あった

これまで

かけ先はひとつではありません。台帳のある倉庫に 1 本、すぐ出せる棚に 2 本。棚の方は「よく使う荷物」と「一時的な預かり」で回線が分かれているので、2 本必要でした。

つまり 1 人のお客さんのために、最大 3 回の「つなぐ儀式」。しかも回線は暗号化されているので、儀式そのものが余計に長い。

窓口 台帳の倉庫 棚 その1 棚 その2
1 人のお客さんの後ろで、3 回の儀式が走っていた。
03

切らずに、保留にしておく

直した

やったことは、ひとことで言えばこれだけです。用事が終わっても受話器を置かず、机の上に保留のまま伏せておく。

次のお客さんが来たら、その受話器を取り上げて、いきなり用件を言えばいい。ダイヤルも呼び出しも本人確認も、1 回目だけで済みます。

1回目 2回目 3回目
点線のところが、まるごと消えた時間。
04

心配ごと 1 — 前の人の話が、途中で残っていないか

受話器を使い回すなら、当然こう思います。「前のお客さんが『荷物を出して』と言いかけたまま席を立ったら、その中途半端な状態が次の人に引き継がれるのでは?」

これは本当に起きたら大事故なので、実際に試しました。半分だけ書きかけの伝票を残したまま受話器を置き、もう一度取り上げて確認する。結果は白紙に戻っていました。受話器を置く瞬間に「言いかけたことは全部なかったことにする」巻き戻しが自動で走る仕組みが、電話機そのものに入っていたのです。

白紙
試した結果。書きかけは残らなかった。

「たぶん大丈夫」ではなく、実際に半端な状態を作って確かめました。心配ごとは、想像ではなく実験で潰します。

05

ただし、机に貼った付箋は残る

残る癖

同じ実験で、もうひとつ分かりました。伝票は白紙に戻るのに、机に貼った付箋のメモは残ります。

今のところ、この窓口では誰も付箋を使っていません。だから今は問題ない。でも将来だれかが付箋を使い始めたら、前のお客さんのメモを見ながら仕事をすることになります。そこで「ここは付箋が残る場所だ」と、机に貼り紙をしておきました。

伝票 → 消える 付箋 → 残る
消えるものと残るものを、はっきり分けて書き残した。
06

心配ごと 2 — 2 本の電話を、1 本と間違える

見つけた罠

棚には回線が 2 本ありました。この 2 本、機械から見ると「同じ相手・同じ設定」なので、見分けがつきません。保留にした受話器を机に伏せておくと、2 本のはずが 1 本にまとまってしまう設定が存在します。

そうなると何が起きるか。1 本になった電話で「その1 の棚につないで」と言い直すたび、もう一方の用事まで一緒に引っ越します。お客さんの持ち物を預ける棚と、使い捨ての一時置き場が入れ替わる。しかもエラーは一切出ません。ただ静かに、間違った棚に入る。

窓口 1本になる 本来の棚(空) 違う棚に全部入る
実際に手元で再現した。荷物は静かに、全部もう一方の棚へ。

この設定は「普段は安全な側」が初期値です。でも初期値は、いつか誰かが変えられます。しかも電話機のメーカーとバージョンは自動で上がり続けるので、「今の初期値が明日も同じ」とは言えません。

07

だから、電話に名札を付けた

直した

2 本の電話に、それぞれ違う名札を貼りました。「棚 その1 用」「棚 その2 用」。名札が違えば、機械はもう 2 本をまとめません。

普段の設定では、この名札はまったく使われません。何も変わらない。でも設定が切り替わった瞬間だけ、名札が効いて事故を止めます。紙 2 枚ぶんの手間で、静かな事故がひとつ消えます。

窓口 名札A 名札B 棚 その1 棚 その2
名札があれば、どの設定でも 2 本は 2 本のまま。
08

保留の電話は、何本まで置ける?

受話器を置かないということは、回線を占領し続けるということです。担当者が増えれば、保留の電話も増える。交換機には「同時に受けられる本数」の上限があるので、そこを超えたら新しいお客さんが誰もつながらなくなります。

ここが一番怖いところでした。上限の値は交換機のメーカーが公開しておらず、「自分の交換機に聞いてください」としか書かれていない。なので、聞きました。

交換機の上限 4030
最大でも使う数 150

27 倍の余裕がありました。おまけに、ひとまわり小さい交換機でも同じ 4030 で、上限は機械の大きさに比例していないことも分かりました。「小さい方は半分くらいだろう」という予想は外れたので、推測せず測ったのは正解でした。

この確認は、少しずつ出す方式では代わりになりません。少しずつ出しても、混み合ってきて担当者が増えたときに初めて上限に当たるからです。危ないのは「出した直後」ではなく「流行った後」。

09

スイッチは、切ったまま出荷した

安全側

この仕組みは作りましたが、スイッチは OFF のまま置いてあります。出荷しても、今日の窓口は今までどおり毎回かけ直します。

理由は単純で、交換機の上限を測り終わる前に勝手に始まってほしくないから。「あとで確認します」と書き置きするのではなく、物理的に動かないようにしておく。書き置きは守られないことがありますが、OFF のスイッチは守られます。

OFF
作った。まだ入れていない。この 2 つは別のこと。
10

速くなるのは「つなぐまで」だけ

最後に、盛らないための注意書きです。切らずに済むようになるのはダイヤル・呼び出し・本人確認の部分だけ。受話器を取り上げたあと、毎回かならず言うことがまだ残っています。

消えた
つなぐ儀式ダイヤル・暗号のすり合わせ・本人確認
残る
毎回の名乗り「わたしです」「その1 の棚で」
残る
倉庫での前置き「あの台帳で」「日本時間で」

だから「接続の時間がゼロになる」とは書きませんでした。「同じ担当者が同じ相手にかけ直すときの、つなぐ儀式のぶん」——効くのはその区間だけです。どこまで効くかを言わない自慢は、あとで誰かを困らせます。

電話をかけるデータベース / キャッシュへの接続
ダイヤルから本人確認までTCP + TLS + 認証のハンドシェイク
受話器を置かず保留にする永続接続(コネクションの再利用)
担当者アプリケーションのワーカープロセス
棚 その1 / その2キャッシュ用の 2 つの論理データベース
電話の名札接続ごとの識別子
書きかけの伝票が白紙に戻る未コミットのトランザクションの自動ロールバック
机に残る付箋セッション変数・一時テーブル
交換機の上限データベースの最大同時接続数
OFF のスイッチ既定オフの環境変数フラグ

ひとことで言うと

用件より「つなぐまで」の方が長かったので、電話を切らずに保留にした。使い回しで怖いのは「前の人の残り」と「2 本の取り違え」の 2 つで、前者は電話機が自分で巻き戻すことを実験で確かめ、後者は名札を貼って塞いだ。回線の本数に余裕があるかは推測せず交換機に聞いた。そしてスイッチは、確かめ終わるまで切ったままにしてある。

速くする変更のいちばん難しいところは、速くすることではなく、速くしたせいで静かに壊れる場所を先に見つけることでした。