組込み開発の思いもよらない障害の話
私は長年、組込み開発に従事してきたベテランエンジニア.Tと言います。組込み開発を中心に、ソフトウェアエンジニアはどうあるべきか、など、日頃考えている事や感じた事をとめどなく書いてみようと思います。
担当したリアルタイムオンライン組込みシステムの話
遥か昔の話です。当時の組込み開発では、オンラインシステムのホストコンピューターと端末の通信は、物理メディアには同軸ケーブルを使い、通信手順も「基本型データ伝送制御基準」(basic mode data transmission control procedures、「基本通信手順」の方が通りが良いかも)を採用していました。
現在の組込み開発での通信から見ると骨董品ですが、それでも立派にリアルタイムオンラインシステムのインフラストラクチャーとして機能していました。
お客様のリアルタイムオンライン組込みシステムに納入
新規のお客様にあるリアルタイムオンラインシステムを納入し、お客様の教育を兼ねたシステム試験を行っていました。その途中で、端末からホストコンピューターに送信する電文(トランザクション)が時々欠落するというエラーが判明しました。
コンピューターセンター内で、開発担当者総出でシステム試験を行った時にはそのエラーは発生していません。それなのに、お客様全店に展開したら、発生し始めた障害です。蜂の巣をつついたように、組込みソフト部隊やハード部隊の垣根を超えた障害調査が始まりました。
トランザクションにおけるエラーで発生した障害
調査の結果、直接の原因はトランザクションのCRC(Cyclic Redundancy Check, 誤り検出符号の一種)エラーで、ネットワークの中継ノードで破棄されていたのです。
なぜトランザクションにCRCエラーが発生するのかの原因が不明です。当初は、端末や中継ノードなどのハードウェア不具合が疑われましたが、ハード部隊が調査しても不具合は見つかりません。
継続した調査を進めていると、エラーが発生する時間に規則性があることが見えてきたのです。つまり、一定間隔でエラーが発生するのです。それで、一定時間毎にエラーを発生させるノイズ源が何処かにあるに違いない、ということが判明しました。
障害の原因は冷蔵庫!?
こうなると、同軸ケーブルの敷設業者を含めて、ハード部隊がしらみつぶしにノイズ源を探すことになります。そしてノイズ源を発見したのです。そのノイズ源は何と従業員の休憩室に設置されている冷蔵庫でした。
一般的にビルにはEPS(Electric Pipe Space、電気・通信関係の配線を通すために用意されている、建物の各階をまたぐ縦穴)が準備されています。当該リアルタイムオンラインシステム用同軸ケーブルもそのEPSに敷設していたのです。問題の冷蔵庫は、休憩室に通してあるEPSの真横に設置されていたのです。
ハード部隊は、既存のケーブル類にノイズを発生させるものは無いかは当然確認していましたが、EPS横に設置している冷蔵庫までは思いが至っていなかったようです。また、私も普段は組込みソフトウェアのことばかりに気を取られていましたが、こんな事もあるんだ、と良い勉強をさせて貰った一件でした。
現在の組込み開発における通信プロトコルの信頼性
現在主流の物理メディアや通信プロトコルはエラー耐性が格段に改善、向上していますので、今回お話したような単純なエラーでトランザクションが欠落することは少ないでしょう。
しかし、現在のコンピューターシステムは、何らかのネットワークに依存しているものが大多数だと思います。言い換えると、ネットワークに依存するということは、そこを流れるトランザクションは常に何らかの障害に遭遇する危険性と隣り合わせだとも言えます。
組込みシステム設計者は、自分が携わるシステムで発生するかもしれない障害を予想し、(コストと隣り合わせかもしれませんが)可能な限り事前に対策を打っておいて欲しいと思います。
世の中、予想できないことが必ず起こりますよ。
ちなみに、当社では組込み開発を始め、様々なシステム開発の相談、設計、実装を全国対応で行なっています。無料相談も実施していますので、お気軽にご相談ください。