パスワードを忘れた? アカウント作成
12748088 story
バグ

4月1日に発生したJALのシステム障害は追加されたキャッシュの排他処理によるデッドロックが原因 16

ストーリー by hylom
どうしてこうなった 部門より
あるAnonymous Coward 曰く、

4月1日、日本航空の重量管理システムで障害が発生したが、この原因が新たに追加されたキャッシュの排他制御機構にあることが判明した。元々実装されていたディスクの排他制御との間でデッドロックが発生したために障害が起きたという(日経ITpro)。

3月23日に開発元から提供されたパッチでキャッシュの排他制御機構が追加されたそうだが、なぜこの排他制御機構が追加されたのかは不明だという。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • > なぜこの排他制御機構が追加されたのかは不明だという。
    が気になったけどJALの言葉なんですね。

    http://itpro.nikkeibp.co.jp/atcl/news/16/040601011/?ST=erm&P=2 [nikkeibp.co.jp]

    従来キャッシュへのアクセス時は、ほとんどが読み出しだけで書き込み処理がほぼないとの理由で排他制御を行っていなかった。一方、データベースサーバーのディスクに対するアクセスは書き込みが大半であり、当初からアクセス時に排他制御を行う設計となっていた。「なぜキャッシュの排他制御を施すことにしたのかについて、説明は受けていない。またパッチの内容についても詳しい説明は受けていない」(JAL)という。

    • by Anonymous Coward

      > パッチの内容についても詳しい説明は受けていない

      最大の問題はここだろうけど、説明を受けたところで回避できたかというと疑問。

      • トラブルの発端となったのは、LHSから提供を受けJALが3月23日に適用したパッチ。この中に、アプリケーションサーバーのキャッシュへアクセスする際に排他制御を行うようにする設計変更が含まれていた。このパッチはJAL以外のユーザー企業からの要望で提供されたものという。

        こんなの回避無理でしょ。LHS自体が把握してなかったんだから。
        真犯人は誰だ。

        親コメント
      • by Anonymous Coward

        請ける側にとってはJALの責任にできるということろが重要で、回避できるかどうかはぶっちゃけどうでもいい

  • この場合のキャッシュの排他制御機構って何だろう。 良かれと思ってDogpile対策にStale Cache返却ロジックでも勝手にfcntl lockで組み込んだのかね?(勝手な想像)
    • by Anonymous Coward

      キャッシュと本物が互いの排他をとって互いに更新しようとしたんじゃない?

      • by Anonymous Crow (45505) on 2016年04月11日 17時23分 (#2995574)
        前提
        ・キャッシュは、ほぼ読み込みのみ
        ・ディスクは、読み書きがある
        ・キャッシュとディスクはネットワーク上の別ノード

        当初
        ・ディスクのみ排他処理アリ

        パッチ後
        ・キャッシュ、ディスクともに「個々に」排他処理アリ

        問題点
        ・トランザクション的に次の2パターンがあった
         1.キャッシュアクセス → ディスクアクセス
         2.ディスクアクセス → キャッシュアクセス
        ・キャッシュアクセス、ディスクアクセスで別々に排他処理をしていた

        開けてみればシンプルなデッドロックではありますが・・・・
        親コメント
        • by saratoga (23467) on 2016年04月11日 23時28分 (#2995769) 日記

          システム構成図見る限り、アプリケーションサーバにキャッシュを持たせるという構成がそもそもダメだと思う。
          素直にデータベースサーバを増強するか、百歩譲っても、そういうトリッキーな構成を採るなら、きちんとデータの整合性が確保できるようにデータ更新のお作法の基準を決めてレビュー項目・テスト項目に入れておかなくちゃダメだろ。
          だいたい、ロック機構を入れてデッドロックが起こったということは、実はこれまでもデータの上書きが発生してたけど、問題が露見しなかっただけという可能性も十分考えられる。
          システム組む人なら、まずは、あの構成図見て「これはイカン」と感じるセンスが必要だと思う。そして予算がなくて工夫でカバーするにも、それなりの手当てが必要だということも理解しないと。

          親コメント
        • by Anonymous Coward

          教科書に乗ってそうなくらい綺麗な例ですね。

          • 今はプログラミングからは離れていますが…

            同時に複数のオブジェクトのロックを使用する場合は順序(アドレス順とか)を決めればいいのですが…オブジェクト指向でインタフェースをシンプルで使い易くする為に御親切にも内部の奥深くでロックを使用するようなライブラリで、ロックの必要があるオブジェクトを複数使用する場合(特にオブジェクトの種類やライブラリが別のオブジェクトで)はちょっと悩みますね(同種の場合はコピーやスワップ、演算等ができるように、同時ロックが内部で行われていたりもしますが…。)

            ソースが提供されていても面倒で、ロッ

        • by Anonymous Coward

          ほぼ読み込みのみでも書き込みがあるなら、当然、排他制御はした方がいい。でも1.と2.の両方があるならタイミング次第でデッドロックになることは火を見るより明らかだから、キャッシュアクセスやディスクアクセスじゃなくて、1.と2.の両方に共通する排他制御が必要。

          JAL(ルフトハンザ)はパッチをbackoutしようと思ってるから、デッドロックは避けられても、長期的に見れば不安を抱えることになるな。あと、今はデッドロック上等の状況で運用してることにもちょっと驚いた。でも、そりゃそうか。職員のみなさんはお疲れさまです。

        • by Anonymous Coward

          キャッシュとディスクで別々に排他処理してたなら

          1 ロック(C)→キャッシュアクセス→アンロック(C)→ロック(D)→ディスクアクセス→アンロック(D)
          2 ロック(D)→ディスクアクセス→アンロック(D)→ロック(C)→キャッシュアクセス→アンロック(C)

          でデットロックしないと思うんだけど

          1 ロック(C)→キャッシュアクセス→ロック(D)<ここでデッドロック>→ディスクアクセス→アンロック(D)→アンロック(C)
          2 ロック(D)→ディスクアクセス→ロック(C)<ここでデッドロック>→キャッシュアクセス→アンロック(C)→アンロック(D)

          みたいに、キャッシュアクセスの中でディスクアクセス(およびその逆)があるならなら解るんだけど

          • by Anonymous Coward

            ディスクとキャッシュで同じはずの値を格納している変数にアクセスして比較するわけだから、アクセス中にディスクの値が変わってしまうと意味がないんだと思う。

            つまり、元々

            2. ロック(D)→アクセス(D)→アクセス(C)→アンロック(D)

            だったんじゃないかな。

            ここでキャッシュのロックを実装してしまうと
            「アクセス(C)」の部分が「ロック(C)→アクセス(C)→アンロック(C)」に置き換わるわけだから、

            2. ロック(D)→アクセス(D)→ロック(C)→アクセス(C)→アンロック(C)→アンロック(D)

            になるのが自然だと思う。

      • by Anonymous Coward

        白ヤギさんからお手紙ついた、黒ヤギさんたら読まずに食べた
        仕方がないのでお手紙書いた「さっきの手紙のご用事なあに」

        黒ヤギさんからお手紙ついた、白ヤギさんたら読まずに食べた
        仕方がないのでお手紙書いた「さっきの手紙のご用事なあに」
                     :
                     :
                     :
        こんな感じ?

        • いいえ、互いに「お前が土下座したら、こっちも軽く頭を下げてやるよ」と言い合って膠着している状態です。
          • by Anonymous Coward

            こっちもデッドロックですか。

typodupeerror

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

読み込み中...