web-dev-qa-db-ja.com

サーバーは独自の負荷分散を行いますか? (コア。シングルサーバーシステム。)

負荷分散を調べると、トラフィックを複数のサーバーに分散することについて話していることがわかります。このコンテキストで「単一サーバー」と「1サーバー」をGoogleで検索しましたが、関連するものは何も見つかりませんでした。

O/Sは独自の負荷分散(プロセッサ上のコア)を実行でき、プロセッサも独自の負荷分散(仮想コア)を実行できることを私は知っています。ソフトウェアを介してスレッドをコアに転送することもできます。

したがって、処理するTCP/IP負荷を処理できる単一のサーバー(1ラックまたは2)がある場合、サーバーのO/Sはすべてのコアを機能させ続けますか、それとも処理する必要がありますかソフトウェア(またはハードウェア?)ロードバランサー?特定のアプリケーションにはWebトラフィックが含まれ、会社はサーバー上で従業員のためにERPソフトウェアを実行しています。

1
Victor

あなたが探している用語は「マルチタスク」だと思います。 Windows Server 2008はマルチタスクオペレーティングシステムであり、複数のプロセスを並行して実行します。箱から出して、OSは利用可能なコア/スレッド全体に負荷を分散します。ロードバランサーは必要ありません

2
user9517

短い答え:いいえ

ハードウェアは命令を実行するためのCPUコアを提供し、命令は特定のコアに向けることができますが、どの命令がどのコアに送られるかに関する実際の意思決定(「スケジューリング」と呼ばれる)は、OSのカーネルによって処理されます。ハードウェア。

実際には、システム管理者の観点からは、通常、心配する必要はありません。 ivanivanのコメントで述べたように、ほとんどすべての最新のサーバーソフトウェアはマルチスレッドです(つまり、複数のコアを利用するように作成されています)。シングルスレッドのアプリケーションを扱っている場合でも、カーネルはさまざまなプログラムを実行します(異なるコア上の同じプログラムの異なるインスタンス)。 OSによっては、デフォルトとは異なるスケジューラーを使用するようにカーネルに指示することで、パフォーマンスの向上がほとんど得られない可能性があります(* NIXカーネルには通常、いくつかのコンパイル済みがあります)が、いいえ、絶対に行う必要はありません。これを管理するためにハードウェアを追加します。いくつかの非常に珍しいワークロード(あなたのワークロードではない)を除いて、通常はデフォルトのスケジューラーをそのままにしておくのが良い方法です。

長い答え

Iainの答えとは反対に、 multitasking は実際には、コンピューターが一度に複数のプログラムを実行できるあらゆる手法を網羅する広義の用語です。マルチタスクは、カーネルがプログラムAからのいくつかの命令を実行し(または技術的にはCPUに送信して実行する)、プログラムBからのいくつかの命令を実行する「タイムシェア」アプローチを使用して、シングルコアシステムで数十年にわたって普及しました。など、実行中のすべてのプログラムをラウンドロビンスタイルでループし続けます。

あなたが求めているのは、適切にはマルチスレッドまたは並列処理と呼ばれています。上で説明したように、シングルコアマルチタスクを実行できます。また、逆の場合もあります。この場合、ファイルのチャンクの束を圧縮するなど、タスクのコンポーネント部分が終了する順序に影響されないタスクを1つのプログラムが実行します。カーネルは、これらのチャンク圧縮命令を異なるコア間で分割する可能性があります(つまり、マルチスレッドです)が、これらのスレッドはすべて、ファイルを圧縮する1つのプログラムである同じ「タスク」から取得されます。マルチタスクとマルチスレッドは関連していますが、互換性のある用語ではありません。

ウィキペディアのページ Thread(computing) は、マルチタスクとスレッド化の混乱に対処する「スレッドとプロセス」という短いセクションを含め、これをかなり詳細に説明しています。

(異なるサーバー間のネットワーク負荷分散に関連する無関係な結果に溺れることなく)主題に関する詳細情報を見つけるための推奨検索用語:

  • 並列処理
  • マルチスレッド
  • スレッドスケジューリング
  • カーネルスケジューラ

また、書き込みマルチスレッドソフトウェアに関連する課題と落とし穴に取り組みたい場合は、「スレッドセーフプログラミング」を調べてください。

0
Askeli