【AWS】 LambdaとRedisについて
Lambdaとは
プログラムを動かすためには実行する環境を準備する必要があります。
例えばJAVAのプログラムを動かすためにはJAVAをインストールしておく必要があります。
また、Webサイトのようにインターネットから利用できるようにするためにはWebサーバなども構築する必要があります。これらの実行環境を全く気にせず、行いたいプログラムだけを作成、配置して実行できるのがAWS Lambdaです。
【Lambdaの特徴】
何らかのイベントなどをトリガーとして自動的にプログラムコードが実行されることが挙げられます。AWS Lambdaで実行するコードは「Lambda 関数」と呼ばれており、開発言語は、「Node.js」、「Java」、「C#」、「Python」に対応しています。
具体的に開発できるプログラムは、以下のような処理が考えられます。
・Amazon S3へのファイルアップロード時にファイル処理。
・リアルタイムにストリーミングデータの処理。
・データベース内のデータ変更要求に対しての検証やフィルタリング処理。
・IoT環境などにおけるバックエンド処理。
Lambdaのメリット
■コストダウン
AWS Lambdaでは、プログラムを実行した回数と時間によって料金が発生します。待機時間の課金はありませんので、処理内容によっては大きなコストダウンが可能です。
■オートスケール
AWS Lambdaには自動スケーリング(オートスケール)機能があり、アクセス数や負荷に応じて自動的に利用するサーバーの数を増減します。
これによって、ユーザーは、サーバーを管理せずプログラムを実行することができます。
■サーバーの構築や管理が不要
サーバーの運用は提供側のAWSが行うので、サーバーの管理を行う必要がありません。
ソフトウェアのインストールやセキュリティの設定、ハードウェアのメンテナンスも不要で、サーバーの構築や運用の為のの工数を削減できます。
■高いセキュリティ
AWS Lambdaでは、ネットワーク上にサーバーが未公開で、プラットフォームの仕様も未公開です。その為、攻撃が受けにくくなっています。
また高可用性を実現している為のメンテナンスによる定期的なダウンタイムもありません。
■対応プログラム言語
AWS Lambdaは、「Java」、「Node.js」、「C#」、「Python」、「Go」、「PowerShell」、「Ruby」のプログラム言語に対応しています。
Redisとは
Redisとは、メモリ上でデータを管理するインメモリデータベースの一つで連想配列(キー・バリュー)、リスト、セットなどのデータ構造を扱える。いわゆるNoSQLデータベースの一つ。オープンソースソフトウェアとして公開されています。
【Redisの特徴】
・Redisはメモリ上で動作するキーバリューストア型のデータベースです。
全てのデータをメモリ上に格納し、各種アプリケーションからの高速アクセスを可能にし、
データ構造ストアでは複雑な型のデータを操作し、保存することができるのが特徴です。
また、リスト・マップ・セットなどのデータ構造をそのまま取り扱うことも可能です。
・Redisはマスター・スレーブ型レプリケーションに対応。
1つのマスターに対し複数のスレーブを作成し、スレーブはマスターとデータの同期を行いながら読み込みに応答します。
また、設定を行えば自動フェイルオーバーを行うことや複数のマスターから成るCluster構成をとることも可能です。
■Redisはメモリ上のデータを任意のタイミングでディスクに格納して保持する事が可能です。
それには以下2つの方法があります。
1.RDB(Database Backup File)
RDBは永続性は指定された間隔でデータセットの point-in-time をスナップショットとして保存する方法です。
取得が容易、読み込みが高速です。ただ、このRDBだと取得後からクラッシュまでの間にデータロスが発生し得るので注意が必要となります。
2.AOF(Append Only File)
AOF(Append Only File)は実行時の全コマンドを記録しておく方法です。
AOF永続性はサーバによって受信された全ての書き込み操作を記録します。
サーバの起動時に再生され、元のデータセットを再構築し、コマンドはRedisプロトコル自体と同じ形式を使用して追記のみの形式で記録されます。Redisはログがあまりに大きくなった時にそれをバックグラウンドで書き換えることが可能です。
また、AOFは障害発生前1秒ほどのデータのみが失われるだけですが、代わりに実行速度は著しく低下します。
Redisのメリット
■Webアプリケーションの高速化
RedisはインメモリのNoSQLデータベースである為、処理速度が高速です。
Webアプリケーションのセッションやキャッシュの一時的な保存先に指定することで、アクセス速度が飛躍的に向上します。
■データ型のサポート
各言語のクライアントで取得したデータはそのまま使用可能です。
・Strings(文字列型)
・Lists(リスト型)
・Sets(セット型)
・Hashes(ハッシュ型)
・Sorted sets(ソート済みセット型)