アプリケーションの状態とは何ですか? 質問する

アプリケーションの状態とは何ですか? 質問する

これは非常に一般的な質問です。私は「「アプリケーションの状態」とはどういう意味なのか知りたいです。なぜ「アプリケーションの状態」と呼ぶのでしょうか?ウェブサーバー「無国籍」としてデータベース「ステートフル」として?

ライブ マイグレーション中に VM メモリが 1 台のマシンから別のマシンに移動されると、(VM 内の) アプリケーションの状態はどのように転送されますか。

システムのメモリ、キャッシュ、レジスタ値を転送するだけで、実行中のアプリケーションの状態を転送するのに十分でしょうか?

ベストアンサー1

確かに、口に出すと、その言葉が非常に多くの異なる文脈で使用されていますが、それぞれがその単語の有効な用法です。

  • アプリケーションの状態

    アプリケーションの状態は、おおよそメモリの内容全体です。これは、次のようなものを見るまで理解するのが難しい概念です。Erlangのサーバーループ、明示的にすべてのアプリケーションの状態は、関数の 1 回の呼び出しから次の呼び出しまで変数に保存されます。より「通常の」プログラミング言語では、プログラムの「状態」とは、すべてのグローバル変数、静的変数、ヒープに割り当てられたオブジェクト、スタックに割り当てられたオブジェクト、レジスタ、開いているファイル記述子とファイル オフセット、開いているネットワーク ソケットと関連するカーネル バッファなどです。

    あなたできる実際にその状態を保存し、別の場所でプロセスの実行を再開します。BLCR チェックポイント ツールLinux の場合は、まさにこれを実行します。(ただし、これは非常にまれなタスクです。)

  • プロトコルの状態

    プロトコルの状態は別の意味を持ちます。HTTP リクエストの状態がないということは、Web サーバーとのすべての Web ブラウザーの通信が基本的に最初からやり直されることを意味します。すべての Cookie は両方向に再送信され、ユーザーのためにある程度の「セッション」を「偽装」しようとします。サーバーは、リクエスト間で特定のクライアントに対してリソースを開いたままにしません。各リクエストは最初から開始されます。

    ネットワークファイルシステムは、ステートレス(NFSの以前のバージョン)またはステートフル(NFSの新しいバージョン)になることもあります。以前のバージョンでは、読み取り、書き込み、またはメタデータ制御の個々のパケットが関与する到着するとすぐに、ファイルから特定のバイトが必要になるたびに再要求されます。これにより、サーバーはとてもシンプルです。クライアントパケットの指示通りに動作し、サーバが再起動したりルータが消えたりしても、サーバとクライアントを元の状態に戻す手間がかかりません。しかし、これはパフォーマンスに悪影響を及ぼします。すべてのクライアントが毎日何百、何千回も静的データを要求したからです。そのため、NFSの新しいバージョンでは、ある程度の量のデータがキャッシングクライアント上での、そしてサーバーとクライアント間の永続的なファイル ハンドル。サーバーは接続されたクライアントの状態を追跡する必要がありました。またその逆も同様で、クライアントもサーバーに対してどのような約束をしたかを知る必要がありました。

    ステートフルファイアウォールアクティブなTCPセッションを追跡します。システム管理者がどのセッションを許可したいかを知っているので、初期パケット具体的には、セッションが確立されると、確立された接続を独自のエンティティとして追跡します。(これは、パケットを分離して考慮する以前のステートレス ファイアウォールからの真の進歩でした。以前のファイアウォールのルールセットは、同じレベルの機能を実現するためにはるかに寛容でしたが、セッションがすでにアクティブであるかのように見せかける悪意のあるパケットがあまりにも多く通過していました。)

おすすめ記事