はじめに
こんにちは、今回の記事では、私が業務でAmazon ElastiCache for Redis Serverlessを
導入する際に調査した内容をまとめてみました。non-serverlessと比較してのメリットやコストの観点からまとめてますので、是非最後まで呼んでくださると嬉しいです。
Redis(Remote Dictionaly Server)とは
よくキャッシュやセッション管理で利用されるオープンソースのNoSQLデータベースで以下のような特徴を持ちます。
- Key-Value形式でのデータ
- インメモリに保存するので高速に読み書きができる
- 豊富なデータ型をサポートしている(String/List/Set/Hash/...etc)
- データの永続化が可能
Amazon ElastiCache for Redis
用語
- ノード(Node)
キャッシュサーバー/ElastiCacheの最小単位
選択したノードタイプによって性能(メモリやCPU)が異なる - シャード(Shard)
ノードをまとめるグループ
1つのシャードにプライマリノード(読み書き可能)1個とリードレプリカノード(読み込み専用)0~5個を持つ - クラスタ(Cluster)
シャードをまとめるグループ
クラスタ毎にキャッシュエンジンを選択可能
シャード数は1~15で増減
データの永続化(バックアップ)
- スナップショット
-> 定期的にデータベースの内容をスナップショットでとり、s3へ保存する - AOF (Append-Only File)
-> 全ての書き込み操作をログに記録し、そこからデータを復元することができる
上記2つの方法がデータのバックアップ方法としてあるが、AWS公式としては、Multi AZ構成にして可用性を担保することを推奨している。
システム構成
全体のシステム構成としては上記のような形(簡略化のためMulti AZは考慮していません)
運用にあたって、ノードサイズのスケールアップやシャードの増減は、CPUやメモリの使用率を監視してスケーリングする必要がある
Amazon ElastiCache for Redis Serverless
2023年11月にGAされたサービス
システム構成
以下のように、non-serverlessと比較して、プロキシという概念がアプリケーションとRedis間に存在している。
特徴
- プロキシは複数のプロキシノードで構成されており、これらがリクエストを処理する
- プロキシノードはリクエストを適切なキャッシュノードにルーティングする
- キャッシュノードの数は動的に調整され、その都度プロキシがルーティングを再構築する
サーバーレスのメリット
- キャッシュ容量の計画・管理をする必要がなくなる
-> メモリ・コンピューティング・ネットワーク帯域等の使用率をモニタリングし、垂直・水平方向に自動でスケーリングする - 高可用性
-> 複数のAZ間でデータを自動的にレプリケートする。これらにより、SLAが99.99%になった(従来は99.9%) - ソフトウェアの自動アップグレード
-> キャッシュを最新のマイナーおよびパッチバージョンであれば自動でアップグレードする。メジャーバージョンはElastiCacheから通知が送信される
コスト(東京リージョンの場合)
サーバーレスのコストは大きく以下の2つがある
- データ保存料: 1時間毎Redisに保存されているデータ量を計測し、課金される。1GB以下の保存料であれば1GBとして料金計算される
$0.151 / GB-hour
- ECPU: 1キロバイトの送受信で1ECPUとして計算され、100万ECUP毎に以下の料金がかかる。1キロバイト以下のデータであれば1キロバイトとして計算される
$0.0041 / million ECPUs
感想
- サーバーレスになったことで運用・管理がかなり楽になった上、SLAとしても10倍になっているので、メリットとしては大きい
- コスト試算は少し計算が面倒ではあるが、従来の手法と比較してRIがないといった点から高額になる
- サーバーレスのモニタリングとしては、コストやデータの送受信量を計測する意味でも
ElastiCacheProcessingUnits
メトリクスが有効