名前だけは知っていた有名なソフトウェアトラブルの事例。「巨大システム 失敗の本質―「組織の壊滅的失敗」を防ぐたった一つの方法」という本で詳しく語られていたのを見て興味が沸いて、いろいろ調べてみた。今は調べたことを、少し後悔している。

巨大システム 失敗の本質―「組織の壊滅的失敗」を防ぐたった一つの方法
- 作者: クリス・クリアフィールド,アンドラーシュ・ティルシック
- 出版社/メーカー: 東洋経済新報社
- 発売日: 2018/11/30
- メディア: Kindle版
- この商品を含むブログを見る
トラブルの概要
- 2012年8月1日ニューヨークの証券会社であるKnight Capitalにおいて、コンピュータを使った自動売買トレーディングソフトウェアのインストールに絡む問題により「大量の誤注文」が発生。
- 損失額は4億4000万ドル
何が起こったのか
- 既存システムにはもともと「パワーペグ」と呼ばれる試験的な取引機能があった。この機能は結局本番稼動しなかったが、コードは削除されなかった。いわゆるデッドコード。
- パワーペグ機能の廃止に伴い、取引モニタリング機能も廃止された(これによりトラブル後の原因調査が難しくなったようだ)。
- 取引所で新たな制度「個人投資家流動性プログラム(RLP)」が開始されることとなり、システムに対応機能を追加したが、その際の処理フラグは「パワーペグ」で過去に利用していたものと同一で設計された(合掌)
これらの一見無害な一つひとつのステップ――RLPの導入、パワーペグ機能の保持、パワーペグ取引の追跡不能、パワーペグフラグの再利用――が、金融メルトダウンのお膳立てをした。RLPプログラム開始の数日前、ナイトのIT社員が更新プログラムのインストールに取りかかった。問題がないことを確認するために、まず一部のサーバで試し、正しく作動するのを見届けてから、8台のサーバのすべてにRLP機能を組み込んだ。いや、そうしたつもりだったが、実際には1台だけ追加し忘れた。7台のサーバは修正ずみのソフトウェアを実行したが、8台目のサーバは、パワーペグコードが残る、古いバージョンのままだった。
読むだけで寿命が縮むレベルだが、いろいろ調べてみるとさらにお腹の痛い事実が次々と・・・
- The Rise and Fall of Knight Capital — Buy High, Sell Low. Rinse and Repeat.
- コードのデプロイは手動であり、ダブルチェックはなかった。各サーバのコード不一致を警告するようなチェック機能も導入されていなかった
- 取引初日の稼動直前に「Power Peg disabled」というエラーがメッセージ通知されていたが、内容もあいまいであり、リアルタイムで対応する体制もなかった為に見過ごされていた
- 同社はインシデント対応フローが確立されておらず、問題発生時に大きな混乱に陥った
- 2010年のフラッシュクラッシュで追加されたサーキットブレーカー(価格変動を基準とした自動停止機構)条件には該当しなかったため、自動遮断はされなかった
- トラブル発生直後、直近で修正されたコード(RLP対応)が原因であるという誤った(最悪の)判断があり、全サーバが1世代前の状態に切り戻された。これは、8台全台のサーバがパワーペグコードが残る、古いバージョンに戻されたということである(黙祷)
- 当然のことながら、全台でパワーペグ機能が稼動し、さらに大量の取引が実行された
- その後エンジニアが原因を特定しシステムをシャットダウンした。ここまで(なんと)業務開始から28分である
いやぁ、勉強になるなぁ~