この前のJALのシステム障害、
「プログラム更新ミス」
「プログラム設計ミス」
「プログラム設定ミス」
など、いろいろな書き方がされているが、どうも、これが原因そう
同システムで、計算用サーバーとデータベースサーバーが連動する2つの処理が同じようなタイミングで実行され、互いの処理を妨害した。このため乗客数などのデータが滞留して全体が不具合を起こし、搭載指示などができなくなった。
3月23日に同システムの開発会社によるプログラム修正を行った結果、不具合が発生する設定になった。同社でプログラム修正と検証作業を行っている。
(太字は
JALシステム障害 システム内で2つの処理が互いに妨害 影響人員約2万4000人に
http://headlines.yahoo.co.jp/hl?a=20160406-00000577-san-soci
より引用)
そうなんだよねえ~
昔のバグは、プログラムの書き間違いや
intにString入れて、超ウケね~とか
画面間の矛盾、DB更新の矛盾などだったけど、
今のバグは、分散処理に関係するもの、
といっても、デッドロックのような昔から言われているようなものでなく、
ライブロックや公平性、
スタベーション(飢餓)に絡んだものとかのほうがある。
つまり、分散処理、スケール、クラウドが進んだがゆえに起こる、
環境依存のバグというよりは障害なのだ・・
この手の障害は、特定の状況でしかおきないので、再現が難しいし、気づくのも難しい。
たとえば、普段は問題なく取れているのだけど、
Javaでガベージコレクションが走り、処理できなくなって、
キューがたまりすぎて、一部の処理がリスタートすると、
ずっとリスタートするままになるとか(ライブロックが起こっている)
モデル検査ではじけるものもあるんだけど、
モデル検査自身が難しいし、
確率論的なものや、環境上の知らない資源(windowsのグラフィックコンテキスト等)
で起こるものなどは、仕様が記述できないものもある。
ってことで、運用してみて、ログ解析して、危険を察知する
とかいうことしかない。しかし、キケンとわかっても、問題が起きていない
(実際その後も問題にならないこともある)中で、どこまで開発が対応できるか
(時間的に、予算的に)っていう問題もある。
この手の新たな問題が発生しているのが最近の障害だったりする・・・
ま、このレベル以前の障害が、いまだに圧倒的に多いんだけどね・・・
<その後追加>
その後、以下の記事を見た
JALシステム障害、前週に追加の排他制御がデッドロックを誘発
http://itpro.nikkeibp.co.jp/atcl/news/16/040601011/
ごめん、圧倒的に多いほうだった・・・「このレベル以前」。
資源間のデッドロックで、これだと、たぶん、モデル検査かければ出てくるね。
ただ、JALは元に戻すのでいいけど、他の会社には、このシステムで
収めているんでしょ?他の会社のシステムは、どうなんでしょう(^^;)