勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

2012年のKnight Capitalのシステムトラブルについて調べた

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

巨大システム 失敗の本質―「組織の壊滅的失敗」を防ぐたった一つの方法

巨大システム 失敗の本質―「組織の壊滅的失敗」を防ぐたった一つの方法

トラブルの概要

  • 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分である

いやぁ、勉強になるなぁ~