2011年10月18日火曜日

トップページに掲載されている自転車の情報を知るには

たくさんの方々から投稿をいただき、MyBike.JPのトップページはいつも色彩豊かなバイクで飾られています。トップページの写真はユーザの投稿に応じて随時変更されており、このサイトを訪れる一つの楽しみになっています。

機械的に取得することが出来るとライブ壁紙やダウンロードが容易になるのでは?という意見を何度かいただき、夏前から試験的にAPIを実装していました(本業多忙のため夏の間は一時中断していましたが…)。

試行錯誤を重ね、写真URL、トップページの自転車およびオーナ情報が取得できるAPIを、先週から試験的に公開しています。


前者はトップページ画像の正式なURLにリダイレクトを行います。後者は自転車およびオーナの情報をJSON形式で返します。

とてもシンプルなAPIですが、これから様々なAPIへ拡張することへの第一歩であり、フィードバックを得るための足がかりとしたいと考えています。ご意見・ご要望はハッシュタグ#mybikeをつけてtweet, もしくはinfo@mybike.jpまでお問い合わせください。

これからも使いやすく気の利いたサイトを目指して開発を進めます!
Enjoy riding!

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

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

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