リストル:フォームリーチツール開発奮闘記 あ と 3 秒― まだ終わっていない、あるツールの開発記 ―第22話「一瞬の行き違いで、全部が止まる」

リストル:フォームリーチツール開発奮闘記 あ と 3 秒― まだ終わっていない、あるツールの開発記 ―第22話「一瞬の行き違いで、全部が止まる」 フォームリーチ開発日誌
フォーム営業の効率化を目指すなら、リストルフォームリーチ
リストル専用:問い合わせフォーム送信ツール『フォームリーチ』詳しくはこちら👆️

ネットワーク瞬断による全台停止。例外処理と自動復旧(オートリカバリ)の実装

■ ネットワーク瞬断(ジッター)による全台停止。監視ロジックの誤検知(フォールス・ポジティブ)

画像

ネットワークが一瞬揺れただけで、全台が止まっていました。

朝、記録を見ると、夜中の同じ時刻に、10台すべてが同時に作業をやめています。そのあと、何時間も動いていません。

止まった理由は、記録にはっきり書いてありました。
「確認が取れないため、停止しました」
前の回に出てきた、あの受付への確認です。
立ち上がるときだけでなく、動いているあいだも、ときどき確認しにいく作りにしていました。

正しくお使いいただいている状態が続いているか。
契約が切れていないか。

その確認が取れなければ、止まる。安全側の設計に見えます。
実際、そのつもりで入れました。

調べてみると、その夜、回線が一瞬だけ不安定になっていました。
ほんの数秒です。
その数秒のあいだに、10台すべてがたまたま確認の時刻を迎えていました。

全台が同時に確認しにいって、全台が同時に「返事がありません」と受け取り、全台が同時に止まりました。

回線は、そのあとすぐ元に戻っています。戻ったあとも、止まったままでした。あっ、と思いました。
回線の瞬きと、本当の異常を、区別できていなかった。

■ リトライ制御と自動復旧(オートリカバリ)の実装。システムに「融通(フォールトトレランス)」を持たせる

この2つは、外から見ると、まったく同じ形をしています。
どちらも、「返事がない」です。

違うのは、続くかどうかだけでした。回線の瞬きなら、数秒で戻ります。本当の異常なら、戻りません。1度尋ねて、返事がなかっただけで判断するのは、厳しいのではなく、ただ性急でした。

直したのは、判断のしかたです。
1度の返事がなかっただけでは、止めない。
しばらくのあいだは、信じて動き続けます。そのあいだ、何度か確認をやり直します。

やり直す間隔は、少しずつ延ばしていきます。前の回で覚えた、並び直しと同じ考え方です。何度やっても返事がないまま、決めた時間を過ぎたときに、はじめて止まる。

画像

どのくらい待つかは、少し悩みました。
短すぎれば、同じことが起きます。長すぎれば、本当に止めるべきときに止まりません。
結局、時間だけではなく、回数と時間の両方で決めました。

こういう決め方をするとき、第5話の教訓が、そのまま効いています。
仮の数字を置くのは構いません。置いたことを覚えておいて、あとで測る。このときは、最初から測るつもりで置きました。

もう1つ、直したことがあります。
止まったあと、そのままにしないようにしました。

これまでは、止まったら止まりっぱなしでした。朝、人が気づくまで、そのままです。止まったあとも、ときどき確認しにいって、返事が戻れば、自分で動き出すようにしました。夜中に数秒だけ揺れて、そのあと元に戻ったのなら、朝を待つ必要はありません。

いつものことですが、ここで笑ってしまう話がありました。

自分で動き出す仕組みを入れたあと、試しに、確認先をわざと止めてみました。狙いどおり、10台はしばらく動き続けて、やがて止まりました。そこまでは、よかったのです。

確認先を元に戻したところ、10台がいっせいに動き出して、いっせいに確認しにいって、また弾かれました。前の回で直したはずの、行列の話です。
止まるときのことばかり考えていて、戻るときのことを、まったく考えていませんでした。戻るときにも、数秒ずつばらけるようにしました。

■ セキュリティ要件の棚卸し。「厳しさ」と「頑固さ」を分けるフェイルセーフの再定義

直したあとは、夜中の小さな揺れで全台が止まることは、なくなりました。

この回で書いておきたいのは、「厳しさ」と「頑固さ」の違いです。
「確認が取れなければ止める」というのは、一見、厳しくて正しい態度に見えます。実際には、少し違いました。

厳しさというのは、本当に駄目なときに、きちんと止まることです。
1度返事がなかっただけで止まるのは、厳しいのではなく、融通が利かないだけでした。

厳しさと頑固さは、別のもの。
このツールには、安全のための決まりがいくつも入っています。どれも、入れたときには正しく見えました。入れたあと、実際に何回働いたのかを数えてみると、たいてい、思っていたのとは違う場所で働いています。

守りの仕組みほど、あとから数えたほうがいい。
この記録の中で、同じことを何度か書いている気がします。
たぶん、それだけ何度も同じところで転んでいます。

この回のあと、安全のための決まりを一覧にしました。

  • いつ入れたか。
  • 何を守るために入れたか。
  • これまでに何回働いたか。

3つを並べた、短い表です。

画像

作ってみると、なかなか面白いものでした。
何か月も1度も働いていない決まりがありました。働きすぎている決まりもありました。働いていない決まりは、守るべきことが起きていないのかもしれませんし、そもそも働けなくなっているのかもしれません。どちらなのかは、わざと発動させてみないと分かりません。

働きすぎている決まりは、たいてい、この回のような話になっています。
止めるべきでないものを、止めています。

この表は、月に1度、眺めるようにしました。
眺めていると、「そういえば、これは何のために入れたんだったか」
というものが、必ず1つ2つ出てきます。

思い出せないものは、たいてい、もう要らないか、あるいは、いちばん危ないものかのどちらかでした。どちらにせよ、思い出してから決めます。

入れっぱなしにしないこと。
これは、機能でも、守りでも、同じでした。

■ 人間の「加減」をアルゴリズムに翻訳する。発生頻度とリスクで決めるトレードオフ

この回で直したことを、もう1度まとめておきます。

  • 1度の返事がなかっただけでは、止めない。
  • 何度か試して、それでも駄目なら止める。
  • 止まったあとも、ときどき様子を見て、戻れば動き出す。
  • 戻るときは、全台がいっせいに戻らないよう、ばらける。

4つです。

どれも、人間なら自然にやっていることでした。
電話が1度つながらなかったからといって、その日の仕事をやめる人はいません。何度かかけ直して、それでも駄目なら、別の手を考えます。
通じるようになったら、また電話します。

画像

書いてみると、ずいぶん当たり前のことです。当たり前のことを機械にさせるのが、いちばん難しいのだと、この頃になって分かってきました。

人間は、迷ったときに加減をします。機械は、加減をしません。
こちらが加減を書いておかないかぎり、言われたとおりに、極端に振る舞います。「確認が取れなければ止める」も、その極端さの1つでした。

この回の直しには、少し迷ったところがあります。
「しばらくは信じて動き続ける」というのは、言い換えれば、確認が取れていない状態のまま動き続けるということです。安全のことだけを考えれば、止めておくほうが確実です。ただ、その確実さのために、毎晩、小さな揺れで全台が止まっていました。

どちらの損が大きいかを、数えて比べました。
回線の一瞬の揺れは、月に何度も起きます。本当の異常は、ほとんど起きません。

この比率を見て、決めました。
守りの強さは、守りたいものの重さだけでは決まりません。
どのくらいの頻度で、どちらが起きるか。
そこまで見て、はじめて決められました。

もっとも、次の困りごとは、止まる話ではありませんでした。
そもそも、立ち上がらない、という話です。

(つづく)


→ 営業リスト探しに、もう時間をかけない。
業種別に企業情報をまとめて収集できるリストルを、まずは3,000件まで無料でお試しください。👇

📊営業リスト収集ツール「リストル」
営業リスト探しに、もう時間をかけない。 業種別に企業情報をまとめて収集できるリストルを、まずは3,000件まで無料でお試しください。

📊営業リスト収集ツール「リストル」

タイトルとURLをコピーしました