負荷分散について整理してみた

# 目的
負荷分散とは何かを調べる

# 負荷分散(ロードバランサー)とは
ロード(load、負荷)＋バランサー(Balancer、平衡を保つためのもの)で、サーバーやネットワークに関連する用語であり、装置の名称です。この仕組みにより、Webサイトへのアクセス集中やサーバー故障などの場合でも、アクセス中の利用者に安定したサービス提供を継続可能になります。<sup>[1]</sup>

## 負荷分散がなぜ必要か
サーバに高い負荷がかかると応答時間が遅くなり、いずれシステムがダウンするおそれがあります。システムダウンは外部からの攻撃や障害によって引き起こされる恐れもあります。システムがダウンすれば事業継続が難しくなり、ひいては企業の経営上大きな損失となってしまいます。サーバの負荷を軽減し、安定的にサーバを運用するための仕組みが、負荷分散です。<sup>[2]</sup>

## 負荷分散の手法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3888663/74fec214-e0c1-0b60-73f8-667d3cbc53b9.png)

## 負荷分散が行われるレイヤー
ロードバランサーの割り振りによって、L4かL7(OSI参照モデル)での負荷分散が可能になります。<sup>[3]</sup>

||L4ロードバランサー|L7ロードバランサー|
|:-:|:-:|:-:|
|OSI参照モデルにおける階層|トランスポート層|アプリケーション層|
|振り分け方|IPアドレスとポート番号|URLやHTTPヘッダー|
|用途|シンプルで高速な負荷分散を行いたい場合|細かいトラフィック管理<sup>*1</sup>が必要な場合|


>*1 企業のネットワークを流れるトラフィックの流量などを監視し、必要に応じて制御するなどの適切な運用を行うこと

## 負荷分散の特徴
負荷分散の特徴をまとめました。<sup>[1]</sup>

**速度低下を防ぐ**
SEO(検索エンジン最適化)の観点から、Webサイトのページ表示速度の高速化は重要です。そのためWebサイトの人気が出てアクセス数が増加しても、ページ表示速度が低下しないように対策しなければなりません。
サーバーに負荷がかかると、処理に時間がかかり、利用者は重く感じてしまいます。その主な原因は、処理件数が増加してサーバーのリソース(CPUやメモリーなど)を奪い合うためです。
そこでロードバランサーの登場です。実際のサーバーも1台から複数台に増やすことで、負荷を分散します。その結果、Webサイトのページ表示速度の低下を防ぎ、高速化することができます。

**ダウンしたサーバーへ送らない**
1台のサーバーで運用している場合、万一故障するとサービスは停止し、修理しなければ元の状態に戻すことはできません。
一方ロードバランサーの仕組みでは、実際のサーバーを複数台で構成しているため、万一そのうちの1台が故障しても他のサーバーに自動切替すれば、利用者は継続してアクセスすることができます。
故障したサーバーを修理してロードバランサーの仕組みに戻せば、再び従来の構成と機能を回復することができます。

**サーバーのメインテナンス**
サービスを一時停止せずに、サーバーのメインテナンスを行うことができます。これはロードバランサーの設定を、メインテナンス中のサーバーに振り分けしないようにすることで実現可能です。

**特定のユーザーのアクセスを同じサーバーへ送る**
Webアプリケーションのトランザクションの整合性を維持するために、過去に振り分けたサーバーと同じサーバーに送る機能があります。これを「パーシステンス」といいます。これにより、一連の処理を保つことができます。

## 負荷分散の実現方法
負荷分散の実現方法として、ハードウェア型、ソフトウェア型、クラウド型、DNSサーバを設定の4つが主に挙げられます。<sup>[2][4][5]</sup>

|方法|メリット|デメリット|
|:-:|:-:|:-:|
|ハードウェア型|専用機器を用いるため高い処理能力を持つ|機器が高価|
|ソフトウェア型|ハードウェア型より安価|性能はサーバの能力による|
|クラウド型|リソース、コストを柔軟に変更可能|グローバルなネットワーク上のサーバーに設置されるため、セキュリティの信頼性が薄い|
|DNSサーバを設定|専用機器が不要で低コスト|効率的な負荷分散やサーバ監視は基本できない|

## 負荷分散の主要製品
負荷分散の主要製品を、前項や特徴を踏まえてまとめました。<sup>[6]</sup>

|製品名|社名|実現方法|特徴|
|:-:|:-:|:-:|:-:|
|[Thunderシリーズ](https://www.a10networks.co.jp/products/)|A10 Networks|ハードウェア型|・仮想アプライアンス<sup>*2</sup>やベアメタル<sup>*3</sup>など多様な構成に適応<br>・SSL/TLS暗号処理を高速化し円滑にコンテンツを配信<br>・Harmony Controller<sup>*4</sup>で全体を俯瞰的に管理|
|[BIG-IP Local Traffic Manager](https://www.f5.com/ja_jp/products/big-ip-services/local-traffic-manager)|F5|ハードウェア型<br>ソフトウェア型<br>クラウド型|・トラフィックをリアルタイムに監視<br>・TCP<sup>*5</sup>とコンテンツオフロード<sup>*6</sup>でページ読み込み時間を大幅短縮<br>・複数の導入形態に対応|
|[Elastic Load Balancing](https://aws.amazon.com/jp/elasticloadbalancing/)|AWS|ソフトウェア型<br>クラウド型|・自動的なスケーリング<sup>*7</sup>と高い可用性で安定稼働を実現<br>・単独のロードバランサでAWSからオンプレミスまでカバー<br>・750時間/月の無料枠が提供|
|[Nginx Plus](https://www.f5.com/ja_jp/products/nginx/nginx-plus)|F5|クラウド型|・HTTP・TCP・UDPのトラフィックをロードバランシング<br>・コンテンツキャッシュによる負荷軽減・可用性向上<br>・30日間の無料トライアルが提供|
|[Cloud Load Balancing](https://cloud.google.com/load-balancing?hl=ja)|Google|クラウド型|・自動スケーリング<sup>*7</sup>で最適な負荷分散を実現<br>・SSLオフロード<sup>*8</sup>で高速かつ安全なサービス提供を支援<br>・無料トライアルあり|
|[F5 Distributed Cloud DNSロードバランサ](https://www.f5.com/ja_jp/products/distributed-cloud-services/dns-load-balancer)|F5|クラウド型|・位置情報によってクライアントが転送されるため、最適なユーザエクスペリエンスを得られる<br>・あらゆる場所にアプリケーションを導入し保護することができ、クラウドに依存しない|
|[Azure Traffic Manager](https://azure.microsoft.com/ja-jp/products/traffic-manager)|Microsoft|DNSサーバを設定|・トラフィックルーティングオプションを柔軟に選択可能・アプリケーションのダウンタイムを短縮|


>*2 特定のアプリケーション機能を装備したハードウェア（アプライアンス）をソフトウェアで実現し、仮想環境で動くようにしたもの
*3 OSやソフトウェアなどがインストールされていない物理サーバ
*4 あらゆるインフラストラクチャに導入されたA10製品の一元管理、自動化、分析機能を提供
*5 1対1のセッションによる信頼性の高い通信を行うためのプロトコル
*6 Webコンテンツのリクエストに対する応答として、キャッシュ済みのバージョンをエンドユーザーの近くにあるサーバーから配信することで、コンテンツサーバーからのトラフィックをオフロードすること
*7 システムの処理能力や容量を増減させることで、アプリケーションの成長や使用量の増減に対応する手法
*8 Webサーバーで行っていたSSL（Secure Sockets Layer）の暗号化や復号の処理を、専用のデバイスやサービスに任せることで、Webサーバーのパフォーマンスを向上させる手法

# 参考文献
[1]

https://www.kagoya.jp/howto/it-glossary/network/loadvalancer/#:~:text=%E3%83%AD%E3%83%BC%E3%83%89(load%E3%80%81%E8%B2%A0%E8%8D%B7)%EF%BC%8B,%E7%B6%99%E7%B6%9A%E5%8F%AF%E8%83%BD%20%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82

[2]

https://www.accelia.net/column/trend/6566/#:~:text=%E8%B2%A0%E8%8D%B7%E5%88%86%E6%95%A3%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%82%92,%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%8B%E3%81%AD%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82

[3]

https://zenn.dev/axpensive/articles/d80e4d102eefb4

[4]

https://it-trend.jp/load_balancer/article/demerit#:~:text=%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E5%9E%8B%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5%E3%81%AE%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88,-%E4%BD%8E%E3%82%B3%E3%82%B9%E3%83%88%E3%81%A7&text=%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%81%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%B8%8A%E3%81%AE,%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%8F%AF%E8%83%BD%E6%80%A7%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82

[5]

https://www.itreview.jp/categories/loadbalancer

[6]

https://it-trend.jp/