一生旅行生活してえ

旅行とか写真とか。たまには自己研鑽。一生旅行生活してえ。

東京証券取引所のシステム障害について

もはや説明は不要であろう。2020年下期一発目から世間を大きく騒がせたニュースだ。

 

東証、初の終日売買停止 相場情報システム障害

www.nikkei.com

自分はまさに証券業務に関連する仕事をしているため、もろにこの影響を食らうことになった。10月1日に発生したため、2020年下期から適用させるようなリリースでもしたのかと思ったが、アプリ障害ではなくハードウェア障害であったようだ。確かに、あえてこんな重要なタイミングでリリースなんて普通はしないはずで、今までも制度改正モノは3連休とか4連休を使ってリリースするのが当たり前である。

というわけで本件について色々書いていきたいと思う。

そもそもの取引所の役割

 有価証券、とくに株式について、企業が資金調達のために発行した際、どこで売買させるか、つまり出資者である株主はどこで株式を売買すればいいかという問題が生じる。とりわけ、株主からすれば、その株式が頻繁に売買されなければ、持っていてもただの紙切れとなってしまうためだ(100万円分の株式を保有していても、買ってくれる人がいなければ100万円としての価値が出ない)。その株式を集中的に集めて取引可能とする場が証券取引所の役割である。

このようにして、売買をしやすくさせる(=流動性を高めるという)ために、取引所に自社の株式を流通させることを上場という。東証一部上場は、東証一部という取引所にて、自社の株式を流通させることを意味するにすぎず、「うちは一部上場企業だぞ!えっへん!」というのは従業員からすれば別に自慢するポイントではない。

他方で、なんでも上場すればいいというわけでもなく、名のしれた大手企業でもあえて非上場させる場合もある。不特定多数の人に株式を渡したくない(=企業として独立性を守っていたい)などだ。つい先日ニュースになっていた、NTTドコモがNTT本体の完全子会社化した事例はまさにそうであろう。ドコモ株をNTTが全部買収して、NTTの完全子会社とすることで、ドコモの経営方針をNTTグループとして連携強化していく狙いだ。

NTTドコモの完全子会社化について
https://www.ntt.co.jp/news2020/2009/pdf/200929bb.pdf

ただ、取引所での売買が行えるのはいわゆる証券会社のみで、我々のような個人が売買するわけではない。各証券会社が会社レベルでの大量の受発注を取引所を通じて行い、そこから我々個人であったり、投資信託の運用会社(正確に言えば信託銀行)に受け渡しがされる。投資信託における運用会社と信託銀行の関係は以下の記事参照。

三井住友信託銀行の議決権行使の集計誤りがヤバすぎる件について解説する。 - 一生旅行生活してえ

 

システム的な観点

 さて、そんな取引所であるが、特に昨今は技術がどんどん進歩していっているため、1秒で何千件というような超高速な取引が求められるようになり、わずかな価格差を狙って一気に売買を行い利ざやを得ている(HFT=High Frequency Tradingという)。これを実現しているのが、東京証券取引所のArrowheadという化け物システムで、富士通が開発している。自分が社会人一年目の頃にそんなシステムが作られたというニュースを聞いて、当時は「へー」くらいにしか思っていなかったが…。そんなArrowheadもバージョンアップを繰り返し、直近だと2019年に最新版が稼働している。

 ここで今回の障害の直接原因として、Arrowheadのうち、ID情報など横断的に利用する属性情報を管理する共有ディスク装置のメモリが中途半端に故障したことでフェールオーバーが行えなかったということだ。ここで言っているメモリというのがRAMのことなのか、SSDのようなストレージなのかは不明だが、一旦それは置いといて良いだろう。

一般的にミッションクリティカルなシステムにおいては、各系統を冗長化(HA: High Availability構成とか言ったりする。)している。サーバーそのものだったり、ネットワーク機器だったり、電源系統だったり…。こういったものは故障やトラブルが発生した場合に、速やかに副系に切り替えられるよう、常に監視プログラムを仕込んでおり、片系が死んだ際にはアラートがあがって切り替えられるような仕組みになっている。IT用語的にはハートビートといって、定期的に生存確認を行う信号を送って、その信号が途絶えたら死んだと判断するのである。まさに文字通りHeart beat(心臓音)なのである。

で、今回、中途半端に故障してうまく副系に切り替えられなかったという事象は、メモリそのものの機能としては破損してしまったものの、なんとかハートビートの信号だけは返せるような状態になっていたと思われる。そのため、完全に故障したという判定にならずに、片系に切り替えられない状態になってしまい、中途半端に壊れた状態で稼働し続けてしまう状況となってしまったと思われる。

ここで、物理的に死んだほうのパーツを交換するとか、ケーブル差し替えて切り替えるようなことをすればいいのでは?と思うのだが、この冗長化構成にあたっては、単なる正系・副系ではなく、両現用設計となっていることがポイントなのであろう。二重化構成にあたっては、正系・副系どちらかのみが稼働していて、いざという時に1から切り替えるというコールドスタンバイ方式と、正系・副系両方が常に稼働していていざというときは即切り替えられるホットスタンバイ方式があるが、この今回の障害部分については、切り替える切り替えないという次元ではなく、常に両方を正系として稼働させる方式(両現用設計)で稼働していた。この設計の場合、わざわざ切り替えなんてせずとも、片方が死ぬと、もう片方だけで縮退運用をしてくれるため、切り替えのタイムラグやデータ同期という考慮が不要となり、まさに東証のようなミリ秒単位のトランザクション処理をするにあたっての必須要件であろう。というわけで物理的にその場の手作業での部品交換やケーブルの差し替えでの切り替えなんてのができるわけではなく、サーバーそのもののハードウェア再起動が必要であるという判断に至ったのだと思われる。

で、ハードウェア再起動をしてしまうと、おそらくだが夜間などに行っているメンテンス処理と同じようなジョブスケジュールを走らす必要があり、通常は夜間や明け方に走るジョブを日中に走らせなければならない。これらの先行関係による整合性を担保するための起動順番制御手順の担保や、そもそもそのジョブの稼働時間そのものを鑑みた時に、迅速な復旧は難しいという判断に至ったのだろう。

(上記、自分は基盤周りのスペシャリストではないので詳細は記者会見での横山CIOの話をもとにした憶測であることを留意願いたい。また、ハードウェアの設計や機器のことについても、その手の人からすれば理解が浅いのもご了承。) 

業務的な観点

 次は業務的観点である。ハードウェア再起動を行ってもっかい1からスタート(例えば後場からスタート)とする方法もありなのでは、というところでもあるのだが、今回、朝時点ですでに証券会社からの注文が多数取引所に入ってしまっていた。

 会見の話から憶測するに、証券会社から取引所の接続というのは非同期処理になっているようだ。どういうことかというと、取引所に入った注文について、取引所側のシステム再起動により取り消しされてしまっても、証券会社からの注文ステータスは宙ぶらりんに残ってしまう状態になるのである。(メールを相手に送った際、相手側でそのメールを消したところで、送信者側の送信履歴としてメールは残るであろう。それと同様に、証券会社からの発注履歴は残るはずである。)

 その宙ぶらりんに残ってしまったステータスについて、各証券会社のシステムにて1件1件削除していかねば整合性が取れない。しかし、通常業務における発注のキャンセルは「証券会社からの発注指示→東証からのキャンセル指示→証券会社システムにてキャンセル処理」という手続きを踏むのに対して、東証からのキャンセル指示無しに、証券会社システムにてキャンセル処理をしないといけない。このとき、やり方は2つ考えられる。1つは擬似的に東証からのキャンセル指示を作成し取り込ませることでキャンセルさせる、もう1つは発注指示自体をなかったことにして全部クリアさせる、という方法である。証券会社が利用しているシステムがどんな代物なのか知らないが、いずれにせよ、東証と証券会社それぞれでの特別対応が発生するため通常オペレーションで行える範囲ではなく、システム的にデータを補正する必要性が生じ、それを緊急で対応することによる二次災害の誘発の懸念が生まれるであろう。これにより、市場参加者(≒証券会社)からの大きな反発があり、終日売買停止という判断に至ったと思われる。

(なお、上記も記者会見での話をもとにした推測であることを留意願いたい。各証券会社が使っているアプリケーションについて事細かに知っているわけではない(知ってたら知ってたで詳細なことはかけないが…)。)

 

終日売買停止における影響

終日売買停止となったことで当然それ相応の影響が出るのだが、大きな混乱を発生させないようにするための終日売買停止ということもあり、少なくともシステム屋である自分の領域にとっては影響はかなり限定的に済んだ。そういった意味ではありがたい判断であった。中途半端に取引があったり、一部の取引所だけ値がついているという状態のほうが、整合性や妥当性の確認などでかなりの労力が発生したと思われる。かえって、無いもんはない、という状態のほうがシンプルでわかりやすく、リーズナブルな状況であったのは間違いない。証券会社や運用会社の株式ファンドマネージャーも、ある意味では暇な1日になったのではないだろうか。

また、今回の不幸中の幸いは前日の9月30日にこの事象が起きなかったことであろう。9月30日となると月末かつ一般的には第2Q期末であり、当然この日で決算処理を行うことになる。その場合、有価証券における評価損益の算出にあたって、値がつかないという事態に陥るところであった。もちろん一般的な企業会計でもそうだし、投資信託や年金運用ファンドもそうである。おそらくはこういう事態であれば前日の終値が直近時価という扱いになるので、その値で評価をすることになるのだろうが、その方針を取り決めるという決定フローを迅速に行わねばならない。もし9月30日にこの障害が起きていれば、その影響はもっと甚大なものになっていただろう…。もちろん、10月1日の期初のタイミングということで、ここから上場する会社があったり(実際3社あったわけだが…)、日銀の短観発表などそれはそれで重要なイベントがあるのだが、個人的には9月30日よりは影響は軽微であると考える。

 

世界的な金融センターの地位として安定的なシステム運用というのは非常に重要であり、今回の件により信頼が揺らいでしまったのは事実であろう。ましてや、香港証券取引所が国家安全法の施行により世界的に敬遠されてしまった中、そこを狙って金融センターを日本に移そうとしている最中である。今回、記者会見はその責任のとり方やシステムに対する説明などがとても素晴らしいと称賛されたが、それに甘んじること無く、引き続き世界の経済を司る証券取引所として、実直に障害の是正、再発防止に努めて欲しい。