2016年8月31日水曜日

8月29日の再度のフィード取得障害について

いつも Feedeen のご利用ありがとうございます。運営者の伊藤です。

先日の障害があったばかりで心苦しいのですが、8月29日にも約3時間程度にわたってフィードアイテムの取得が停止する障害が発生いたしました。再びご迷惑をおかけすることになり、たいへん申し訳ございません。今回の障害は前回とは異なり、クローラのプロセスがファイルディスクリプタと呼ばれるリソースを使い切ってしまったことで発生しました。以下に障害の内容と対策を説明させていただきます。


障害発生の経緯


8月29日の17:30頃(日本時間)、フィードアイテムを取得する処理のうち、フィード配信元から RSS 等のデータを取得する部分(以下クローラ)で障害が発生し、処理が停止しました。これにより他の部分にもデータが供給されなくなるため、新規の更新が完全に停止することになりました。

19:30頃になり、運営者が異常なエラーを発見し、調査を開始しました。ただ、このとき運営者は外出中で、手持ちのiPhoneからサーバーに接続しての作業だったため、非常に時間を要しました。ようやく20:30頃、クローラを再起動し、暫定的に処理を復帰させました。

運営者の帰宅後、一定時間クローラの動作を監視した後、23:00頃に短時間だけクローラとその他のバックグラウンド処理を停止し、念のため仮想マシンを再起動した後に処理を復帰させました。

以上が障害発生から復旧までの経緯です。


障害の原因


今回の障害の原因は、前述のとおりクローラがファイルディスクリプタを使い切ってしまったことです。このため新規のプロセスの起動にも支障が生じ、エラー終了したクローラの再起動を繰り返す状況に陥ってしまいました。

ファイルディスクリプタを使い切った原因は特定できておりませんが、現象発生時にネットワークの遅延が発生していた形跡があるので、それがきっかけと考えられます。ただ、これまで同様の現象が発生したことはなく、他の要因も関係しているものと思われます。

また、クローラの再起動を繰り返す現象については、再起動失敗のエラーを正しく処理せず、他のエラーと同様にリトライを行ってしまったことが原因です。したがって、再起動失敗時はクローラ全体を終了させ、より上位のプロセスマネージャに再起動を任せることで対処可能です。


今後の対応


現在、データ構造の変更に伴ってクローラにも多くの修正を行っておりますので、それと並行してクローラ再起動処理の修正も進めてまいります。

それらの修正を適用するまでは、当面の間クローラの動作を注視しつつ、念のため一日に一回程度クローラ全体の再起動を行います。


発生原因が異なるとはいえ、フィードアイテム取得処理についての障害を繰り返すことになってしまい、大変申し訳ございません。今回も障害についてご報告くださった方々がおられますので、この場にて恐縮ですが御礼申し上げます。

先日の障害と合わせて対策を進めてまいりますので、今後ともよろしくお願いいたします。



2016年8月27日土曜日

8月25日のフィード取得障害について

いつも Feedeen のご利用ありがとうございます。運営者の伊藤です。

8月25日に発生したフィード取得の障害では、皆様に多大なご不便をおかけしてしまい、たいへん申し訳ありませんでした。発生した障害と対応の内容、今後の対策などについて、以下に説明させていただきます。


障害の経緯


8月25日の午前10時頃(日本時間)、フィード取得などを行うサーバー(以下、バックエンドサーバー)で障害が発生し、新たなフィードアイテムの取得とOPMLのインポート機能などが停止または利用できない状態となりました。

その際、運営者の不注意にて障害の通知メールを見逃してしまい、長時間に渡って停止状態が続くこととなってしまいました。この点は今回の障害の最大の反省点であり、対策を講じていきたいと考えております。たいへん申し訳ありませんでした。

その後、夕方頃より障害に気づかれた方々からご報告をいただき、運営者も障害を認識することができました。そして復旧作業の後、およそ19時頃にフィードアイテムの取得を再開しました。

以上が障害発生から復旧までの主な経緯です。


障害の原因と対応内容


障害の直接的な原因は、バックエンドサーバーの仮想マシンがなんらかの理由で停止したことです。クラウドサービス(AWS EC2)であるため停止の詳細な理由は不明ですが、ハードウェアレベルの障害が発生した模様です。

既に再起動やシャットダウン等の操作も受け付けない状態となっていたため、代替のバックエンドサーバーを新たに構築し、差し替えることで対処いたしました。


今後の対策


前述のとおり、せっかくの障害通知メールを運営者が見逃したことで、本来ならば速やかに復旧できた障害を、長時間に渡り放置することとなってしまいました。

見逃しの原因として最も致命的だったのは、通知メールを日常的に利用するメールアカウントで受け取っており、雑多なメールに紛れた状態だったことです。とくに現在はクローラなどの改修作業を行っている都合上、軽微な警告ログも念のためメール通知しており、事態がより悪化しておりました。

このような見逃しの対策として、サービス断に繋がるような重要なイベントは通常のメールとは別の手段(作業マシンでのデスクトップ通知やiPhoneのダイアログ通知など)で監視する環境を構築しました。個人で運営しておりますので24時間体制の監視は不可能ですが、今回のように無為に障害を長引かせることは避けられると考えております。

加えて、今回のようなハードウェア障害に対処できるものではありませんが、アプリケーションレベルの障害については自動復旧するような仕組みの実装も進めております。コストや工数などさまざまな制約がございますが、可能なものから対策を講じてまいります。


最後になりましたが、今回の障害についてご報告くださった皆様、まことにありがとうございます。皆様のご助力により、より早く復旧作業に着手することができました。心より御礼申し上げます。

また、今回の障害で影響を受けた皆様に、あらためてお詫び申し上げます。今後とも Feedeen をよろしくお願いいたします。



2016年8月13日土曜日

メンテナンス結果と進捗のご報告

いつも Feedeen のご利用ありがとうございます!運営者の伊藤です。

本日(8/13)未明にメンテナンスを行いましたので、その作業内容と、あわぜて現在の改善作業の進捗などについてご報告させていただきます。


メンテナンスの作業内容


今回のメンテナンスでは以下の更新を行いました。

  • 各サーバーインスタンスの差し替え
  • SSL (TLS) 証明書の更新
  • ニコRSSでの不具合修正

もともと今回メンテナンスを行った最大の理由は、 Feedeen のサーバーをホストしている AWS (Amazon Web Services) より、 DB サーバーのメンテナンスの告知があったことです。これにより、近日中に一時的なサービス断が避けられなくなりましたので、他の更新とともにインスタンスの入れ替えを行った次第です。

証明書の更新については、更新期限が迫っていた証明書を更新するとともに、昨今の情勢に合わせて SHA-256 形式に全面的に移行しました。古い SHA-1 形式の証明書は段階的に廃止されていきますが、 Feedeen では今後も安全な暗号化通信をご利用いただけます。

最後のニコRSS対応については、ニコRSSのフィードにおいて、同じアイテムが新規アイテムとして何度も取得されてしまうという現象を修正するものです。ただ、ニコRSS側でも同様の修正が行われたようで、既に現象は発生しなくなっていました。したがって詳細は割愛させていただきます。


改善作業の進捗について


Feedeen の機能改善については、ここ数ヶ月大きな進展がなく、申し訳ございません。これまで長くても1〜2ヶ月程度の間隔で更新していたのがパタッとなくなったので、もしかしたらサボっていると思われているかもしれませんが、決してそんなことはありません。現在はサービス開始時より引き継いでいる(今となっては少々非効率的な)古いデータ構造やプログラムを刷新する作業をひたすら続けております。

現在の Feedeen は、部分的に改善を進めてきたとはいえ、根本的には3年前の Google Reader の終了間際に突貫工事で組み上げたものです。そのため、今となっては非効率な箇所も多く、機能改善のためのデータの追加なども柔軟に行えない構造となってしまっています。そこで、今回集中的に古いデータ構造やプログラムを書き換えて、今後の改善を行う耐性を整えようという計画です。

ひとまず購読リストまわりの変更が終了したらリリースしようと考えているのですが、まだ50%程度の進捗で、あと2ヶ月程度かかる見通しです。根本的なデータ構造を変更するために影響範囲が広く、作業に長い時間がかかっておりますが、ご理解いただければ幸いです。

ということで、目に見える成果が出せないのが歯がゆいところですが、裏では懸命に改善を続けております。今後とも Feedeen をよろしくお願いいたします。



2016年8月7日日曜日

8月13日(土)午前 1:00〜3:00 メンテナンスのためサービスを停止します

いつも Feedeen をご利用いただき、ありがとうございます。運営者の伊藤です。

8月13日(土曜日)午前 1:00〜3:00 の時間帯に、下記の通り Feedeen のメンテナンスを実施させていただきます。メンテナンス期間中は Feedeen がご利用いただけませんので、あらかじめご了承ください。

メンテナンス内容:

  • データベースインスタンスの交換
  • SSL証明書の更新
  • 細かいバグ等の修正

メンテナンス期間中はご不便をおかけいたしますが、ご理解の程、よろしくお願い申し上げます。

2016年6月18日土曜日

Evernote連携の設定が変更できない不具合を修正しました

いつも Feedeen のご利用ありがとうございます。

ユーザーの方からのご報告により、Evernote連携の設定が変更できなくなっていたことが判明し、修正いたしました。具体的な不具合の内容は、詳細設定の「外部サービス」でEvernoteに接続した後に表示されるノートブックやタグの設定(下記画像)が反映されず、ページを再読込すると元に戻ってしまう、というものです。事実上、ノートブックやタグの選択が使い物にならない状態となっておりました。

Evernote連携の設定

おそらくかなり長期間にわたって不具合が存在していたと考えられます。ご不便をおかけし、まことに申し訳ありませんでした。再発防止のため、 UI 部分のテストを強化する方法を検討します。

また、もし不具合にお気付きの場合は、遠慮なくお問い合わせフォームにてご連絡ください。早急に修正させていただきます。

今後とも Feedeen をよろしくお願いいたします。



2016年5月24日火曜日

フィードリストに新しい設定項目を追加しました




いつもFeedeenをご利用いただき、まことにありがとうございます。

Feedeen のアプリケーションプログラムを更新し、フィードリストに関する新しい設定項目をいくつか追加しました。変更内容は冒頭のGIFアニメで一目瞭然ですが、以下で詳細をご紹介させていただきます。


フィードリスト用の設定メニューを新設


これまで、デスクトップ版の設定項目は右上の歯車アイコンで表示されるメニューにすべて詰め込んでいました。しかし、だいぶ設定項目が増えて煩雑になっていたので、今回の拡張を気にフィードリスト用の設定項目を分けることにしました。

新設したフィードリスト用の設定メニューには、フィードリストのパネルの右上にある、小さな歯車アイコンからアクセスできます。

フィードリストの設定メニュー

ご覧のとおり、フィードリストの表示方法に関する設定項目と、OPMLファイルのインポート(購読ダイアログのインポートタブを直接表示)・エクスポートがこちらのメニューに移動しています。これらの項目は従来の設定メニューからは削除されていますのでご注意ください。

なお、モバイル版・タブレット版の設定項目は従来どおり右側のパネルに集約されていますが、今回の追加項目(デスクトップ版のみの機能を除く)に対応する設定項目が追加されています。

モバイル版の設定項目


遅延フィードのみ、停止フィードのみ表示


フィードリスト設定メニューの最初の4項目は、フィードリストに表示するフィードを選択するものです。従来からあった「停止フィードを隠す」オプションに加えて、遅延フィードのみ、停止フィードのみを表示するモードを追加しました。

とくに購読フィードが多い場合に遅延・停止フィードを探すのが大変、というご意見をいただいたため、急遽これらのモードを追加しました。不要なフィードを整理していただけると運営上も非常に助かりますので、ご活用ください。

なお、遅延・停止フィードのみのモードでは、「既読を隠す」の設定は無視されます。遅延・停止フィードは未読がない場合が多いことを考慮しての仕様ですので、ご承知おきください。


フィードリストの並び順を名前順に固定


フィードの並び順はドラッグ&ドロップで自由に変更できますが、名前順で固定したいというご意見も多くいただいていました。そこで、今回新たに「名前順に固定」の設定を追加しました。これを有効にすると、ドラッグ&ドロップでの並べ替えができなくなり、グループ内を含むすべてのフィードが名前順で表示されるようになります。

ただし、現在はまだ表示する直前に並べ替えを行うのみですので、設定をオフにすると元の並び順に戻ってしまいます。また、詳細設定の購読リストについてもフィードの並べ替えが機能の一つになっているため、設定に関係なく従来の並び順で表示されます。

保存データ自体を名前順にする機能については、今後のサーバー側のデータ構造の改善と並行して実装を予定しております。特定のフォルダのみを並べ替えるような機能も考えていますが、他にもご要望などございましたら、ぜひお聞かせください。


パネルを自動で隠す


こちらはデスクトップ版のみの機能です。「パネルを自動で隠す」の設定項目を有効にすると、フィードリストのパネルが非表示になり、▶ボタンにマウスオーバーしたときのみ表示されるようになります。表示後は、マウスカーソルがパネル外に出るか、もしくはいずれかのフィード・グループをクリックするとパネルが消えます。実際の動作は、冒頭のGIFをご覧いただくのがわかりやすいと思います。

ノートPCなどの比較的狭い画面で、ブラウザを最大化して使っている場合などに便利な機能です。キーボードショートカットによる開閉(デフォルトで「C M」)とあわせてご活用ください。

実はこの機能、かなり以前からご要望をいただいていたのですが、当時は構造的に難しかったために後回しになっていました。現在は関連する処理がだいぶ柔軟になりましたので、フィードリストに変更を加える今回を機会に実現しました。たいへん長らくお待たせしてしまい、まことに申し訳ありませんでした。


ドラッグ中のフィード強制表示を廃止


こちらは新機能ではないのですが、従来と動作が異なるので念のためお知らせです。ドラッグ&ドロップでフィードを移動させる際、従来は「既読を隠す」などで非表示となったフィードを強制表示していました。移動先を確実に指定できるようにするための配慮だったのですが、そのためにスクロール位置がずれてしまい、元の位置を見失うことも多々ありました。

そこで、今回関連する処理を調整し、強制表示を行わないようにしました。結果的に非表示フィードの位置にはフィードを移動できなくなっていますので、並べ替えの際にはあらかじめ「既読を隠す」をオフにすることをお勧めします。キーボードショートカット(デフォルトで「C H」)を使うと、設定を素早く切り替えることができます。

ベストなUIとは言い難いのですが、ひとまず混乱が少ない方に寄せることにしました。暫定的な措置ということでご理解いただければ幸いです。


今回の新機能も、ユーザーの皆様のご意見をもとに追加させていただきました。ご要望くださった皆様、ありがとうございます。今後もより使いやすいフィードリーダーを目指して改善を続けてゆきますので、なにとぞよろしくお願いいたします!



2016年4月25日月曜日

よりタイムリーに情報をお届けできるようになりました

いつも Feedeen のご利用ありがとうございます。

年初に投稿した記事にて、フィードリーダーとしての基本的なスペックの向上を目指すことを告知させていただきました。その成果の第一弾として、完全に書き直した新しいクローラ(フィードの更新情報を収集するプログラム)をリリースしましたので、その主な改善点をご紹介させていただきます。


クローラの抜本的な改善を実施しました


Feedeen の従来のクローラでは、まず登録フィードをすべて巡回して更新データを集めて、それが完全に終わった後に各ユーザーへの配信処理を行うという順次的な方法を採用していました。この方法は、巡回時はフィード単位、配信時はユーザー単位と、それぞれに適した処理単位を採用できるために効率は良いのですが、すべてのフィードを巡回し終えるまでユーザーへの配信が始まらず、更新の反映が遅れる主な要因となっていました。

従来のクローラの処理概要

新しいクローラでは、アルゴリズムやデータ構造の工夫で配信処理もフィード単位に改め、ひとつのフィードの取得完了後すぐに配信処理を行うようにしました。これにより、フィードを取得してから表示反映までが数分程度と、遅延の大幅な改善に成功しました。

新しいクローラの処理概要

また、取得処理についてもドメインごとのきめ細かい帯域制御を行い、アクセス集中による取得エラーを大幅に抑えました。結果的に多くのフィードで更新頻度も改善され、後述するような頻度低下要因がなければ、20〜30分間隔で更新するようになっております。


はてなブックマークの優先クロールについて


ドメイン単位の帯域制御によるもうひとつの成果として、実験的にはてなブックマーク人気エントリの更新頻度を2倍(10〜15分間隔)に設定しました。具体的には、以下の URL が高頻度で更新されます(クエリーパラメータの順番は問いません)。

  • http://b.hatena.ne.jp/hotentry.rss
  • http://b.hatena.ne.jp/entrylist?sort=hot&mode=rss&threshold=3
  • http://b.hatena.ne.jp/entrylist?sort=hot&mode=rss&threshold=5

今回は実験のためはてなブックマーク決め打ちですが、将来的にはユーザーが優先フィードを指定できる方向で検討しております。ネットワークの負荷状態などを確認しつつ対象を拡大していく予定ですので、ご期待ください。


更新頻度が低下する条件について


できる限り多くのフィードが安定して更新されるよう最善を尽くしておりますが、それでも更新頻度を落とさざるをえないケースが存在します。例えば取得エラーが頻繁に発生するフィードや、配信元でアクセス頻度を落とすように設定されている場合などは通常よりも更新頻度が低くなります。

また、今回ドメインごとの帯域制御を導入したことで、同一ドメインで多数のフィードが登録されている場合も更新間隔が長くなります。現状のデータで30分間隔を維持できないと予想されるフィードは以下のとおりです。

  • auctions.search.yahoo.co.jp
  • ord.yahoo.co.jp
  • www.nicovideo.jp
  • www.kuroneko-square.net
  • d.hatena.ne.jp
  • rssblog.ameba.jp
  • ic.edge.jp
  • feeds.feedburner.com
  • blog.livedoor.jp
  • ch.nicovideo.jp

とくに Yahoo! オークションのフィード(上の2つ)は突出して登録数が多い上に配信元の帯域制限が厳しく、計算では1日に2〜3回程度しか巡回できません。引き続き更新頻度を上げる努力を続けますが、もしこれらのドメインで不要なフィードを購読されているようでしたら、登録解除をご検討ください。登録フィード数が減れば、その分だけ自動的に更新頻度が上がります。

なお、上記は今回のアップデートで従来よりも大幅に更新頻度が落ちたという意味ではありません。上記ドメインについては従来も取得エラーが多く出ており、結果的にほぼ同程度の更新頻度になっていたものと考えられます。ご理解いただければ幸いです。


今回の更新内容は以上ですが、今後も継続して抜本的なシステム改善を実施していく予定です。現状の欠点を解消し、実用性の高いフィードリーダーを目指しておりますので、今後とも Feedeen をよろしくお願いいたします。