Redis 用 Amazon ElastiCache

#ElasticCash
とりあえず以下を一読
https://dev.classmethod.jp/articles/elasticache-is-very-good-lets-review/

## キャッシュ戦略
* 遅延読み込み
* 書き込みスルー
* TTL


### 遅延読み込み

> 必要なときにのみキャッシュにデータを読み込むキャッシュ戦略

<img width="685" alt="スクリーンショット 2020-05-19 15.14.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/36ce68e8-697a-6b1c-fbca-ac71f26963c6.png">

### 書き込みスルー

> 書き込みスルー戦略では、データがデータベースに書き込まれると常にデータを追加するか、キャッシュのデータを更新

### TTL

> 遅延読み取りはデータが古くなる可能性がありますが、空ノードによる障害は発生しません。書き込みスルーでは常に新しいデータとなりますが、空ノードの障害が発生して、過剰なデータがキャッシュに入力されることがあります。各書き込みに有効期限 (TTL) 値を追加することで、各戦略の利点を得ることができます。同時に、余分なデータでキャッシュが乱雑になることを回避できます。


#Elasticache でのログ記録とモニタリング
https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/MonitoringECMetrics.html

> エンタープライズキャッシュソリューションを管理するには、クラスターのパフォーマンスとそれらが消費しているリソースを把握しておくことが重要です。生成されているイベントとデプロイのコストを把握しておくことも重要です。

Amazon CloudWatch は、キャッシュパフォーマンスをモニタリングするためのメトリクスを提供します。また、コスト配分タグはコストのモニタリングと管理に役立ちます。

* CloudWatch メトリクスを使用したモニタリング
* ElastiCache イベントのモニタリング
* コスト配分のタグによるコストのモニタリング
* リザーブドノードによるコスト管理


##CloudWatch メトリクスを使用したモニタリング
> ElastiCache では、ホストレベルのメトリクス（たとえば、CPU 使用率など）とキャッシュエンジンソフトウェアに固有のメトリクス（たとえば、キャッシュの取得やキャッシュの損失など）の両方が提供されます。これらのメトリクスは 60 秒間隔で各キャッシュノードに対して測定およびパブリッシュされます。

> 重要
キャッシュクラスターのパフォーマンスが低下し始めた場合に通知を受け取ることができるように、特定の主要メトリクスに CloudWatch アラームを設定することを検討してください。

* ホストレベルのメトリクス
* Redis のメトリクス
* モニタリングすべきメトリクス
* メトリクスの統計と期間の選択
* Monitoring CloudWatch Cluster and Node Metrics

###ホストレベルのメトリクス
> AWS/ElastiCache 名前空間は、各キャッシュノードに対する以下のホストレベルのメトリクスが含まれます。

* CPUUtilization
    * ホスト全体の CPU 使用率の割合 (%)。Redis はシングルスレットであるため、4 個以上の vCPU を持つノードで EngineCPUUtilization メトリクスをモニタリングすることをお勧めします。
* FreeableMemory
    * ホストで使用可能な空きメモリの量。OS によって解放できる可能性があるとレポートされる RAM、バッファ、およびキャッシュから算出されます。
* NetworkBytesIn
    * ホストがネットワークから読み取ったバイト数。
* NetworkBytesOut
    * すべてのネットワークインターフェースでの、このインスタンスから送信されたバイトの数。
* NetworkPacketsIn
    * すべてのネットワークインターフェイスでの、このインスタンスによって受信されたパケットの数。このメトリクスは、受信トラフィックのボリュームを単一インスタンスでのパケット数として識別します。
* NetworkPacketsOut
    * すべてのネットワークインターフェイスでの、このインスタンスから送信されたパケットの数。このメトリクスは、送信トラフィックのボリュームを単一インスタンスでのパケット数として識別します。
* SwapUsage
    * ホストで使用されるスワップの量。

###Redis のメトリクス
> AWS/ElastiCache 名前空間には、次の Redis メトリクスが含まれます。

ReplicationLag および EngineCPUUtilization を除き、これらのメトリクスは、Redis の info コマンドから算出されます。各メトリクスは、キャッシュノードレベルで算出されます。

* ActiveDefragHits
    * アクティブなデフラグメンテーションプロセスで実行された 1 分あたりの値の再割り当て数。Redis INFO の active_defrag_hits 統計から算出されます。
* BytesUsedForCache
    * データセット、バッファなど､すべての目的で Redis によって割り当てられた合計バイト数。Redis INFO の used_memory 統計から算出されます。
* CacheHits
    * メインディクショナリで読み取り専用のキー検索に成功した数。Redis INFO の keyspace_hits 統計から算出されます。
* CacheMisses
    * メインディクショナリで読み取り専用のキー検索に失敗した数。Redis INFO の keyspace_misses から算出されます。
* CurrConnections
    * クライアントの接続数 (リードレプリカからの接続を除く)。ElastiCache では、2～4 つの接続を使用して、各ケースでクラスターをモニタリングします。Redis INFO の connected_clients 統計から算出されます。
* EngineCPUUtilization
    * Redis エンジンスレッドの CPU 使用率を提供します。Redis はシングルスレッドであるため、このメトリクスを使用して、Redis プロセス自体のロードを分析できます。EngineCPUUtilization メトリクスは Redis プロセスのより正確な可視性を提供し、他のオペレーティングシステムや管理プロセスを含むサーバーインスタンス全体の CPU 使用率を公開する CPUUtilization メトリクスとともに使用できます。4 個以上の vCPU を持つ大きなノードの場合は、EngineCPUUtilization メトリクスを使用して、スケーリングのしきい値をモニタリングおよび設定します。2 個以下の vCPU を持つ小さなノードタイプの場合は、CPUUtilization メトリクスを使用します。
* Evictions
    * maxmemory の制限のため排除されたキーの数。Redis INFO の evicted_keys 統計から算出されます。
* MasterLinkHealthStatus
    * このステータスの値は、0 または 1 のいずれかになります。値 0 は、ElastiCache プライマリノードのデータが、EC2 の Redis と同期されていないことを示します。値 1 は、データが同期されていることを示します。移行を完了するには、CompleteMigration API を使用します。
* NewConnections
    * この期間内にサーバーによって受け入れられた接続の総数。Redis INFO の total_connections_received 統計から算出されます。
* Reclaimed
    * キーの有効期限切れイベントの総数。Redis INFO の expired_keys 統計から算出されます。
* ReplicationBytes
    * レプリケートされたノードについては、ReplicationBytes は、プライマリがすべてのレプリカに対して送信するバイト数を報告します。このメトリクスは、レプリケーショングループに対する書き込み負荷を表します。Redis INFO の master_repl_offset 統計から算出されます。
* ReplicationLag
    * このメトリクスは、リードレプリカとして実行中のノードにのみ適用できます。レプリカのプライマリノードからの変更適用の進行状況を秒で表します。
* SaveInProgress
    * このバイナリメトリクスは、バックグラウンド保存 (分岐または分岐なし) が進行中の場合は常に 1 を返し、それ以外の場合は 0 を返します。バックグラウンド保存プロセスは一般に、スナップショットおよび同期の際に使用されます。これらのオペレーションによりパフォーマンスが低下する可能性があります。 SaveInProgress メトリクスを使用して、パフォーマンスが低下した原因がバックグラウンド保存プロセスであるかどうかを診断できます。Redis INFO の rdb_bgsave_in_progress 統計から算出されます。


###モニタリングすべきメトリクス
> 次の CloudWatch メトリクスは、ElastiCache パフォーマンスを把握するのに役立ちます。ほとんどの場合、パフォーマンスの問題が発生する前に修正作業を行うことができるように、これらのメトリクスに CloudWatch アラームを設定することをお勧めします。

* CPUUtilization
* EngineCPUUtilization
* SwapUsage
* Evictions
* CurrConnections


####CPUUtilization
> パーセント値でレポートされるホストレベルのメトリクス

####EngineCPUUtilization
> 4 個以上の vCPU を持つ大きなノードタイプでは、Redis エンジンコアでの使用量のパーセント値をレポートする EngineCPUUtilization メトリクスを使用することをお勧めします。

####SwapUsage
> バイト単位でレポートされるホストレベルのメトリクスです。詳細については、「ホストレベルのメトリクス」を参照してください。

####Evictions
####CurrConnections

###メトリクスの統計と期間の選択
###Monitoring CloudWatch Cluster and Node Metrics


##ElastiCache イベントのモニタリング

##コスト配分のタグによるコストのモニタリング

##リザーブドノードによるコスト管理


#Redis 用 ElastiCache コンポーネントと機能
##ElastiCache ノード
> ノードとは、ElastiCache のデプロイにおける最小の構成要素です。ノードは他のノードから分離するか、一定の関係を設定できます。

##Redis 用 ElastiCache シャード
> Redis シャード (API および CLI ではノードグループと呼ばれる) は、1 ～ 6 の関連ノードのグループです。Redis (クラスターモードが無効) クラスターには、常に 1 つのみのシャードが含まれます。Redis (クラスターモードが有効) クラスター内のシャード数は 1 – 90 個です。

#参考文献
* ElastiCacheは良いサービス！！特徴や使い方をおさらいしましょ！
    * https://dev.classmethod.jp/articles/elasticache-is-very-good-lets-review/
* Redis 用 Amazon ElastiCache
    * https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/Strategies.html