Tolerance
とある運用案件で、可用性向上のためにMySQLのslow query検出閾値を毎週削られた。5秒から始まって、最終的に1秒になった。インデックスの作成漏れや非効率なクエリを潰したいのはわかる。だが1秒まで下げると、ストレージの遅延だけで引っかかるクエリが出てくる。
建築設計をやっている友人にその話をしたら笑われた。そしてネジの話を教えてくれた。
ネジには公差がある。JIS規格でM8のボルトの外径は公称8mmだが、実際の許容範囲は7.760mmから7.972mmだ。完全な8.000mmのネジは存在しない。そもそも作れない。そして仮に作れたとしても、ぴったりのネジは締められない。ネジとナットの間にわずかな隙間があるから回る。公差は欠陥ではなく、機能だ。
同じネジでも、ホームセンターで売っているものと航空機に使うものではコストのかけ方が違う。公差が特別に狭いわけではない。違うのは不良品の許容率だ。全数検査し、トレーサビリティを追う。求められる信頼性が、品質管理の深さを決める。
さらに面白いのは、隙間がなければ困る場面があることだ。橋の継ぎ目には伸縮装置がある。鋼は温度で膨張する。隙間がなければ橋は歪み、最悪は壊れる。鉄道のレールも同じだ。あの継ぎ目の音は、設計された余白だ。
ITにいると、誤差は悪だと刷り込まれる。型は一致すべき。レスポンスは閾値以内。データは完全に整合すべき。それ自体は正しい。だがその感覚のまま現実世界を見ると、すべてが壊れて見える。現実は、許容された誤差の集積で成り立っている。
1秒を切れと言い続けたあの案件は、公差ゼロのネジを要求しているようなものだったのかもしれない。ただ、そう言い返す度胸はなかった。