負荷分散とは、サービスやアプリケーションのパフォーマンスと信頼性を向上させるために、複数のサーバー間でトラフィックを分散させるプロセスのことです。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
負荷分散とは、演算処理にかかる負荷を2台以上のコンピュータ間で分散させる方法です。インターネットでは、ネットワークトラフィックを複数のサーバーに振り分けるために、多くの場合負荷分散が採用されます。これにより、各サーバーにかかる負担が軽減され、サーバーの効率が上がり、パフォーマンスの高速化とレイテンシーの低減が可能になります。負荷分散は、ほとんどのインターネットアプリケーションが正常に機能するために必要不可欠です。
あるスーパーにレジの列が8つあり、そのうち1つだけしか開いていない状態を想像してください。すべての客が同じ列に並ばなければならないため、客が買い物の支払いを終えるまでには長い時間がかかります。今度は、その店が8つのレジすべてを開けたとします。この場合、(購入する食品の量などにもよりますが)客の待ち時間は約8分の1になります。
負荷分散では基本的に同じことを実現します。ユーザーのリクエストを複数のサーバーに振り分けることで、ユーザーの待ち時間を大幅に短縮することができます。この結果、ユーザー体験が向上します。もしいつも長い待ち時間を経験していたとしたら、上記の例の食料品店の客は、おそらくより効率の良い食料品店を探すでしょう。
負荷分散の処理は、ロードバランサーと呼ばれるツールやアプリケーションによって行われます。ロードバランサーにはハードウェアベースとソフトウェアベースのものがあります。ハードウェアのロードバランサーの場合、専用の負荷分散装置を設置する必要があります。ソフトウェアベースのロードバランサーの場合、サーバー、仮想マシン、またはクラウド上で実行できます。多くの場合、コンテンツ配信ネットワーク(CDN)には負荷分散機能が含まれています。
ユーザーからリクエストが届くと、ロードバランサーによってそのリクエストが所定のサーバーに割り当てられ、このプロセスはリクエストごとに繰り返されます。ロードバランサーは、多くの異なるアルゴリズムに基づいて、各リクエストを処理するサーバーを決定します。これらのアルゴリズムは、静的と動的の2つの主要なカテゴリに分類されます。
静的負荷分散アルゴリズムは、システムの現在の状態を考慮することなく負荷分散を行います。静的ロードバランサーは、どのサーバーのパフォーマンスが低下しているか、どのサーバーが十分に使用されていないかを意識することはありません。その代わり、あらかじめ決められた計画に基づいて負荷の割り当てを行います。静的負荷分散は簡単にセットアップできますが、効率的ではない可能性があります。
上の例えに戻って、8つのレジが開いている食料品店に、客をレジに誘導する仕事をしている従業員がいるとします。この従業員が、列がどのくらいの速度で進んでいるかを確認することなく、最初の客を1列目に、2番目の客を2列目に、というように順番に案内するだけだとします。8人のレジ係が全員効率的に仕事をこなせば、このシステムはうまく機能するでしょう。しかし、1人または数人に遅れが生じた場合、その列は他のレジよりもはるかに長蛇の列となり、結果として顧客エクスペリエンスが悪化する恐れがあります。静的負荷分散にも同じようなリスクがあり、個々のサーバーが過負荷状態になる可能性が残ります。
ラウンドロビンDNSやクライアント側の判断によるランダムな負荷分散は、静的負荷分散の2つの一般的な形式です。
動的負荷分散アルゴリズムは、各サーバーの現在の可用性、作業負荷、健康状態を考慮します。負荷の高いサーバーや性能の低いサーバーから、使用率の低いサーバーにトラフィックをシフトさせ、均一かつ効率的に分散された状態を保つことができます。しかし、動的負荷分散の設定の難易度はより高いものになっています。サーバーの可用性には、各サーバーの健康状態や全体的な能力、分散されるタスクのサイズなど、さまざまな要因が絡んできます。
例えば、食料品店でレジの列に客を振り分ける従業員が、より動的な方法を用いた場合を考えます。店員は列を注意深く観察し、どの列が最も速く進んでいるかを見て、それぞれの客が購入する食料品の量を観察し、それに従って客を振り分けます。これは、すべての客にとってより効率的な体験になるかもしれませんが、列を振り分ける従業員にはより大きな負担がかかります。
動的負荷分散アルゴリズムには、最小接続数、重み付き最小接続数、リソースベース、ジオロケーションベースなどの種類があります。
前述したように、負荷分散はWebアプリケーションで多く使用されています。ソフトウェアベースおよびクラウドベースのロードバランサーは、アプリケーションをホストするサーバー間でインターネットトラフィックを均等に分散させるために使用します。クラウドの負荷分散製品の中には、世界中に分散するサーバー間でインターネットトラフィックの負荷を均一化させることができるものもあり、このプロセスは広域負荷分散(GSLB) として知られています。
負荷分散は、データセンター内や大規模オフィスビル内のような、大規模なローカライズされたネットワークでも一般的に使用されています。従来は、アプリケーションデリバリコントローラー(ADC)や専用の負荷分散装置などのハードウェアアプライアンスを使用する必要がありました。また、ソフトウェアベースのロードバランサーもこの目的に使用されています。
動的ロードバランサーは、サーバーの健康状態(現在の状態、パフォーマンスなど)を把握する必要があります。動的ロードバランサーは、定期的にサーバーの健全性をチェックすることでサーバーを監視しています。あるサーバーやサーバーグループのパフォーマンスが低下している場合、ロードバランサーはそのサーバーへのトラフィック配信量を減らします。サーバーやサーバーグループが完全に故障した場合、ロードバランサーはトラフィックを別のサーバーグループに迂回させます。このプロセスは「フェイルオーバー」として知られています。
フェイルオーバー機能を使用すると、特定のサーバーが機能していない場合、ロードバランサーによって通常の処理がセカンダリーサーバーまたはサーバーグループに分散されます。サーバーのフェイルオーバーは信頼性にとって非常に重要です。バックアップがない状態でサーバーが故障すると、Webサイトやアプリケーションがダウンする可能性があります。サービスの中断を避けるためには、フェイルオーバーが迅速に行われることが重要です。
負荷分散のさまざまな側面についてご覧ください。