57
AWSマイスターシリーズ 〜Amazon ElastiCache〜 2012年1月17日 松尾康博( @understeer ) ソリューションアーキテクト 玉川憲 (@KenTamagawa) エバンジェリスト

Amazon ElastiCache - AWSマイスターシリーズ

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Amazon ElastiCache - AWSマイスターシリーズ

AWSマイスターシリーズ〜Amazon ElastiCache〜

2012年1月17日松尾康博( @understeer )ソリューションアーキテクト玉川憲 (@KenTamagawa)エバンジェリスト

Page 2: Amazon ElastiCache - AWSマイスターシリーズ

ほぼ週刊AWSマイスターシリーズへようこそ!~GoToMeetingの使い方~

参加者は、自動的にミュートになっています

質問を投げることができます!

� GoToMeetingの仕組みを使って、随時書き込んでください

� ただし環境によっては、日本語の直接入力ができないので、

お手数ですが、テキストエディタ等に打ち込んでから、

貼り付けててください

� 最後のQ&Aの時間で、できるだけ回答させて頂きます

� 書き込んだ質問は、主催者にしか見えません

Twitterのハッシュタグは#jawsugでどうぞ

Copyright © 2012 Amazon Web Services

Page 3: Amazon ElastiCache - AWSマイスターシリーズ

Webセミナーセミナーセミナーセミナーほぼ週刊ほぼ週刊ほぼ週刊ほぼ週刊AWSマイスターシリーズマイスターシリーズマイスターシリーズマイスターシリーズ (全(全(全(全13回)回)回)回)

� 11/9 第7回 Amazon VPC

� 11/16 第8回 Amazon RDS

� 11/22 第9回 AWS Elastic Beanstalk

� 11/30 第10回 Amazon Elastic MapReduce

� 12/7 第11回 Amazon SES

� 12/15 第12回 SimpleDB, SQS, SNS

� 1/17 第13回 Amazon ElastiCache (最終回!)

資料一覧

http://aws.amazon.com/jp/aws-meister/

Page 4: Amazon ElastiCache - AWSマイスターシリーズ

アジェンダ

Amazon ElastiCache 概要

Memcached おさらい

Amazon ElastiCacheの紹介(本編)

� 機能・特徴紹介

� Memcachedとの共通点・違い

� デモ

� Tips

� FAQ

Q&A

Page 5: Amazon ElastiCache - AWSマイスターシリーズ

Amazon ElastiCache概要

インメモリキャッシュサービス

� memcached1.4.5互換

� Management Console/CLI/APIから数分で設定・起動

� 複数のインスタンスタイプを選択可能

CloudWatch, SNSとの統合

� 各種メトリクスによる状態監視

� クラスタの状態変更通知 ( via SNS)

ACL

� アクセス元EC2のセキュリティグループと紐付け

Page 6: Amazon ElastiCache - AWSマイスターシリーズ

ElastiCache アーキテクチャ

キーワード

� キャッシュセキュリティグループ

� キャッシュクラスター

� キャッシュノード

� キャッシュエンジン

� キャッシュパラメータグループ

Page 7: Amazon ElastiCache - AWSマイスターシリーズ

メモリキャッシングとは

Copyright © 2012 Amazon Web Services

Page 8: Amazon ElastiCache - AWSマイスターシリーズ

メモリキャッシングとは

目的

� アプリを高速化する手法の一つ

� 消えても良いデータを格納してDBアクセス・負荷を低減

� メモリにキャッシュしたデータを再利用することで高速化・負荷低減

用途

� クエリ結果を再利用 (DBサーバの負荷低減、高速化)

� 揮発性の高いデータを格納 (セッション情報管理)

� 複雑な計算結果を再利用 (APPサーバの負荷軽減)

Page 9: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(DB)

典型的な構成

App RDBMS

1. クライアントからのリクエスト

2. Appサーバが、DBサーバに問い合わせ

3. DBサーバが結果を戻す

4. Appサーバがレスポンスをクライアントに返す

Page 10: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(DB)

トラフィックが増えると・・・・

App RDBMS

5. Appサーバ,DBサーバをスケール6. 効果・効率・コスト的に?

App RDBMS

Page 11: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(DB)

トラフィックの内訳を見てみると・・・・

App RDBMS

同じクエリが何度も実行されていることが多い

App RDBMS

Page 12: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(DB)

同じクエリでDBに負荷をかけないよう、キャッシュに載せる

App RDBMS

App

memcached

memcached

Page 13: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(DB)

参照時の操作

memcached

App RDBMS

memcached

最新データがあるか?

あるなら取得して完了

なければDBへクエリ

クエリ結果を取得

クエリ結果をキャッシュ

繰り返し

Page 14: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(DB)

更新時の操作

App

RDBMS

Insert / Update

完了

更新データをキャッシュ用オブジェクトに変換

繰り返し

オブジェクト書き込み

memcachedオブジェクト書き込み

オブジェクト書き込み

Page 15: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(セッション)

典型的な構成 1 (ファイル)

� PHPなど

� Appサーバが増えた際は、Stickey 等で制御 or NFS等で共有

� LBに依存

� ファイルI/Oが懸念

典型的な構成 2( APPサーバ内メモリ)

� Java(Servletコンテナ等)

� Appサーバが増えた際は、セッションレプリケーション等

� LBやServletコンテナに依存

� レプリケーションの負荷が懸念

典型的な構成 3 (DB)

� DBサーバの負荷・性能が懸念

Page 16: Amazon ElastiCache - AWSマイスターシリーズ

Webアプリとメモリキャッシュ(セッション)

Memcachedを使った構成

� 複数のAppサーバで共有する空間

� 言語やフレームワークによっては多少の修正が必要

� LBに依存しない構成が可能

App

App

memcached

memcached

LB

Page 17: Amazon ElastiCache - AWSマイスターシリーズ

メモリキャッシュの留意事項

システムの性質を考える

� 一般的なWebシステムは、参照:更新≒9:1

� 更新クエリの割合が大きいシステムでは効果薄

� キャッシュミス時のペナルティ対策(定期更新等)

� キャッシュ喪失時の対策も織り込む

• ログインし直し、DB負荷増、等への対策

キャッシュするデータの性質を考えてキャッシュする

� 有効期限の短いデータは不向き

� 参照頻度の低いデータは、メモリ効率が悪い

トランザクション・コヒーレンシを考える

� 一貫性が必要なデータは、慎重に設計・実装する

� DBより古いキャッシュを使わない工夫

Page 18: Amazon ElastiCache - AWSマイスターシリーズ

memcached

Copyright © 2012 Amazon Web Services

Page 19: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedとは

インメモリ key-value ストアキャッシュサーバ

� 2003年にDanga Interactiveが開発(BSDライセンス)

� ブログサービス「Live Journal」の負荷対策用に作られたもの

� 多くのサイトで採用 (YouTube, Wikipedia, mixi, etc. )

特徴

� KVSのデファクトスタンダードプロトコル

• 非XMLのシンプルな構造

• Telnetでも操作可能

� 主要機能のみのシンプルな機能

• アクセス制御などのセキュリティ機能無し

• マスタノード、シャーディング、レプリケーションなどの機構無し

� データ削除は明示的、期限、LRUの3方式

Page 20: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedのクラスタ化について

単一キャッシュノード構成の課題

� 障害時のデータ喪失による影響は少ない(はず)

� ただしDBが過負荷になり、システムスローダウンやダウンも

� キャッシュ容量の増加が容易ではない

App RDBMS

App

memcached

Page 21: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedのクラスタ化(レプリケーション)

複製(レプリケーション)アプローチ

� replicached 等の実装あり

� 特定のノードに障害が発生してもキャッシュ全体は有効

� キャッシュノード間の複製コストや切り替え機構等が考慮点

� ノード数を増加させても総キャッシュ容量は増えない

App RDBMS

App

memcached

memcached

Page 22: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedのクラスタ化(Sharding)

シャーディングアプローチ

� ノード数をもとにした計算でストア先ノードを振り分ける

� ノード障害時のキャッシュ喪失が限定的

� ノード追加で総キャッシュ容量が増える

� ノード数変更時のリバランスコストが大きい(ほぼキャッシュし直し)

memcached

memcached

ノードリスト

シャーディング

ライブラリ

APPサーバ

Page 23: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedのクラスタ化(Consistent Hashing)

Consistent Hashingの特徴

� Appサーバ側でConsistent Hashingアルゴリズムで振り分ける

� ノード障害時のキャッシュ喪失が限定的

� ノード追加で総キャッシュ容量が増える

� ノード数変更時のリバランスコストが限定的ノード数変更時のリバランスコストが限定的ノード数変更時のリバランスコストが限定的ノード数変更時のリバランスコストが限定的

memcached

memcached

ノードリスト

CHアルゴリズム

ライブラリ

APPサーバ

Page 24: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedのクラスタ化(Consistent Hashing)

Consistent Hashingを使う

� ketama ライブラリ(libketama)が有名

� PHPなら、Libketama+memcachedで

� Ruby用クライアントライブラリは1.6以降で対応

� その他、各種実装あり

参考

� Consistent hashing - Wikipedia, the free encyclopedia

� http://en.wikipedia.org/wiki/Consistent_hashing

� memcachedを知り尽くす:第4回 memcachedの分散アルゴリズム|gihyo.jp … 技術評論社

� http://gihyo.jp/dev/feature/01/memcached/0004?page=3

Page 25: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedのクラスタ化 まとめ

現実的なクラスタを組むために

� ノード数が変化することを想定してConsistent Hashingを使う

� 障害の影響を低減させるため適切なスケールアウトを行う

� 障害発生頻度と影響とのトレードオフを考慮してノード数を決める

memcachedmemcached

memcached

memcached

memcached

memcached

障害の影響

障害の発生頻度

Page 26: Amazon ElastiCache - AWSマイスターシリーズ

Amazon ElastiCache

Copyright © 2012 Amazon Web Services

Page 27: Amazon ElastiCache - AWSマイスターシリーズ

Amazon ElastiCache概要(再掲)

インストール、構築不要の memcachedクラスタ

� Management Console/CLI/APIから数分で起動

� 各種インスタンスタイプを選択可能

サポートしているプロトコル

� Memcached 1.4.5互換

CloudWatch, SNSとの統合

� 各種メトリクスによる状態監視

� クラスタの状態変更通知 ( via SNS)

ACL

� フロントエンドのEC2のセキュリティグループからのみリクエストを受けつける

Page 28: Amazon ElastiCache - AWSマイスターシリーズ

ElastiCache アーキテクチャ(再掲)

キーワード

� キャッシュセキュリティグループ

� キャッシュクラスター

� キャッシュノード

� キャッシュエンジン

� キャッシュパラメータグループ

Page 29: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedとの共通点

プロトコル

� Memcached 1.4.5 互換

� Telnetアクセスも同様

クライアントライブラリ,tool等

� Memcached1.4.5用のツール・ライブラリ

サーバプロセス

� 主要な設定パラメータ

� 主要な統計情報

ノウハウ・Tips

� クラスタ・分散キャッシュ・冗長化などの手法・ツール類

� アプリケーションの設計・アルゴリズム

� 監視すべきポイント

Page 30: Amazon ElastiCache - AWSマイスターシリーズ

Memcachedとの相違点

導入

� ノード用のOSインストール不要

� memecachedインストール不要

� 複数memcachedのコンフィグファイル配布・同期不要

� Management Console/CLI/APIから数分で起動・ノード追加

運用

� 監視の作り込み不要

� ノードリカバリ、パッチ適用が自動

� Firewallの用意、詳細設定不要

AWS独自の用語・概念

� セキュリティ関連

� クラスタ関連

Page 31: Amazon ElastiCache - AWSマイスターシリーズ

ElastiCacheのメリット

初期構築・運用の手間低減

� ノード構築、memecachedインストール、コンフィグ同期、監視作り込みなどの手間からの開放

� 監視、リカバリ、パッチ適用、ノード追加作業

AWSならではの特徴

� 初期費用無料

� 従量課金

� スケールアップ、スケールアウトが容易

AWSサービスとの統合

� EC2のセキュリティグループとの連携

� 各種ノードタイプを選択可能(スケールアップ)

Page 32: Amazon ElastiCache - AWSマイスターシリーズ

料金

インスタンスタイプ API名 ECU I/O メモリ 料金

スタンダードスモール cache.m1.small 1 std 1.3GB $0.11

スタンダードラージ cache.m1.large 4 high 7.1GB $0.45

スタンダードエクストララージ cache.m1.xlarge 8 high 14.6GB $0.90

ハイメモリエクストララージ cache.m2.xlarge 6.5 high 16.7GB $0.67

ハイメモリダブルエクストララージ cache.m2.2xlarge 13 high 33.8GB $1.34

ハイメモリクアドラプルエクストララージ cache.m2.4xlarge 26 high 68GB $2.68

ハイCPU エクストララージ cache.c1.xlarge 26 high 6.6GB $0.90

同一 Availability Zone内の EC2⇒ElastiCache は無料無料無料無料Availability Zoneをまたぐ場合は、別途データ転送料 ($0.01/GB)

https://aws.amazon.com/jp/elasticache/#pricing

Page 33: Amazon ElastiCache - AWSマイスターシリーズ

(参考)ギガバイト単価

https://aws.amazon.com/jp/elasticache/#pricing

インスタンスタイプ API名 料金($/h) メモリ(GB) GB単価($/GB)

スタンダード スモール cache.m1.small 0.11 1.3 0.08462

スタンダード ラージ cache.m1.large 0.45 7.1 0.06338

スタンダード エクストララージ cache.m1.xlarge 0.9 14.6 0.06164

ハイメモリ エクストララージ cache.m2.xlarge 0.67 16.7 0.04012

ハイメモリ ダブルエクストララージ cache.m2.2xlarge 1.34 33.8 0.03964

ハイメモリ クアドラプルエクストララージ cache.m2.4xlarge 2.68 68 0.03941

ハイCPU エクストララージ cache.c1.xlarge 0.9 6.6 0.13636

Page 34: Amazon ElastiCache - AWSマイスターシリーズ

利用手順

Copyright © 2012 Amazon Web Services

Page 35: Amazon ElastiCache - AWSマイスターシリーズ

構築手順

Management Consoleでクラスタ作成

接続元EC2のSecurity Groupと紐付け

Endpointのリストを確認

EC2からTelnetで接続確認

CloudWatchでメトリクス確認

Page 36: Amazon ElastiCache - AWSマイスターシリーズ

構築手順:Management Consoleで作成

3

1

2

基本パラメータを設定• キャッシュクラスタ名• キャッシュノードタイプ• ノード数• 待ち受けポート番号• ゾーン

Management Consoleの ElastiCacheタブにて、Lauch Cache Cluster Wizardを選択

Page 37: Amazon ElastiCache - AWSマイスターシリーズ

構築手順:Management Consoleで作成

4

キャッシュクラスタ用のSecurity Group、Parameter Groupを設定して起動

しばらくするとキャッシュクラスタが起動し、Management Consoleに表示される

Page 38: Amazon ElastiCache - AWSマイスターシリーズ

構築手順:Security Groupの紐付け

5

6

この手順を忘れると、EC2インスタンスからアクセス出来ません

Cache Security Groupsメニューを選択

アクセス元EC2インスタンスのSecurity Group名、AWSアカウントID(12桁)を指定して、セキュリティグループを紐付ける

Page 39: Amazon ElastiCache - AWSマイスターシリーズ

構築手順:キャッシュノードの確認

1

2

3

クラスタに属するノードのエンドポイント(接続先)一覧を確認

クラスタに属するノードの情報を確認

Page 40: Amazon ElastiCache - AWSマイスターシリーズ

構築手順 : Telnet接続確認

$ telnet example..aa.001.apne1.cache.amazon.aws.com 11211Trying 10.xx.xx.xx...Connected to example.aa.001.apne1.cache.amazon.aws.com.Escape character is '^]'.statsSTAT pid 1STAT version 1.4.5---snip---STAT reclaimed 0ENDset key1 0 0 4testSTOREDget key1VALUE key1 0 4testENDquitConnection closed by foreign host.

【stats】コマンドノードの状態確認

【set】コマンドデータの格納例) key: key1, value:test

【get】コマンド格納されたデータの取得例) key: key1

【quit】コマンド切断

telnetでendpointの1つに接続

Page 41: Amazon ElastiCache - AWSマイスターシリーズ

構築手順:CloudWatchで確認1

2

3

ElastiCacheのメトリクスを選択

Page 42: Amazon ElastiCache - AWSマイスターシリーズ

利用手順(例:PHP)

EC2側の環境構築

PHPで接続

AWS SDK for PHP で、Endpointのリストを取得

Consistent Hashingで接続

Page 43: Amazon ElastiCache - AWSマイスターシリーズ

利用手順:EC2側の環境構築

必要なライブラリのインストール(Amazon Linuxの例)

Ketamaの取得からインストールまで

AWS SDK for PHPインストール、セットアップ

� http://aws.amazon.com/articles/4261

$ sudo yum –y install subversion php-devl php-pear gcc make libmemcachedlibmemcached-devel php-pecl-memcached

$ svn co svn://svn.audioscrobbler.net/misc/ketama/$ cd ketama/libketama$ make$ sudo make install$ sudo ldconfig

Page 44: Amazon ElastiCache - AWSマイスターシリーズ

利用手順:EC2側の環境構築

PHP(CLI)で接続

$ php test.phpkey:106:40:43 is stored to example.mayg1j.0001.apne1.cache.amazonaws.com val=1 code=0key:206:40:43 is stored to example.mayg1j.0001.apne1.cache.amazonaws.com val=1 code=0

Page 45: Amazon ElastiCache - AWSマイスターシリーズ

利用手順:EC2側の環境構築

AWS SDK for PHPでEndpointのリストを動的に取得

Page 46: Amazon ElastiCache - AWSマイスターシリーズ

利用手順:EC2側の環境構築

キャッシュクラスタにConsistent Hashingで接続、格納

Page 47: Amazon ElastiCache - AWSマイスターシリーズ

FAQ

Copyright © 2012 Amazon Web Services

Page 48: Amazon ElastiCache - AWSマイスターシリーズ

構成について

Q. 何台のクラスタ構成にすればよいか?

A. クラスタノードの障害に伴うキャッシュミスによるコスト(DB負荷上昇、応答速度低下)を低減するには、台数多めが望ましい。

Q. クラスタノードの上限はあるか?

A. 上限あり

� 1アカウントあたり、20ノード

� 他サービスと同様に緩和申請で上限を引き上げ可能

Q. AWS以外のサーバからアクセスできるか?

A. NO.アクセス元EC2のSecurity Groupと紐付けるため。

� 現状では、現状では、現状では、現状では、VPC内の内の内の内のEC2からはアクセス不可からはアクセス不可からはアクセス不可からはアクセス不可

Page 49: Amazon ElastiCache - AWSマイスターシリーズ

構成について

Q. アベイラビリティゾーンをまたいだクラスタは作れるか?

A. No. アベイラビリティゾーンごとにクラスタを作る必要あり。

Q. 負荷やメモリ利用量に応じて自動でノード追加可能か?

A. 未対応。ただし、CloudWatchや自前で監視の仕組みを入れて、条件に応じてAPIやCLIで動的にノード追加することは可能

� ただし、アプリケーションがノード数変更を考慮している事が前提

Q. ノードのパラメータ設定内容は?

A. ノードタイプごとに最適値が設定済み

� APIでのみ変更可能。

Page 50: Amazon ElastiCache - AWSマイスターシリーズ

運用について

Q. クラスタノード障害時の振る舞いは?

A. エンドポイントのDNS名は固定で、ノードが自動に置き換わる

� 注1) IPは変わる可能性があるので使用しない

� 注2) キャッシュは空になるので、再作成は必要

Q. ノード障害のイベントを検知するには?

A. SNS経由で、ノード障害などのイベント通知が可能

� クラスタの設定で、定義済みのNotification Topic ARNを設定

Q. ノード異常時(deleting,creating時)の挙動は?

� APIでnodelistを取得できるが、実際には接続不可

� クライアント側でハンドリングする

Page 51: Amazon ElastiCache - AWSマイスターシリーズ

運用について

Q. クラスタノード障害時の振る舞いは?

A. エンドポイントのDNS名は固定で、ノードが自動に置き換わる

� 注1) IPは変わる可能性があるので使用しない

� 注2) キャッシュは空になるので、再作成は必要

Q. 監視内容は?

A. CloudWatchのメトリクスを参照

� 基本は、statsで取れる項目

Q. 自動バージョンアップの方針

A. マイナーバージョンアップのみ、自動アップデートあり

� メジャーバージョンアップは手動

Page 52: Amazon ElastiCache - AWSマイスターシリーズ

追加情報

Amazon ElastiCache

� https://aws.amazon.com/jp/elasticache/

Blog

� http://aws.typepad.com/aws_japan/2011/08/amazon-elasticache-distributed-in-memory-caching.html

� FAQ

� http://aws.amazon.com/jp/elasticache/faqs/

� 料金

� http://aws.amazon.com/jp/elasticache/pricing/

Memcached

� http://memcached.org/

� http://ja.wikipedia.org/wiki/Memcached

Page 53: Amazon ElastiCache - AWSマイスターシリーズ

AWSプレミアムサポートアーキテクチャ設計に関するガイダンス、ベストプラクティスも日本語でご案内できますaws.amazon.com/jp/premiumsupport/

Copyright © 2012 Amazon Web Services

ブロンズブロンズブロンズブロンズ シルバーシルバーシルバーシルバー ゴールドゴールドゴールドゴールド プラチナプラチナプラチナプラチナ

初回応答時間初回応答時間初回応答時間初回応答時間 12時間 4時間 1時間 15分

サポート連絡先サポート連絡先サポート連絡先サポート連絡先 1人 2人 3人 無制限

24/365対応対応対応対応 なし なし あり あり

TEL可能可能可能可能 不可 不可 可能 可能

専任スタッフ専任スタッフ専任スタッフ専任スタッフ なし なし なし あり

特別サポート特別サポート特別サポート特別サポート なし なし なし あり

料金料金料金料金 $49AWS利用総額の

5%

AWS利用総額の$0~$10K: 10%$10K~$80K: 7%$80K~: 5%(最低$400)

AWS利用総額の10%

(最低$15K)

Page 54: Amazon ElastiCache - AWSマイスターシリーズ

Q & A

Copyright © 2012 Amazon Web Services

Page 55: Amazon ElastiCache - AWSマイスターシリーズ

Webセミナーセミナーセミナーセミナーほぼ週刊ほぼ週刊ほぼ週刊ほぼ週刊AWSマイスターシリーズ(全マイスターシリーズ(全マイスターシリーズ(全マイスターシリーズ(全13回)回)回)回)

http://aws.amazon.com/jp/aws-meister/資料一覧

ご参加ありがとうございました

Page 56: Amazon ElastiCache - AWSマイスターシリーズ

マイスターシリーズ終わり???今年もやります!!

Page 57: Amazon ElastiCache - AWSマイスターシリーズ

Webセミナーセミナーセミナーセミナーほぼ週刊ほぼ週刊ほぼ週刊ほぼ週刊AWSマイスターシリーズマイスターシリーズマイスターシリーズマイスターシリーズ

� 昨年のマイスターシリーズを最新版にアップデート!

� 新コンテンツ、新スピーカーも登場!

スケジュール(予定)

� 1/23 第1回 Amazon EC2 & EBS

� 1/30 第2回 IAM & Consolidated Billing

� 2/6 第3回 AWS Direct Connect (new!!)

� 2/20 第4回 AWS CloudFormation

http://aws.amazon.com/jp/event_schedule/申し込みサイト

Reloaded