「複数のウェブサーバーを分身のように並列稼働させたい、しかも低コストで運用できるスケールのフレキシビリティーを持って」という特にビジネスの立ち上げ段階で気になる話です。
ウェブサーバーをビジネス用途で建てる際は、身入りがない時点での初期投資はできるだけ少なくし、ビジネスの成長に応じて(または衰退に応じて)ランニングコストは臨機応変に変更できたいものです。1台のサーバーを建ててビジネスの成長に応じて大きくてパワフルな1台にリプレイスしていくことは、そもそも1台が落ちた時にサービスが止まるのでお勧めできません。この背景から通常は、「クラスタリング(互いにクローンの関係のサーバーを複数用意する)」により複数台のサーバー構成でサービスを行い、「ロードバランシング(クラスタリングした各サーバーに接続を割り振って負荷を分散させる)」でそれらの負荷分散をが行われます。
この「ロードバランシング」には「ハードウェア・ロードバランシング(物理的機器を用いて行う)」と「ソフトウェア・ロードバランシング(ソフトウェア的に行う)」に大きくは分けられますが、コンピュータや機器の「仮想化」によってハードウェアをソフトウェア的に扱えるようになった昨今では、この「ハード」と「ソフト」の区別にあまり意味は無くなりました。
今回の「低コストで運用できるスケールのフレキシビリティーを持って」という要件の場合は断然「DNSラウンドロビン」がお勧めで、Googleのサーバーたちもこれを好んで利用しています。「DNSラウンドロビン」とは物理的な機器を導入する必要なく従来から存在する仕組みに設定を行うことで実現できる便利な方法です。「ロードバランサーを使った負荷分散」では接続元がアクセスしようとするクラスタリングされたサーバー群のIPアドレスは(見かけ上)単一でロードバランサーがサーバーを選択して割り振りますが、「DNSラウンドロビン」ではクラスタリングされたサーバー群のIPアドレスは接続先から見ても複数ありDNSでレゾルブ(ドメイン名をIPアドレスに変換する)際に接続ごとに接続を指示されるIPアドレスが変わルコとで負荷分散します。
「DNSラウンドロビン」の実現方法は基本論理は簡単で、下記表のように「DNSに対して、単一のURLに呼応してクラスタリングした個々のサーバーのIPアドレスを複数登録(Aレコード)する」です。
Host | TTL | Type | Data |
www.hoge.com | 600 | A | 192.168.1.10 |
www.hoge.com | 600 | A | 192.168.1.11 |
www.hoge.com | 600 | A | 192.168.1.12 |
1. Pros & Cons: DNSラウンドロビンのメリットとデメリット
メリット
- 簡単
- ほとんど費用がかからない(DNSに上記のようにレコード追加できればOK)
デメリット
- 割り振り先のサーバーが稼働しているかは反映されず、落ちているサーバーに接続を割り振る可能性あり
2. 実際に実施しようとして困ること
実は、ホスティングサービスに装備されたDNS機能や、外部のDNSサービスには「単一のドメインに対して、複数のIPアドレスをAレコードとして登録させてくれない」ものが意外とあります。DNSラウンドロビンをしようとしてつまずく可能性があるのがここです。
3. そんな時はどうするか?
結論から言えば、Googleの「Google Cloud Platform(GCP)」で提供されている「CloudDNS」を使いましょう。CloudDNSは
- 単一のドメインに対して、複数のIPアドレスをAレコードとして登録できます
- GCP内部のサーバーとGCP外部のサーバーに割り振ることも可能
- すでにGCP使用している場合は「Cloud Load Balancer」も選択肢でしょうが、「CloudDNS」の方が安い
です。
ある程度DNSの知識があることを前提に概要のみを書きました。詳細なご相談は、グローバル大企業のウェブシステム取扱い経験者がいる弊社にお寄せください。