DNS負荷分散は、1つのドメインに対して複数のIPアドレスにユーザーを誘導することで、アプリケーションの可用性とパフォーマンスを向上させます。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
負荷分散とは、パフォーマンスと可用性を向上させるために、複数のサーバーにトラフィックを分散させる方法です。組織では、Webサイトとプライベートネットワークの両方を高速化するために、さまざまな形式の負荷分散を使用しています。負荷分散を使用しない場合、ほとんどのインターネット上のアプリケーションやWebサイトは、トラフィックを効果的に処理できず、正しく機能することができなくなります。
DNSは、Webサイトのドメイン(google.comやnytimes.comなど)をIPアドレスに変換するため、インターネットの電話帳と呼ばれることがあります。IPアドレスは、サーバーがWebサイトやインターネットに接続されたデバイスを識別するために使用する長い数値のラベルです。DNSは、ドメイン名をIPアドレスに変換(このプロセスはDNS解決と呼ばれる)することで、Webサイトやアプリケーションにアクセスするために長い数字の羅列を記憶する手間を省くことができます。
DNS解決では、ブラウザはDNSサーバーに接続して宛先であるWebサイトの正しいIPアドレスを要求します。ドメインからIPアドレスを要求する行為は「DNSクエリー」と呼ばれます。
DNSベースの負荷分散は、DNSを使用して複数のサーバーにトラフィックを分散させる特殊なタイプの負荷分散です。これは、DNSクエリへの応答で異なるIPアドレスを提供することによって行われます。ロードバランサーは、さまざまな方法またはルールを使用して、DNSクエリへの応答で共有するIPアドレスを選択します。
最も一般的なDNS負荷分散技術の1つは、ラウンドロビンDNSと呼ばれるものです。
ラウンドロビンDNSの目的は他のタイプのDNSベースの負荷分散と同じで、トラフィックを分散させ、サイトのパフォーマンスと信頼性を向上させることです。ただし、専用のソフトウェアベースまたはハードウェアベースのロードバランサーの使用とは対照的に、ラウンドロビンDNSは、権威ネームサーバーと呼ばれる種類のDNSサーバーを使用して負荷分散を行います。
権威ネームサーバーには、ドメインの名前とそれに対応するIPアドレスが含まれているAレコード(またはAAAAレコード)と呼ばれるDNSレコードが保持されています。クライアントがDNSクエリーを送信する際、クエリーの目的はA(またはAAAA)レコードを見つけることです。ドメインは、基本的な設定では1つのIPアドレスに結びついた1つのAレコードを持ち、DNSクエリに対して常に同じIPアドレスを返すことになります。
しかし、ラウンドロビンDNSでは、ドメインは複数のAレコードを持ち、それぞれが異なるIPアドレスに結びつきます。DNSクエリが来ると、IPアドレスはラウンドロビン方式で入れ替わり、関連するサーバーにリクエストが分散されます。
例えばラウンドロビンDNSに5つのIPアドレスがある場合、DNSクエリがIPアドレス1番を返すのは毎回6回目のリクエストだけになります。各IPアドレスは異なるサーバーに対応するため、この設定により各サーバーの作業負荷が軽減され、リクエストに圧倒されることが少なくなります。
ラウンドロビンDNSの仕組みを理解するために、Webサイトの訪問と企業に郵便物を送る行為を比較します。例えば、ある企業がお客様からの郵便物を受け取るために私書箱を使用していますが、1つの私書箱では処理しきれないほどの郵便物を受け取っているとします。この企業は追加の私書箱を購入してこの問題を解決することができます。
私書箱を複数設置する対策が機能するためには、1つの私書箱が郵便物で溢れないようにする必要があります。つまり、お客様が企業の郵送先の住所を検索したときに表示される私書箱の住所は、順番に変わる必要があります。1番のお客様には1番の私書箱、2番のお客様には2番の私書箱という要領です。この方法は、私書箱全体の容量を増やすことで個々の私書箱の負担を軽減することにつながります。私書箱を追加しない場合、1つの私書箱が簡単に溢れてしまい、郵便物の受け取りが遅れてしまいます。
私書箱の例と同様に、ラウンドロビンDNSはサーバーがリクエストに圧倒されるのを防ぎ、処理の遅れを回避することができます。
ラウンドロビン方式が一般的ですが、トラフィックをルーティングする方法はこれだけではありません。ほとんどのロードバランサーでは、ドメインの所有者が複数のトラフィックルーティングルールから選択できるようになっています。
DNSベース負荷分散の構成の一例として、トラフィックの処理能力に基づいて異なるサーバーに相対的な重みを割り当てる「重み付けアルゴリズム」があります。トラフィックは比例配分されます。たとえば、サーバーAがサーバーBの2倍の処理能力を持つ場合、ロードバランサーはサーバーAにサーバーBの2倍のトラフィック量を与えます。これは、DNSクエリの応答にサーバーAのIPアドレスを返すことによって行われます。「重み付きラウンドロビンアルゴリズム」や「重み付き最小接続アルゴリズム」は、この種類のロードバランシングアルゴリズムの例です。
DNSベース負荷分散方式の多くは動的であり、ロードバランサーはリクエストを割り当てる際にサーバーの健全性とサーバーの応答時間を考慮します。動的アルゴリズムにはさまざまな形式があります。「最小接続」は動的なロードバランサーアルゴリズムの一種です。最小接続アルゴリズムを使用した構成では、サーバーの監視によって、現在開いている接続数が最も少ないサーバーが特定され、DNSクエリの応答にそのIPアドレスを提供することによって、そのサーバーに受信トラフィックが割り当てられます。
ジオロケーションも広く使われているもう一つの動的アルゴリズムです。この構成では、ロードバランサーはある地域からのリクエストを定義されたサーバーまたはサーバー群に割り当てます。例えば、フランスから送信されたすべてのリクエストは「サーバーF」に、スペインから送信されたすべてのリクエストは「サーバーS」に送信します。
近接アルゴリズムも同様のことを実現します。この構成では、ロードバランサーはユーザーに最も近いサーバーに動的にトラフィックを割り当てます。
動的アルゴリズムは若干異なるルールに従いますが、最終的にはサーバーの健全性を監視し、トラフィックの割り当て方を最適化するという同じことを行います。