AWS ElastiCache(1)ElastiCacheの概要

Elasticacheとは

完全マネージドなRedis および Memcached。インメモリデータストアのため非常に高速で、大量のデータを処理したり既存のシステムを効率化することができる。

インメモリデータストアの目的は、データのコピーに超高速で低コストなアクセスを提供することである。キャッシュするデータを決定するためには、データ自体とそのアクセスパターンを把握する必要がある。また、これらのキャッシュされたデータは最新データではないという認識が必要で、使用するアプリケーションの特性上、古いデータでも許容されるのかどうかについて考察が必要である。

Elasticacheは、RedisとMemcachedをサポートしているが、できるだけシンプルな構成が必要であったり、大きなノードを実行する場合は、Memcachedを選択すべきである。

キャッシュできるデータは、S3RDS, DynamoDB streamsなど。

クラスタとレプリケーション

ElastiCacheは、メモリの断片であるノードという単位から構成され、これらを1〜6台まとめたグループをシャードと呼ぶ。クラスタモードを有効化したRedisでは、1〜15のシャードで構成される。無効化されている場合は常に1シャードのみである。

Redisクラスタ

クラスタ構成を有効化する場合には、ノード数を2以上とし、マルチAZ構成とすることが望ましい。クラスタ構成とするとデータは、シャードごとに分散されて保存され、クラスタの一部に異常が発生した場合には、正常なノード(サービス)にマスターが自動で移動する。また、異常が発生したノード(サービス)は再構成される。

Redisレプリケーション

リードレプリカを使用することで、耐障害性が向上するとともに読み込み能力がスケールアウトする。Redisに異常が発生した場合は、DNSが切り替わり、新しいノードにマスターが移動する。

キャッシング戦略

Redisにおけるキャッシュ方法は以下が用意されている。

方法 内容 利点 欠点
遅延書き込み データがキャッシュにない、もしくは古い場合に追加 容量, 障害の影響 遅延, データの古さ
書き込みスルー データがデータベースに書き込まれると常にデータを追加 データが新しい ノード拡張時にデータが存在しない, 不要なキャッシュ
TTLの追加 有効期限を指定し、期限切れはデータがないものとして扱う

AWS EC2(6)Elastic Load Balancing

ELBとは

ELBとは複数のアベイラビリティゾーンのEC2インスタンスに負荷を分散させるロードバランサである。ELBには、Classic Load BalancerApplication Load BalancerNetwork Load Balancerの3種類が存在する。特段の理由がなければ、Clasic Load Balancerは使用せず、Application Load Balancer、Network Load Balancerを使用する。

ロードバランサは、登録されているEC2のうち正常なものだけを選んで負荷を分散する。Clasic Load Balancerは、EC2のインスタンスを直接登録するが、Application Load BalancerとNetwork Load Balancerは、ターゲットグループをまず生成し、その中にインスタンスを登録する形となる。クライアントから接続があった場合は、作成したリスナーがそれを確認し、EC2へとトラフィックをルーティングする。EC2にルーティングをクロスゾーン負荷分散を無効にしていると、インスタンスがどのようなバランスで配置されていたとしても、アベイラビリティゾーンの数で均等に配分されてしまうので注意が必要である。なお、Application Load Balancerでは、クロスゾーン負荷分散はデフォルトで有効になっている。

ロードバランサに紐付けられているドメイン名に紐づけられたIPアドレスは、負荷に合わせて動的に変化する。DNSエントリは、TTLが60秒に設定されている。内側のインスタンスとの通信では、EC2にKeep Aliveを設定しておくことが望ましい。

特徴

HTTPS

SSLの終端に対応している。また、同じIPアドレスには1つのドメインしか割り当てられないSSL/TLSを拡張し、複数のドメインに対応したSNIにも対応している。

 

 

 

Application Load Balancer とは

Application Load Balancerは、OSI参照モデルのレイヤー7で動作するロードバランサで、負荷に合わせて自動的にスケールする。HTTP/2やWebSocketに対応している。EC2でクライアントの送信先アドレスを取得するためには、x-forwarded-forヘッダフィールドを参照する。ALBが負荷に追従できずスケーリングが間に合わなかった場合は、503を返す。リクエストタイムアウト値は60秒

スティッキーセッション

ALB(およびClassic Load Balancer)では、スティッキーセッションを利用できる。ALBは、レスポンスにCookieを含め、 同一のCookieを受信した場合にはリクエストを同じターゲットに送信するターゲットグループ単位 で、スティッキーセッションを有効化できる。

アベイラビリティゾーン

ALBが対象とするアベイラビリティゾーンを有効化/無効化することができる。 無効化されたアベイラビリティゾーンのターゲットは、ALBに登録された状態のままであるが、トラフィックはルーティングされない

ルーティング

IPアドレスベースのルーティングに対応しているため、オンプレミス上の任意のサーバをターゲットとして指定することができる。また、Lambdaをターゲットにすることも可能。ホストベース、パスベース、ヘッダーベース、メソッドベースなどのコンテンツベースルーティングにも対応している。

ELB基本コンポーネント

Network Load Balancerとは

Network Load Balancerは、OSI参照モデルのレイヤー4で動作するロードバランサで、必要に応じて1つのElastic IPをサブネットごとに紐づけることができる。また、NLBを作成するときには耐障害性を向上させるために、複数のAZを有効にすることができる。ただし、NLB作成後にAZを有効化したり無効化したりすることはできない。また、割り当てたサブネットに1つ以上のターゲットが存在する必要がある。割り当てたサブネットには最低8個の利用可能なIPアドレスが必要となる。

送信元のIPアドレスを保持することが可能で、Pre-Warmingなしに急激なスパイク(数百万requests/秒)に対応可能。また、NGとなったAZのIPアドレスは自動的にDNSとの紐付けから削除されるなど高い可用性を持つ。

リスナーは、TCP 1-65535ポート、およびWebSocketに対応している。ログは、VPCフローログを利用する。

クロスゾーン負荷分散

NLBでクロスゾーン負荷分散を有効にすると、同一AZ(同一サブネット)のターゲットだけではなく、有効な全てのAZの登録済みのターゲットに対してトラフィックを分散することができる。