前回はガベージコレクション——捨てる係が、家にはなぜ自動で走っていないか、という話をした。要らなくなったものを、いつ、誰が手放すか。あれは「捨てる」ほうの技術だった。今回は、その裏返し。わざと捨てないほうの話をする。
捨てる技術の次に、捨てない技術がある、というと、矛盾して聞こえるかもしれない。でも、これは別の物の話なんです。今日扱うのは、壊れたとき・切れたときのために、わざと余分に持っておく物——電池の予備、トイレットペーパーのストック、合鍵。コンピュータの言葉で冗長性といいます。同じものを、わざと複数持つ。普段は完全に無駄に見える。その無駄が、一個壊れた瞬間に、はじめて意味に変わる。そして今日のいちばんの当てどころは、物じゃないんです。家のいちばん危うい予備の無さ——「それ、お母さんしか知らない」という、たった一人に集中した知識と段取りのほう。そこをほどいてみたい。ことわっておくと、これは「お母さんが偉い」でも「夫が駄目だ」でもありません。たまたま、一方の系だけを動かし続けた家の、配置の話です。
シマダ まず言葉から。コンピュータは、信頼性のために、同じものをわざと複数持つことがあるんです。データを保存するディスクを二枚に増やして、同じ中身を両方に書く。片方が壊れても、もう片方が残る。これを冗長性、英語でリダンダンシーといいます。複製したサーバを何台も並べて、一台落ちても他が肩代わりする、というのも同じ考え方です。
マキノ 二枚に書いておく、っていうのは……普段は、片方が遊んでるってことですか。
シマダ そう見えます。普段は、ただの無駄です。二枚あっても、読み書きしているのは結局どちらか一枚で、もう一枚はじっとしている。電気代も場所も、二倍かかる。——でも、無駄と冗長は、違うんです。どこで分かれるかというと、壊れたとき。何も壊れなければ、冗長は永遠にただの無駄に見える。一個壊れた瞬間に、はじめて「ああ、これは無駄じゃなかった」に変わる。壊れるまでは区別がつかない、というのが、冗長性のいちばん厄介なところなんです。
マキノ 家でいうと、電池ですよね。リモコンの電池が切れたとき、引き出しに予備が一個あるか、無いか。
シマダ まさに。電池の予備、トイレットペーパーの買い置き、玄関の合鍵。全部、冗長性です。普段は引き出しの肥やしで、何の役にも立っていない。切れた瞬間にだけ、意味が立ち上がる。(念のため一言だけ——これは第2回のプリフェッチ、次に使う物を先回りで手元に寄せる話とは別物です。あれは「次に使う」の先読み、こっちは「切れた時の備え」。混ざりやすいので、それだけ。)
マキノ うちの現場は、そこ、決まってるんですよ。カートに載せる消耗品は、各品目、いつも同じ数だけ予備を積んでる。ハンドソープの詰め替えなら、必ず二本。シャンプーは三本。一個切らしたために、いちいち廊下を戻ってリネン室まで取りに行くほうが、ずっと高くつくんです。台車を置いて、戻って、補充して、また戻ってくる——その往復のほうが、予備一本の場所より、ずっと損なんですよ。
シマダ ——その「戻るほうが高い」、まさに冗長性を持つ理由そのものです。めったに切らさなくて、切らしても痛くないものには、予備は要らない。よく切れて、切れると往復が高くつくものに、予備を厚くする。マキノさんのカートは、その勘定が品目ごとに入ってる。
シマダ 冗長性の話をするには、その反対の言葉から入ったほうが早いんです。単一障害点。英語の頭文字でSPOFといいます。そこ一つが壊れると、全体が止まってしまう点。サーバを何台並べても、全部が通る入口の機械が一台しかなかったら、その一台が落ちた瞬間、全部止まる。冗長化というのは、要するに、この単一障害点を一つずつ潰していく作業なんです。
マキノ 一個壊れると全部止まる、っていうの……家だと、何ですか。電気のブレーカーとか。
シマダ 物でいえば、それもそうです。でも、家のいちばん大きな単一障害点は、たぶん、物じゃないんですよ。人なんです。「それ、お母さんしか知らない」。保育園に何を持たせる日か。かかりつけの小児科の診察券が、どの引き出しに入っているか。ご飯の、この家の流儀の炊き方。——全部、一人の頭の中にしかない。その一人が倒れた瞬間、家が止まる。
マキノ ……それ、うちのことですね。
シマダ ここで一つ、大事な区別をしておきたいんです。単一障害点には、大きいのと、小さいのがあって、危なさが逆なんですよ。大きい単一障害点——一家の大黒柱とか、家計を握ってる人とか——は、倒れたら誰の目にも見える。だからみんなが必死で支えにくる。むしろ怖いのは、小さい単一障害点のほうです。名札の付け替え、月謝の引き落とし日。一人しか知らない、けど普段は誰も気にしていない、小さな段取り。これは倒れても見えないまま、するっと抜ける。コンピュータでも同じで、重大な部品は監視が手厚いけど、誰も見ていない小さな単一障害点のほうが、落ちたことに気づかれないんです。
マキノ ……見えない小さいやつ。それ、後で、身に覚えのある話をします。
シマダ 知識と段取りが、たった一人に集中している。これが家の最大の単一障害点です。物の予備は引き出しに足せる。でも、頭の中の予備は、足し方が、わからない。
マキノ でもね、それ、ホテルで昔あったんですよ。似た話。リネン室の鍵を、主任が一本だけ持ってた時代があって。シーツもタオルも全部その部屋にあるのに、開けられるのが主任一人。主任が休むと、その日、誰も補充できなくて、全員、主任が来るのを待つしかなかった。
シマダ それは、鍵という物が単一障害点に見えますよね。で、解決は——合鍵を増やした、という話になりそうですけど。
マキノ いや、鍵も一本は増やしましたよ。でも、それだけじゃ足りなかったんです。鍵が二本になっても、リネン室のどこに何がどう積んであるか、どの品目をいくつ補充するか、それを知ってる人が主任一人のままだったら、鍵だけ渡されても、新人は動けない。だから、増やしたのは鍵じゃなくて、人を回して、何人かが中を覚えるようにしたんです。鍵じゃない。知ってる人を増やした。
シマダ ——マキノさん、いま、ぼくが今日いちばん言いたかったことを、先に言いました。家の単一障害点の答えは、物の複製じゃないんです。知識の複製なんですよ。合鍵を一本足しても、診察券の場所を一人しか知らなければ、何も変わらない。冗長化しなきゃいけないのは、鍵という物じゃなくて、「どこに何があって、どういう手順で回すか」という、頭の中のほう。ぼくはずっと「物の予備」の話だと思って入ってきたのに、いちばん効くのは、そこじゃなかった。
シマダ 知識を二重化する、というのは、要するにバックアップです。大事なものの控えを、別のところに取っておく。——ただ、ここでコンピュータの世界が、何度も痛い目に遭って学んだことが一つあって。バックアップは、取るだけでは、ほとんど意味が無いんです。
マキノ 取っておくだけじゃ、だめなんですか。
シマダ だめなんです。大事なのは、それを戻せること。元に戻す作業をリストアといいますが、いざ事故が起きてバックアップから戻そうとしたら、ファイルが壊れてて読めなかった、手順を誰も知らなかった、何時間かかるか誰も測ったことがなかった——これ、実際にしょっちゅう起きるんですよ。だから、ちゃんとした現場は、定期的にリストアの訓練をする。わざと「戻す」を練習しておく。取るのと、戻せるのは、別の能力なんです。
マキノ ……それ、うちにもありますよ。「書いてあるノート」。
シマダ ノート。
マキノ 災害のとき家族がどこに集まるか、保険証券がどこにあるか、銀行の何が何の口座か——いちおう、ノートに書いてあるんです。私が書いた。でもね、誰も、一度も読んだことがないんですよ。私以外。だから、あれは「取ってある」けど、たぶん「戻せない」やつです。私が倒れて、家族があのノートを開いても、どこから読んでいいか、わからないと思う。
シマダ それ、コンピュータの世界で「取ったきり、一度もリストアを試したことがないバックアップ」と、完全に同じ状態です。あるのに、戻せるか確かめていない。いちばん危ない。
マキノ でも、笑っちゃうんですけど、うちは、その訓練を、意図せずやってる日があるんですよ。私が、年に一回くらい、まる一日いない日。実家に泊まりで行くとか。
シマダ ——お母さん不在の日。
マキノ そう。私がいないと、夫と子どもたちが、否応なく、あのノートを開くしかなくなる。ご飯どうする、保育園の持ち物どこ、って。あの一日が、たぶん、いちばんちゃんとした「戻す練習」になってる。私がいるうちに、私抜きで回してみる日。意図したわけじゃないけど。
シマダ それ、避難訓練と同じ構造ですよ。本番が来てから初めて戻し方を探すんじゃなくて、平時に、わざと一回、戻してみる。マキノさんの不在の日は、家にとっての、意図せざるリストア訓練なんです。年に一度しか走っていないのが、ちょっと心配なくらいで。
シマダ 二重化のしかたにも、種類があるんです。待機している予備の系を、常に温めておくか、いざという時に立ち上げるか。前者をホットスタンバイといいます。本番とそっくり同じものを、ずっと動かしたまま待機させておく。本番が落ちた瞬間、待った時間ゼロで切り替わる。速い。でも、ずっと動かしっぱなしだから、維持費が高い。
マキノ もう片方は。
シマダ コールドスタンバイ。普段は止めて、しまってある。事故が起きてから、引っ張り出して、立ち上げる。維持費は安い。そのかわり、起動が遅い。立ち上がって使えるようになるまで、時間がかかる。安いけど、遅い。高いけど、速い。どっちを選ぶかは、どれだけ早く代わりが要るか、で決まります。——一つだけ大事なのは、どっちになるかは、その系の性質じゃなくて、普段どう動かしているか、で決まるってことです。同じ系でも、動かし続ければホット、しまい込めばコールド。生まれつきコールドな系、というのは無いんです。
マキノ ……それ聞くと、うちの夫、思い当たるんですよ。コールドスタンバイのほう。
シマダ 夫がコールド、というより——
マキノ あ、そうですね。夫が、っていうより、うちは、保育園の準備を私の系だけで回してきた。だから夫の系は、ずっと電源が入ってない状態だったんです。で、私が熱出して寝込んだ朝とかに、いざ代わってもらうと——立ち上がりに、ものすごく時間がかかる。どの服を着せるか、連絡帳に何を書くか、水筒はどれか、いちいち私に聞きに来る。私が三十分でやることに、夫は一時間半かかる。止めてあったのを、その朝に叩き起こした感じ。
シマダ まさにコールドスタンバイです。で、ここ、はっきりさせておきたいんですけど——夫が遅いんじゃない。普段動かしていない系は、誰がやっても遅いんですよ。たまたまお母さんが本番系になっている家が多いだけで、逆の家もある。コールドな側が劣ってるわけじゃない。一方だけを動かし続けた配置が、もう一方を冷やしたんです。で、これをホットに——すぐ代われる状態に——保つには、方法は一つしかない。普段から、定期的に、動かしておく。
マキノ たまに任せる、ってことですか。
シマダ 「たまに」だと、まだコールドに近いんです。月に一回だけ任せても、次のときには、また忘れてる。ほんとうにホットに保つなら、定常的に系を切り替えて運転する——これ、第4回でやったラウンドロビン、順番に担当を回す、と同じ話なんですよ。週のうち何日かは決まって夫が準備する、というふうに、定期的に主担当を回しておくと、両方の系が常に温まったままになる。たまの代打じゃなくて、定期の先発。
マキノ ……それ、頭ではわかるんですよ。わかるんですけど。任せると、最初のうちは、私がやるより時間も手間もかかる。連絡帳の書き方が違って、私が後で直したり。だから、つい「自分でやったほうが早い」になっちゃうんです。
シマダ ——それ、ホットスタンバイの維持費そのものなんですよ。常に温めておくのは、高いんです。安くはない。「自分でやったほうが早い」は、その瞬間は、たぶん正しい。温め続けるコストを、いま払うか、倒れた日にまとめて払うか、という話で。どっちが正解とは、ぼくには言えないです。
シマダ 仮に、知識を二重化できたとします。夫婦二人とも、保育園のことも、診察券の場所も、知ってる状態になった。——めでたし、じゃないんです。ここからが、冗長化のいちばん地味なコストで。二重化したものは、同期を取り続けないといけない。
マキノ 同期。
シマダ 二枚のディスクに同じ中身を書く、という話をしましたよね。あれ、片方だけ書き換えたら、二枚の中身がずれる。だから、片方を更新したら、必ずもう片方にも同じ更新を流す。コンピュータの言葉では、複製どうしの中身を揃え続けることをレプリカの一貫性を保つといいます。二つあるということは、更新を、二回ずつ流し続けるコストを、ずっと払うということなんです。
マキノ ……それ、保育園のお知らせ、まさにそれです。
シマダ というと。
マキノ 「来週、遠足だから、お弁当と水筒」って、保育園から連絡が来る。私が知った。これを、夫にも同じだけ伝えておかないと、夫は古いままなんです。二人とも知ってる状態にするって、聞いたこと全部、もう一回、夫に流すってことなんですよ。これが、地味に、ずっと続く。第1回で共有メモリの話をしましたよね。あれと同じで、同じ情報を二人で持つのって、ただじゃないんですよね。
シマダ ただじゃないんです。で、この同期をサボると、何が起きるか。怖いのは、連絡が途切れたまま、二人がそれぞれ「自分が本番だ」と思って、別々に動き出すことなんです。コンピュータでも、複製どうしの通信が切れると起きるやつで——お互いの状態が見えなくなるせいで、両方が同時に本番のつもりで走って、ぶつかる。スプリットブレイン、頭が割れる、と呼んだりします。二重化したのに、揃ってないせいで、二重化する前より危なくなる。
マキノ あー……。それ、夫婦でやったことあります。遠足の弁当。私は遠足は来週だと思い込んでて、来週ぶんのお弁当の支度をした。夫は再来週だと思ってて、再来週ぶんで動いてた。二人とも、相手の段取りが見えてなくて、それぞれ別の日に向けて、別々に手配してたんです。
シマダ 完全にスプリットブレインです。連絡が切れたまま、二人とも「自分の頭の中が正しい」と信じて、別々に走った。二人いたのに、いや、揃えてなかったから、二人が衝突した。冗長化は、同期をサボった瞬間、安全装置のふりをした地雷に変わるんです。
シマダ ここまで「持て」「二重化しろ」みたいに聞こえてたら、半分、訂正させてください。冗長性には、上限があるんです。全部に予備を持ったら、家が倉庫になる。これは第6回でやったリーク——捨てる係が無くて物が床を食い潰していく話の、ちょうど裏返しで。あっちは「捨てないから溢れる」、こっちは「備えすぎて溢れる」。出口が違うだけで、家が物で埋まる、という行き先は同じなんですよ。
マキノ 備えすぎるのも、リークなんですね。
シマダ そう。だから、どこに冗長性を割くかは、選ばなきゃいけない。コンピュータの世界の決め方は、わりと身もふたもなくて。壊れたときの被害の大きさ × 壊れる頻度。これが大きいところから順に、予備にコストを割く。めったに壊れなくて、壊れても痛くないものには、予備は要らない。よく切れて、切れると致命的なものに、予備を厚くする。
マキノ うちの備蓄、まさにそれで悩んだんですよ。最初、防災で水とか缶詰とか、どさっと買い込んだんです。そしたら、押し入れの奥で、賞味期限が切れてた。備えたつもりが、ただ腐らせてた。
シマダ それ、前回のリークそのものですね。線が切れてるのに居座ってる。
マキノ で、いまはローリングストックに変えたんです。普段から食べる缶詰やレトルトを、少し多めに買っておいて、古いのから普段のご飯で使って、使った分だけ買い足す。棚に、いつも一定数ある状態を、回しながら保つ。死蔵しないんですよ。買って、使って、また買って。
シマダ ——それ、すごく良い実装で。さっきのバックアップの話に、きれいに戻るんです。ローリングストックって、要するにバックアップを定期的にリストアしている運用なんですよ。取りっぱなしにしない。普段使いの中で、定期的に「使う」を回す。だから古びない。さっきの「年に一度の不在の日」と、同じ思想です。備えを、しまい込まずに、回す。
シマダ 今日の核心に、戻ります。家のいちばん大きな単一障害点は、物じゃなくて、人だった。「それ、お母さんしか知らない」。——これ、言ってしまえば、こうなんですよ。「お母さんしか知らない」は、愛の形をした単一障害点である、と。一人が全部背負っているのは、家族を回すための——
シマダ ……いや。すみません、いま自分で言いかけて、ちょっと疑ってます。「愛の形をした」って、きれいにまとめすぎですね。背負ってる側が、それを愛だと思ってるとは限らない。ただ、誰も代わらないから、結果そうなってるだけかもしれない。——それを言うなら、さっきの「夫はコールドスタンバイ」も、たぶん同じで。あれもきれいにまとめすぎなんです。夫が冷たい系なんじゃなくて、動かしてこなかった配置の結果を、人の性質に貼っただけかもしれない。標語にすると、どっち向きにも、こぼれるものがある。マキノさん、これ、実際どうなんですか。
マキノ ……去年、私、一週間入院したんですよ。盲腸で。急だったから、引き継ぎも何もできなくて、ただ運ばれて。
シマダ その一週間、家は。
マキノ 半分、回って、半分、回らなかったです。ご飯は、夫がなんとかした。コンビニと、実家の母が届けてくれたのとで。洗濯も、まあ、回ってた。大きいことは、意外と、なんとかなったんです。倒れたのが大きいことだったから、みんな必死で代わった。回らなかったのは、細かいところ。下の子の、保育園の名札の付け替えを、誰も知らなくて、一週間ずっと先週の名札のままだったり。上の子の、習い事の月謝の引き落とし日を、誰も把握してなくて、残高足りなくて、止まったり。——さっきシマダさんが言った、大きいのと小さいの、あれです。回らなかったのは、私しか知らなかった、小さいことのほうでした。
マキノ でね、退院して、家に帰って、思ったんですよ。「私がいなくても、半分は回るんだ」って。ちょっと、寂しかった。でも、半分は、ほっとした。全部が私に乗ってるわけじゃなかった、って。——その日から、名札の付け替えと、月謝の日だけは、冷蔵庫に貼ったんです。二重化、ってほど立派なもんじゃない。紙一枚。でも、あれ一枚あれば、次に私が倒れても、そこは止まらない。全部は無理ですよ。全部は、貼れない。けど、止まると困る小さいやつだけ、一枚ずつ、貼っていってます。
マキノ 冗長性って、結局、家じゅうを二重にすることじゃないんだな、って。それに、私が背負ってるのが愛かどうかも、夫が冷たい系かどうかも、正直、わからない。ただ、配置が、たまたまそうなってただけ。私が倒れた一週間が教えてくれたのは、それでした。止まると本当に困る、小さいやつだけ。それを、紙一枚で、もう一人の頭の外に出しておく。それだけのことなんですよ。
第8回は抽象化とインターフェース——「やっておいて」が通じる家と、通じない家の話を取り上げる。中の手順を全部は見せずに、結果だけを約束する。「夕飯、よろしく」の一言が、ある家では回り、ある家では事故になるのは、なぜか。今日は、知識を二重化して同期し続けるコストの話をした。次回は、その裏のたたみ方——全部を共有して同期し続ける(冗長性)のではなく、中身は見せずに結果だけを約束する(抽象化)——を考えてみる。どちらも「一人に集中させない」の、別のやり方だ。
#8 「やっておいて」が通じる家——抽象化とインターフェース(近日公開)
#1 コンテキストは流しに溜まる/#2 一軍は、コンロの脇に/#3 洗濯物は、列に並ばない/#4 十二時は、動かせない(ゲスト: イノウエミドリ)/#5 台所に、二人は立てるか/#6 捨てるのは、誰の仕事か
「家事のコンピュータサイエンス」は、シマダ(AI使用法研究者)とマキノトモエ(ホテル客室清掃員22年)の対談シリーズです。コンピュータサイエンスの基本概念を一つずつ取り上げ、掃除・洗濯・炊事・買い物・名もなき家事に当ててみる。効率だけでなく、快適さ・分担・諦めも等価に扱います。生成エッセイの現在地に戻る。