2011年10月15日土曜日

ストレージ障害から復旧しました

13日の晩から15日にかけて、画像へのアクセスを伴う各種処理が停止していました。画像(写真)の入出力に伴うソフトウェアが、仕様変更により処理が行えなくなったことが原因です。当該の時間にご覧になったユーザのみなさま、ご利用のユーザのみなさま、ご迷惑をおかけしまして誠に申し訳ございませんでした。




MyBike.JPは様々なソフトウェアスタックを利用して開発しています。利用しているソフトウェアは、ネットワークサービス周りのnginxやMongoDBといったミドルウェア、開発言語のPythonはもちろんのこと、これらに付随するライブラリまで多岐に渡ります。

ソフトウェアは不定期にアップデートがあるため可能な限り追従していますが、利用しているソフトウェアの仕様変更による不整合、開発環境とプロダクション(本番)環境の差異により、不具合が発生した形となりました。

ストレージシステムには分散ファイルシステム(MongoDB GridFS)を採用しており、Python製のストレージドライバ(django-storages)を使用して読み書きを行なっています。このストレージドライバは別途ライブラリ(django-mongodb-engine)を利用します。

今回、ライブラリのバージョン変更に伴う仕様の変更により、ストレージドライバとの整合性がとれなくなり、ストレージそのものへアクセスを行うことが出来なくなったことが問題です。

新旧のソフトウェアの違いは次のようになります。

django1.2.51.3.1
django-mongodb-engine0.3.00.4.0
django-storages1.1.3 + mybike patch 11.1.3 + mybike patch 2


django-mongodb-engineのバージョンアップに伴いデータベースへのアクセス方法が変更されたため、ストレージ障害が発生したというわけです。

これまで書いたとおりソフトウェアのバージョンアップはリスクを伴いますが、セキュリティホールの修正、メンテナンス性の向上など、サイトを運営し続ける上で様々なメリットがあります。もちろん障害を起こして良いわけではありませんが、リスクを取らずに硬直化するよりも、可能な限り前進する姿勢でいたいと考えています。

いろいろご迷惑おかけしましたが、今後ともどうぞよろしくお願いします!