1

コンピューター、ルーター、プログラム、ブラウザーを再起動して問題を解決する頻度はどれくらいですか? それとも、オペレーティング システムまたはソフトウェア コンポーネントを再インストールすることによってですか?

これは、ソフトウェア コンポーネントが正しい方法で状態を保持していない疑いがある場合によくあるパターンのようで、コンポーネントを再起動することで初期状態を取得します。

Amazon/Google には多数のノードのクラスターがあると聞きました。また、各ノードの重要な特性の 1 つは、数秒で再起動できることです。そのため、そのうちの 1 つが失敗した場合、それを初期状態に戻すには、それを再起動するだけです。

この技術を第一級市民として活用する言語/フレームワーク/デザインパターンはありますか?

EDIT Amazonの背後にあるいくつかの原則と、可用性と一貫性の全体的な原則を説明するリンク: http://www.infoq.com/presentations/availability-consistency

4

7 に答える 7

3

これは実際、unix/linux の世界では非常にまれです。これらの OS は (ウィンドウも同様に) 動作の悪いプロセスから身を守るように設計されています。Google は、不正なソフトウェアを修正するためにハード リスタートに依存していないと確信しています。この手法は採用すべきではないと思います。誰かが自分のソフトウェアを回復するための最も運命的なルートであると言った場合は、他の方法を探す必要があります。

于 2009-09-16T20:13:16.367 に答える
2

通常、マイクロコントローラにはウォッチドッグ タイマーがあり、(コード行によって) 頻繁にリセットする必要があります。そうしないと、マイクロコントローラがリセットされます。これにより、ファームウェアが無限ループに陥ったり、入力待ちで立ち往生したりすることがなくなります。

未使用のメモリは、リセットを引き起こす命令、またはリセット時にマイクロコントローラが開始するのと同じ場所へのジャンプに設定されることがあります。これにより、マイクロコントローラが何らかの形でプログラム メモリ外の場所にジャンプした場合、マイクロコントローラがリセットされます。

于 2009-09-16T20:34:44.030 に答える
2

これは、組み込みシステムの世界や電気通信では一般的です。サーバーベースの世界ではあまり一般的ではありません。

あなたが興味を持っているかもしれない研究グループがあります。彼らは回復指向コンピューティングまたは「ROC」に取り組んでいます。ROC の重要な原則は、どのプログラムも、起動直後が最もクリーンで、最良で、最も信頼できる状態であるということです。したがって、障害を検出すると、障害からの回復を試みるよりも、ソフトウェアを再起動することを好みます。

簡単に聞こえますよね?まあ、ほとんどの研究はそのアイデアを実装することに費やされています。その理由は、あなたや他のコメント投稿者が指摘したとおりです。OS の再起動は実行可能な回復方法としては遅すぎます。

ROC は、次の 3 つの主要部分に依存しています。

  1. 障害を早期に発見する方法。
  2. システムの残りの部分を維持しながら、障害のあるコンポーネントを分離する手段。
  3. コンポーネント レベルの再起動。

ROC と典型的な「毎晩の再起動」アプローチの真の重要な違いは、ROC がリブートが反応である戦略であるということです。つまり、ほとんどのソフトウェアは、ある程度のエラー処理と回復 (throw-and-catch、ログ、再試行ループなど) を備えて作成されているということです。ROC プログラムは障害 (例外) を検出し、すぐに終了します。2 つのパラダイムを混同すると、信頼性が低くエラーが発生するという最悪の事態が発生します。

于 2009-09-25T03:56:29.633 に答える
1

私は、アプリケーション レベル (爆撃した場合にアプリが再起動する) でいくつかの場所を見てきました。

このパターンをアプリケーション レベルで実装しました。このパターンでは、Dbase ファイルから読み取るサービスが、x 回読み取った後にエラーが発生し始めます。スローされた特定のエラーを探し、そのエラーが見つかった場合、サービスはプロセスを強制終了してサービスを再起動するコンソール アプリを呼び出します。それは不器用で嫌いですが、この特定の状況については、これ以上の答えが見つかりませんでした.

また、IIS には、特定の条件下でアプリケーション プールを再起動する機能が組み込まれていることに注意してください。

さらに言えば、サービスの再起動は、サービスが失敗したときに実行するアクションの 1 つとして、Windows 上のすべてのサービスのオプションです。

于 2009-09-25T03:35:50.650 に答える
1

組み込みシステムには、n ミリ秒ごとに現在のスタックが保存されるチェックポイント機能がある場合があります。メモリは電源の再起動時に不揮発性 (つまり、バッテリ バックアップ) であるため、電源の起動時に、コードが古いチェックポイントにジャンプする必要があるかどうか、または新しいシステムであるかどうかを確認するためにテストが行​​われます。

Amazon/Google にも同様の手法 (ただし、より洗練された手法) が使用されていると思います。

于 2009-09-16T20:13:03.967 に答える
1

Apache で実行されている php などのスクリプト言語を見ると、呼び出しごとに新しいプロセスが開始されます。基本的なケースでは、プロセス間に共有状態はなく、呼び出しが完了するとプロセスは終了します。

利点は、プロセスが終了したときに解放されるためリソース管理の負担が少なく、プロセスがフェイルファストに設計されており、一貫性のない状態のままにしておくことができないため、エラー処理の必要性が少ないことです。

于 2009-09-24T11:29:05.450 に答える