Upgrade to Pro — share decks privately, control downloads, hide ads and more …

会員管理基盤をオンプレからクラウド移行した時に起きた障害たち - asken tech tal...

会員管理基盤をオンプレからクラウド移行した時に起きた障害たち - asken tech talk vol.13

イベント
〜 asken tech talk vol.13 〜 "ヒヤリとした夜"を越えて。〜花火とともに語る、開発現場のリアルと教訓〜
https://asken.connpass.com/event/362986/

会員管理基盤をオンプレからクラウド移行した時に起きた障害たち

登壇者
ニフティ株式会社
西原 俊輔

Avatar for ニフティ株式会社

ニフティ株式会社 PRO

August 22, 2025
Tweet

Resources

"ヒヤリとした夜"を越えて。〜花火とともに語る、開発現場のリアルと教訓〜 〜 asken tech talk vol.13 〜

https://asken.connpass.com/event/362986/

More Decks by ニフティ株式会社

Transcript

  1. 自己紹介 西原 俊輔 N1!IDアーキテクト 技術スタック 担当業務 略歴 • 2007年4月:ニフティ株式入社 •

    会員管理システム、認証/認可システム、 クレジットカード関連システムの開発運用 • Python、Java、PHP、 TypeScript、AWS、 Docker、PostgreSQL、MySQL etc… 趣味 • トランペット、スティールパン X • @shun_nishi
  2. Copyright © NIFTY Corporation All Rights Reserved. 現在のニフティ全体での提供サービス(抜粋) 4 ネットワークサービ

    ス Webサービス インターネット回線 オプションサービス 格安スマホ メディアコンテンツ
  3. Copyright © NIFTY Corporation All Rights Reserved. プラットフォーム エンジニア組織全体 7

    7 ストリームアラインド エンジニア 約 150 名 ISP ISP ISP Web Web CS イネイブリング SRE QA セキュリティ クラウド戦略 コンプリケイテッド・サブ システム ISPネットワーク 会員管理 課金・請求 データ基盤 社内情報 ネットワーク・サーバ
  4. Copyright © NIFTY Corporation All Rights Reserved. 8 2014年~2015年の話です。 当時、弊社では各システムの

    オンプレからパブリッククラウドへの移行が 全社ミッションとなっていました。 私が担当する会員管理システムもその対象でした。
  5. Copyright © NIFTY Corporation All Rights Reserved. 会員管理システムの概要 9 弊社ビジネスの根幹となるシステム

    ・以下の機能をもつ ・ID/パスワードの発行管理 ・IDのステータス管理 ・個人情報(氏名、住所etc)管理 ・決済情報管理 ・パスワード認証 etc… ・APIが100本超 ・バッチ処理も100本くらい ・画面系は持っていない ・24/365稼働は必須
  6. Copyright © NIFTY Corporation All Rights Reserved. オンプレ時代の環境 10 旧会員管理システムAPI群

    新会員管理システムAPI群 各社内クライアント 会員管理DB C言語 • C言語の旧システムと Javaの新システムが並行稼働していた • 稼働環境は両方ともオンプレ • 少しずつ新システムにアプリを移植して いた • データベースはOracleDatabase
  7. Copyright © NIFTY Corporation All Rights Reserved. クラウド移行によって実現する環境 11 旧会員管理システムAPI群

    新会員管理システムAPI群 各社内クライアント 会員管理DB C言語 • C言語の旧システムは廃止して新会員 管理システムに1本化 • データベースもオンプレからパブリッ ククラウドに移行してOracleは止めて PostgreSQLに移行 PostgreSQL
  8. Copyright © NIFTY Corporation All Rights Reserved. 12 2015年10月初旬 約1年の歳月を経て、そして30時間勤務を終えて

    会員管理システムのクラウド移行は完了しました。 メンテ当日もいろいろありましたが、 リリース後に起きた話にフォーカスします。
  9. Copyright © NIFTY Corporation All Rights Reserved. 毎晩CPU使用率100% 15 •

    毎晩有人監視からの電話がかかってくる。 • ロードバランサーで分散している4台中の1台か2 台だったのでサービス稼働には影響がなかった。 • 電話に出ても「明日出社してから確認します」と 繰り返すだけの日々 • 寝るのが怖かったし、なんなら家に帰るのが怖 かった。 ちなみに原因はいまだに不明 移行前試験では起きなかったし、 日々アプリ再起動を繰り返してたら起きなくなった
  10. Copyright © NIFTY Corporation All Rights Reserved. 夜間バッチがめっちゃ遅い 19 原因

    本番データベースへの インデックスの作成漏れ 開発環境では起きていなかった。 当時はデータ量の違いやアプリのバグの線で調査をしていたのと、 本番環境が安易にさわれない環境にあり気づくのに2週間以上かかった。
  11. Copyright © NIFTY Corporation All Rights Reserved. 請求トラブル発生 22 実はOracleとPostgreSQLにはこういう仕様差異がありました

    nullと空文字列を同じものとして扱う。 (※内部的にすべて全部nullに変換する) nullと空文字列を別物として扱う。 UPDATE emp_tbl set name = null where user_id = ‘A001’; UPDATE emp_tbl set name = ‘’ where user_id = ‘A001’; Oracleだと両方nullになり、 PostgreSQLだと前者はnull、後者は空文字になる
  12. Copyright © NIFTY Corporation All Rights Reserved. 請求トラブル発生 24 先月までOracleだから

    nullしかありえなかった 毎月1日に動くこんなバッチ処理がありまして 今月からPostgreSQLになって 空文字が入るようになった nullと空文字で別物だから 課金対象だ! 結構な規模のお客様にご迷惑をおかけしました…
  13. Copyright © NIFTY Corporation All Rights Reserved. 25 それからしばらくは何もありませんでした。 小さなトラブルはありましたが、

    11月に発覚した箇所は修正し、 翌月初12月1日は何も起きませんでした。 まだまだ油断はできませんが、 まる1ヶ月以上経ってトラブルも出尽くした だろうとと思ってお正月を迎えました。 だがしかし…… もう疲れた…
  14. Copyright © NIFTY Corporation All Rights Reserved. 27 大規模 請求トラブル発生

    発生日:2016年1月1日 (クラウド移行して最初の年始)
  15. Copyright © NIFTY Corporation All Rights Reserved. 大規模請求トラブル発生 28 ※架空のソースです

    登録後3ヶ月以内は無料、それ以降は課金対象にするというバッチがありまして… このバッチ処理は今回のリプレースでC言語からJavaに作り替えられたものでした
  16. Copyright © NIFTY Corporation All Rights Reserved. 大規模請求トラブル発生 30 ※架空のソースです

    日付を整数型で 取得している 日付を整数型で 取得している 整数型の差分で 比較をしている
  17. Copyright © NIFTY Corporation All Rights Reserved. 大規模請求トラブル発生 31 日付型での比較ではなく整数で比較しているため

    201601 –201512 = 89ヶ月前 201601 –201511 = 90ヶ月前 201601 –201510 = 91ヶ月前 見事に大規模な請求トラブルとなり、 最悪の年始を迎えました
  18. Copyright © NIFTY Corporation All Rights Reserved. Q&A 32 Q.

    PostgreSQL と Oracle の仕様差異は把握していなかったの? A. ちゃんと念入りに調べて注意していました。 nullと空文字のところも認識していましたが、防げませんでした…。 Q. ソースレビューしていなかったの? A. やっていました。ですがリリース1か月くらい前は 休日出勤して丸一日ソースレビューしてたりして集中力切れでした。 Q. 当時のプロジェクト体制と期間はどれくらい? A. プロパーが3名、開発会社さんが10名弱、開発期間は10か月くらい
  19. Copyright © NIFTY Corporation All Rights Reserved. 34 この人数と期間で 会員基盤のオンプレ→クラウド移行を

    やるのは無謀だった いろいろ話し合って出た結論でした。 決して頑張りが認められなかったわけではないです。 ただ、チャレンジと無謀は別物 という結論になりました。
  20. Copyright © NIFTY Corporation All Rights Reserved. 教訓 35 ベタですが……

    • プロジェクトにはバッファを持ちましょう • 日付型の比較にほかの型を使うのは絶対に やめましょう