ELB(Elastic Load Balancing)
リリースしたサービスが人気で、負荷がかかって来た時、単純にスケールアップすることでも対応できるが、インスタンスタイプには限界がある。
また、単一のインスタンスで運用していると、そのインスタンスが停止したときにサービス全体が停止してしまう。(単一障害点)
そのため、ロードバランサーを使って負荷を分散させ、高負荷にも対応するスケールアウトを行う必要がある。
ELBは、ロードバランサーのマネージドサービス。
#ELBのタイプ
- CLB(Classic Load Balancer):L4/L7レイヤーでの負荷分散を行う
- ALB(Application Load Balancer):L7レイヤーでの負荷分散を行う
WebSocketやHTTP/2に対応している。
ALBはパスルーティングによりCLBより容易にバランシング構成が可能。
ALBは一つのバランサーでより複雑な構成に対応できる。
- NLB(Network Load Balancer):L4レイヤーでの負荷分散を行う。HTTP(S)以外のプロトコル通信の負荷分散をしたいときに利用する。
ロードバランサー自体が固定のIPアドレスを持っている。
超低遅延で高スループットを維持しながら秒間何百万リクエストを捌くように設計された新しいロードバランサー。
#ELBの特徴
##ヘルスチェック
設定された間隔で配下にあるEC2にリクエストを送り、各インスタンスが正常に動作しているかを確認する機能
もし異常なインスタンスが見つかった時は自動的に切り離し、その後正常になったタイミングで改めてインスタンスをELBに紐付ける。
###ヘルスチェックの設定値
- 対象のファイル
- ヘルスチェックの間隔
- 何回連続でリスエストが失敗したらインスタンスを切り離すか
- 何回連続でリクエストが成功したらインスタンスを紐付けるか
##Auto Scaling
システムの利用状況に応じて自動的にELBに紐づくインスタンスの台数を増減させる機能。
###Auto Scaling設定項目
- 最小のインスタンス数
- 最大のインスタンス数
- インスタンスの数を増やす条件と増やす数
- インスタンスの数を減らす条件と減らす数
Auto Scalingを利用することで、繁忙期やピーク時間はインスタンス数を増やし、閑散期や夜間のリクエストが少ない時は、インスタンス数を減らすといったことができる。
EC2の利用状況に応じて自動的にインスタンスの台数を増減させることて、リソースの最適化、耐障害性の向上を図れる。
###ターミネーションポリシー
需要減に基づくスケールインの際にどのインスタンスから終了するかを設定。
- OldestInstance / NewesInstance:最も古いインスタンスや新しい起動時刻のインスタンスなどの順から終了
- OldestLaunch Configuration:最も古い起動設定により起動しているインスタンスから終了
- ClosestToNextInstanceHoure:次の課金が始まるタイミングが最も近いインスタンスから終了
- デフォルト設定:OldestLaunch Configuration、ClosestToNextInstanceHoureの順に適用する。その後、複数インスタンスが残った場合はランダムに終了する。
###Auto Scalingの設定プロセス
- ALBの作成
- ターゲットグループの作成
- 起動するインスタンス設定
- Auto Scalingグループ作成
- Auto Scalingポリシー作成 or スケジュール設定
#ELBとAuto Scalingの設計ポイント
サーバーをステートレスに、つまり状態を保持しないように設計すること。
AZをまたがってインスタンスを配置する設計にすべき。
以下に単一障害点をなくすか、部分の障害は起こり得ることを前提として設計する。
#用語まとめ
###スケールアップ
インスタンスタイプを上げる。垂直にスペックを上げる。メモリやCPUの追加・増強
###スケールダウン
インスタンスタイプを下げる。垂直にスペックを下げる。メモリやCPUの削減・低性能化
###単一障害点(Single Point Of Failure、SPOF)
ある特定の部分が止まると全体が止まってしまう箇所のこと。
###スケールアウト
EC2インスタンスを水平に並べる。EC2インスタンスを複数並べ、その前段にロードバランサーを配置してリクエストを各インスタンスに分散させる。
処理する機器・サーバー台数を増加する。
###スケールイン
処理する機器・サーバー台数を低減する。
###スパイク
急激な負担増。
#参考