
ロードバランシングロードバランシング)は、パフォーマンス、信頼性、スケーラビリティを向上させるために、ネットワークリクエストやサービスを複数のサーバーやネットワークデバイスに分散させる技術である。
ロードバランシングにより、大量の同時アクセスやデータトラフィックを複数のオペレーティング・ユニットに分散して処理することができ、各オペレーティング・ユニットが妥当な量の仕事を受けることができるため、単一のサーバーに過負荷がかかるのを避けることができる。
ロードバランシングの原則は、「リクエストを分散させ、処理を集中させる」と要約できる。
具体的には、クライアントがリクエストを行うと、ロードバランサーは事前に定義されたアルゴリズムとポリシーに基づいて、バックエンドの1つ以上のサーバーにリクエストを分散する。これらのサーバーは物理サーバー、仮想マシン、コンテナである。
ロードバランサーは通常、ネットワークアーキテクチャのフロントエンドに配置され、クライアントとサーバー間の仲介役として機能する。ロードバランサーはクライアントのリクエストを聞き、ロードバランシングアルゴリズムに基づいてリクエストを処理する適切なサーバーを選択する。
サーバーがリクエストを処理して応答を生成すると、ロードバランサーはクライアントに応答を返します。ロードバランシングアルゴリズムはロードバランサの中心で、 リクエストがどのように個々のサーバに分散されるかを決定します。
一般的な負荷分散アルゴリズムには、ラウンドロビン、最小コネクション、ハッシュなどがある。これらのアルゴリズムにはそれぞれ特徴があり、異なるアプリケーションシナリオに適しています。
ロードバランシング技術には、パフォーマンスの向上、信頼性の強化、スケーラビリティの実現など、さまざまな利点がある。
複数のサーバーにリクエストを分散させることで、ロードバランシングはシステム全体のパフォーマンスを大幅に向上させ、単一障害点を回避し、システムの可用性と安定性を向上させます。さらに、ロードバランシングはシームレスなスケーリングを可能にするので、システムがより多くのリクエストを処理する必要があるときは、サーバーを追加するだけです。
ロードバランシングは、ネットワークリクエストやサービスを複数のサーバーに分散させる技術で、リクエストを分散させ、処理を集中させることで、システムのパフォーマンス、信頼性、スケーラビリティを向上させる。
その原理は、クライアントとサーバーの仲介役としてロードバランサーを使用することにあり、あらかじめ設定されたアルゴリズムとポリシーに従って、リクエストを適切なサーバーに分散して処理する。クラウドコンピューティングとビッグデータ技術の継続的な発展に伴い、ロードバランシングはネットワークアーキテクチャにおいて重要な役割を果たし続け、最新のネットワークサービスに強力な保証を提供する。
ロードバランシングの種類
ロードバランサーは大きく3つのカテゴリーに分けられる:
DNSベースのロードバランシング、ハードウェアロードバランシング、ソフトウェアロードバランシング。
負荷分散のためのDNS
DNSは、ロードバランシングを実装する最も基本的でシンプルな方法である。
ドメイン名はDNSを通じて複数のIPに解決され、各IPは異なるサーバーインスタンスに対応する。 これでトラフィックのスケジューリングが完了し、通常のロードバランサーは使用しないが、単純なロードバランシング機能を実現する。

DNS経由のロードバランシングの最大の利点は、実装が簡単でコストが低く、ロードバランシング装置を独自に開発したり保守したりする必要がないことだが、次のような点もある。欠点::
- サーバフェイルオーバーの遅延は大きく、サーバのアップグレードは不便である。DNSとユーザーの間にはキャッシュの層があり、障害発生時にDNSで障害サーバーの修正や削除が間に合ったとしても、オペレーターを介した中間のDNSキャッシュはTTLルールに従わない可能性が高く、DNSの実効時間が非常に遅くなり、1日経ってもリクエストトラフィックが少し残っていることもある。
- DNSスケジューリングのバランスは、IPリストを返す地域オペレータのLocalDNSのポリシーに影響され、オペレータによっては、複数の異なるIPアドレスを返すポーリングを行わない。さらに、オペレータのLocalDNSが提供する加入者数が、トラフィックのスケジューリングにばらつきをもたらす重要な要因になることもある。
- DNSは一般にrrのポーリング方式しかサポートしておらず、トラフィック割り当て戦略は比較的単純で、ウェイトやハッシュのようなスケジューリングアルゴリズムをサポートしていない。
- DNSがサポートするIPリストは限られている。DNSは情報転送にUDPメッセージを使用し、各UDPメッセージのサイズはリンクのMTUによって制限されるため、メッセージに格納されるIPアドレスの数も非常に限られています。
実際には、このロードバランシングのアプローチは、明らかな欠点があるため、本番環境で使われることはほとんどない。この記事でDNSロードバランシングについて説明する理由は、ロードバランシングの概念をより明確に説明するためである。
BATのような企業は、一般的にDNSを使用して、地理的なレベルでグローバルな負荷分散を実現し、近接アクセスを達成し、アクセス速度を向上させるために、このアプローチは、一般的に入り口トラフィックの基本的な負荷分散であり、下層は、負荷アーキテクチャを達成するために、より専門的な負荷分散装置を持つことになります。
ハードウェア負荷分散
ハードウェア負荷分散とは、専用のハードウェア装置によって負荷分散機能を実現するものである。業界には、F5とA10という2つの代表的なハードウェア負荷分散装置がある。
このタイプの装置は強力でパワフルだが、価格は非常に高価で、通常は大物企業しかこのタイプの装置を使用しないが、中小企業は一般的に余裕がなく、ビジネスがそれほど大きくないため、これらの装置もかなり無駄である。
ハードウェア負荷分散の利点:
- 強力:あらゆるレベルのロードバランシングを包括的にサポートし、包括的なロードバランシングアルゴリズムを提供します。
- 強力なパフォーマンス:一般的なソフトウェア・ロードバランサーをはるかに上回るパフォーマンス。
- 高い安定性:商用ハードウェアのロードバランシングは、厳密にテストされ、大規模に使用されているため、非常に安定しています。
- セキュリティ:ファイアウォール、アンチDDoS攻撃、SNATサポートなどのセキュリティ機能も備えています。
ハードウェア負荷分散の欠点も明らかだ:
- 値段が高い;
- 拡張性が低く、拡張やカスタマイズができない;
- 試運転とメンテナンスは面倒で、専門の人員を必要とする;
ソフトウェア負荷分散
通常のサーバー上で負荷分散ソフトウェアを実行し、負荷分散機能を実現するソフトウェア負荷分散。
現在一般的なものは、Nginx、HAproxy、LVSである。
その違いの1つだ:
- Nginx: HTTP、電子メールプロトコルをサポートする7層のロードバランシングと、4層のロードバランシング;
- HAproxy:7レイヤーのルールをサポートし、非常に優れたパフォーマンスを発揮する。OpenStackで使用されるデフォルトのロードバランシングソフトウェアはHAproxyである;
- LVS:カーネルの状態で実行され、パフォーマンスはソフトウェアの負荷分散で最も高く、厳密に言えば、3つのレイヤーで動作するので、もう少し一般的な、さまざまなアプリケーションサービスに適用されます。
ソフトウェア負荷分散バンテージ::
- 操作が簡単:配備もメンテナンスも比較的簡単;
- 安い:必要なのはサーバー代だけで、ソフトウェアは無料;
- 柔軟性:レイヤー4とレイヤー7のロードバランシングは、ビジネス特性に基づいて選択できるため、機能の拡張やカスタマイズが容易です。
ロードバランシングLVS
ソフトウェアによる負荷分散には、Nginx、HAproxy、LVSなどがあり、いずれも一般的に使用されている。LVSは基本的にレイヤー4のロードバランシングに使われ、BATのような大企業がLVSのヘビーユーザーであることが知られている。
LVS、フルネームLinux Virtual Serverは、中国のZhang Wensong博士によって始められたオープンソースプロジェクトで、コミュニティで大きな人気を誇っており、4層の強力なリバースプロキシサーバーです。

現在では、信頼性、高性能、拡張性、操作性を特徴とする標準カーネルの一部となっており、低コストで最適なパフォーマンスを実現している。
ネットフィルターの基本

LVSは、負荷分散機能を達成するために、Linuxカーネルのnetfilterフレームワークに基づいているので、前にLVSを学ぶには、まず簡単にnetfilterの基本的な動作原理を理解する必要があります。netfilterは、実際には非常に複雑で、通常、我々はLinuxファイアウォールがnetfilterであると言うが、我々は通常、iptablesを操作する、iptablesは、単にユーザー空間のルールを書いて渡すためのツールです。netfilterは、実際には非常に複雑で、通常、我々はLinuxのファイアウォールは、netfilterと言うが、我々は通常、iptablesを操作する、iptablesは、単にツールのルールを書いて渡すためのユーザー空間であり、実際の仕事はnetfilterです。次の図を通じて、netfilterの作業メカニズムを簡単に理解することができます:
netfilterは、Linux用のカーネルベースのファイアウォール機構であり、パケットフィルタリング、ネットワークアドレス変換、プロトコルタイプに基づく接続追跡などの機能を提供する機構を管理するためのフック関数のフルセットを提供する、一般的で抽象的なフレームワークとして機能する。

一般に、netfilterは、パケット・フローの中で関連する処理を実行するルールに従って、いくつかのレベル(フック関数)を設定する仕組みを提供する。netfilterは、PEROUTING、INPUT、FORWARD、OUTPUT、POSTROUTINGの合計5点を設定する。
- PREROUTING : ネットワークレイヤーに入ったばかりで、まだルーティングされていないパケットはここを経由する。
- INPUT : ルート検索によってローカルマシン宛のパケットを決定する。
- FORWARD : 経路探索後、POST_ROUTINGの前に転送されるパケット
- OUTPUT : ローカル・プロセスからここを経由して送信されたパケット。
- POSTROUTING : ネットワークレイヤーに入るパケットのうち、ルーティングされ、転送が決定され、デバイスから出ようとするパケットはここでルーティングされる。
パケットがネットワークカードに入ると、ネットワーク層へのリンク層は、PREROUTINGに到達した後、ルーティングのターゲットIPアドレスによると、ターゲットIPは、ローカルマシンの場合、パケットは、ポートに応じてプロトコルスタックが適切なアプリケーションに送信された後、INPUTに渡され続ける。
アプリケーションはリクエストを処理し、レスポンスパケットをOUTPUTに送る。
宛先IPがローカルでなく、サーバーがforwardパラメータをオンにしている場合、パケットはFORWARDに配送され、POSTROUTINGの後、最終的にNICに送られる。