amazon elasticache - awsマイスターシリーズ
Post on 14-Jan-2015
11.521 Views
Preview:
DESCRIPTION
TRANSCRIPT
AWSマイスターシリーズ〜Amazon ElastiCache〜
2012年1月17日松尾康博( @understeer )ソリューションアーキテクト玉川憲 (@KenTamagawa)エバンジェリスト
ほぼ週刊AWSマイスターシリーズへようこそ!~GoToMeetingの使い方~
参加者は、自動的にミュートになっています
質問を投げることができます!
� GoToMeetingの仕組みを使って、随時書き込んでください
� ただし環境によっては、日本語の直接入力ができないので、
お手数ですが、テキストエディタ等に打ち込んでから、
貼り付けててください
� 最後のQ&Aの時間で、できるだけ回答させて頂きます
� 書き込んだ質問は、主催者にしか見えません
Twitterのハッシュタグは#jawsugでどうぞ
Copyright © 2012 Amazon Web Services
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/
アジェンダ
Amazon ElastiCache 概要
Memcached おさらい
Amazon ElastiCacheの紹介(本編)
� 機能・特徴紹介
� Memcachedとの共通点・違い
� デモ
� Tips
� FAQ
Q&A
Amazon ElastiCache概要
インメモリキャッシュサービス
� memcached1.4.5互換
� Management Console/CLI/APIから数分で設定・起動
� 複数のインスタンスタイプを選択可能
CloudWatch, SNSとの統合
� 各種メトリクスによる状態監視
� クラスタの状態変更通知 ( via SNS)
ACL
� アクセス元EC2のセキュリティグループと紐付け
ElastiCache アーキテクチャ
キーワード
� キャッシュセキュリティグループ
� キャッシュクラスター
� キャッシュノード
� キャッシュエンジン
� キャッシュパラメータグループ
メモリキャッシングとは
Copyright © 2012 Amazon Web Services
メモリキャッシングとは
目的
� アプリを高速化する手法の一つ
� 消えても良いデータを格納してDBアクセス・負荷を低減
� メモリにキャッシュしたデータを再利用することで高速化・負荷低減
用途
� クエリ結果を再利用 (DBサーバの負荷低減、高速化)
� 揮発性の高いデータを格納 (セッション情報管理)
� 複雑な計算結果を再利用 (APPサーバの負荷軽減)
Webアプリとメモリキャッシュ(DB)
典型的な構成
App RDBMS
1. クライアントからのリクエスト
2. Appサーバが、DBサーバに問い合わせ
3. DBサーバが結果を戻す
4. Appサーバがレスポンスをクライアントに返す
Webアプリとメモリキャッシュ(DB)
トラフィックが増えると・・・・
App RDBMS
5. Appサーバ,DBサーバをスケール6. 効果・効率・コスト的に?
App RDBMS
Webアプリとメモリキャッシュ(DB)
トラフィックの内訳を見てみると・・・・
App RDBMS
同じクエリが何度も実行されていることが多い
App RDBMS
Webアプリとメモリキャッシュ(DB)
同じクエリでDBに負荷をかけないよう、キャッシュに載せる
App RDBMS
App
memcached
memcached
Webアプリとメモリキャッシュ(DB)
参照時の操作
memcached
App RDBMS
memcached
最新データがあるか?
あるなら取得して完了
なければDBへクエリ
クエリ結果を取得
クエリ結果をキャッシュ
繰り返し
Webアプリとメモリキャッシュ(DB)
更新時の操作
App
RDBMS
Insert / Update
完了
更新データをキャッシュ用オブジェクトに変換
繰り返し
オブジェクト書き込み
memcachedオブジェクト書き込み
オブジェクト書き込み
Webアプリとメモリキャッシュ(セッション)
典型的な構成 1 (ファイル)
� PHPなど
� Appサーバが増えた際は、Stickey 等で制御 or NFS等で共有
� LBに依存
� ファイルI/Oが懸念
典型的な構成 2( APPサーバ内メモリ)
� Java(Servletコンテナ等)
� Appサーバが増えた際は、セッションレプリケーション等
� LBやServletコンテナに依存
� レプリケーションの負荷が懸念
典型的な構成 3 (DB)
� DBサーバの負荷・性能が懸念
Webアプリとメモリキャッシュ(セッション)
Memcachedを使った構成
� 複数のAppサーバで共有する空間
� 言語やフレームワークによっては多少の修正が必要
� LBに依存しない構成が可能
App
App
memcached
memcached
LB
メモリキャッシュの留意事項
システムの性質を考える
� 一般的なWebシステムは、参照:更新≒9:1
� 更新クエリの割合が大きいシステムでは効果薄
� キャッシュミス時のペナルティ対策(定期更新等)
� キャッシュ喪失時の対策も織り込む
• ログインし直し、DB負荷増、等への対策
キャッシュするデータの性質を考えてキャッシュする
� 有効期限の短いデータは不向き
� 参照頻度の低いデータは、メモリ効率が悪い
トランザクション・コヒーレンシを考える
� 一貫性が必要なデータは、慎重に設計・実装する
� DBより古いキャッシュを使わない工夫
memcached
Copyright © 2012 Amazon Web Services
Memcachedとは
インメモリ key-value ストアキャッシュサーバ
� 2003年にDanga Interactiveが開発(BSDライセンス)
� ブログサービス「Live Journal」の負荷対策用に作られたもの
� 多くのサイトで採用 (YouTube, Wikipedia, mixi, etc. )
特徴
� KVSのデファクトスタンダードプロトコル
• 非XMLのシンプルな構造
• Telnetでも操作可能
� 主要機能のみのシンプルな機能
• アクセス制御などのセキュリティ機能無し
• マスタノード、シャーディング、レプリケーションなどの機構無し
� データ削除は明示的、期限、LRUの3方式
Memcachedのクラスタ化について
単一キャッシュノード構成の課題
� 障害時のデータ喪失による影響は少ない(はず)
� ただしDBが過負荷になり、システムスローダウンやダウンも
� キャッシュ容量の増加が容易ではない
App RDBMS
App
memcached
Memcachedのクラスタ化(レプリケーション)
複製(レプリケーション)アプローチ
� replicached 等の実装あり
� 特定のノードに障害が発生してもキャッシュ全体は有効
� キャッシュノード間の複製コストや切り替え機構等が考慮点
� ノード数を増加させても総キャッシュ容量は増えない
App RDBMS
App
memcached
memcached
Memcachedのクラスタ化(Sharding)
シャーディングアプローチ
� ノード数をもとにした計算でストア先ノードを振り分ける
� ノード障害時のキャッシュ喪失が限定的
� ノード追加で総キャッシュ容量が増える
� ノード数変更時のリバランスコストが大きい(ほぼキャッシュし直し)
memcached
memcached
ノードリスト
シャーディング
ライブラリ
APPサーバ
Memcachedのクラスタ化(Consistent Hashing)
Consistent Hashingの特徴
� Appサーバ側でConsistent Hashingアルゴリズムで振り分ける
� ノード障害時のキャッシュ喪失が限定的
� ノード追加で総キャッシュ容量が増える
� ノード数変更時のリバランスコストが限定的ノード数変更時のリバランスコストが限定的ノード数変更時のリバランスコストが限定的ノード数変更時のリバランスコストが限定的
memcached
memcached
ノードリスト
CHアルゴリズム
ライブラリ
APPサーバ
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
Memcachedのクラスタ化 まとめ
現実的なクラスタを組むために
� ノード数が変化することを想定してConsistent Hashingを使う
� 障害の影響を低減させるため適切なスケールアウトを行う
� 障害発生頻度と影響とのトレードオフを考慮してノード数を決める
memcachedmemcached
memcached
memcached
memcached
memcached
障害の影響
障害の発生頻度
Amazon ElastiCache
Copyright © 2012 Amazon Web Services
Amazon ElastiCache概要(再掲)
インストール、構築不要の memcachedクラスタ
� Management Console/CLI/APIから数分で起動
� 各種インスタンスタイプを選択可能
サポートしているプロトコル
� Memcached 1.4.5互換
CloudWatch, SNSとの統合
� 各種メトリクスによる状態監視
� クラスタの状態変更通知 ( via SNS)
ACL
� フロントエンドのEC2のセキュリティグループからのみリクエストを受けつける
ElastiCache アーキテクチャ(再掲)
キーワード
� キャッシュセキュリティグループ
� キャッシュクラスター
� キャッシュノード
� キャッシュエンジン
� キャッシュパラメータグループ
Memcachedとの共通点
プロトコル
� Memcached 1.4.5 互換
� Telnetアクセスも同様
クライアントライブラリ,tool等
� Memcached1.4.5用のツール・ライブラリ
サーバプロセス
� 主要な設定パラメータ
� 主要な統計情報
ノウハウ・Tips
� クラスタ・分散キャッシュ・冗長化などの手法・ツール類
� アプリケーションの設計・アルゴリズム
� 監視すべきポイント
Memcachedとの相違点
導入
� ノード用のOSインストール不要
� memecachedインストール不要
� 複数memcachedのコンフィグファイル配布・同期不要
� Management Console/CLI/APIから数分で起動・ノード追加
運用
� 監視の作り込み不要
� ノードリカバリ、パッチ適用が自動
� Firewallの用意、詳細設定不要
AWS独自の用語・概念
� セキュリティ関連
� クラスタ関連
ElastiCacheのメリット
初期構築・運用の手間低減
� ノード構築、memecachedインストール、コンフィグ同期、監視作り込みなどの手間からの開放
� 監視、リカバリ、パッチ適用、ノード追加作業
AWSならではの特徴
� 初期費用無料
� 従量課金
� スケールアップ、スケールアウトが容易
AWSサービスとの統合
� EC2のセキュリティグループとの連携
� 各種ノードタイプを選択可能(スケールアップ)
料金
インスタンスタイプ 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
(参考)ギガバイト単価
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
利用手順
Copyright © 2012 Amazon Web Services
構築手順
Management Consoleでクラスタ作成
接続元EC2のSecurity Groupと紐付け
Endpointのリストを確認
EC2からTelnetで接続確認
CloudWatchでメトリクス確認
構築手順:Management Consoleで作成
3
1
2
基本パラメータを設定• キャッシュクラスタ名• キャッシュノードタイプ• ノード数• 待ち受けポート番号• ゾーン
Management Consoleの ElastiCacheタブにて、Lauch Cache Cluster Wizardを選択
構築手順:Management Consoleで作成
4
キャッシュクラスタ用のSecurity Group、Parameter Groupを設定して起動
しばらくするとキャッシュクラスタが起動し、Management Consoleに表示される
構築手順:Security Groupの紐付け
5
6
この手順を忘れると、EC2インスタンスからアクセス出来ません
Cache Security Groupsメニューを選択
アクセス元EC2インスタンスのSecurity Group名、AWSアカウントID(12桁)を指定して、セキュリティグループを紐付ける
構築手順:キャッシュノードの確認
1
2
3
クラスタに属するノードのエンドポイント(接続先)一覧を確認
クラスタに属するノードの情報を確認
構築手順 : 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つに接続
構築手順:CloudWatchで確認1
2
3
ElastiCacheのメトリクスを選択
利用手順(例:PHP)
EC2側の環境構築
PHPで接続
AWS SDK for PHP で、Endpointのリストを取得
Consistent Hashingで接続
利用手順: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
利用手順: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
利用手順:EC2側の環境構築
AWS SDK for PHPでEndpointのリストを動的に取得
利用手順:EC2側の環境構築
キャッシュクラスタにConsistent Hashingで接続、格納
FAQ
Copyright © 2012 Amazon Web Services
構成について
Q. 何台のクラスタ構成にすればよいか?
A. クラスタノードの障害に伴うキャッシュミスによるコスト(DB負荷上昇、応答速度低下)を低減するには、台数多めが望ましい。
Q. クラスタノードの上限はあるか?
A. 上限あり
� 1アカウントあたり、20ノード
� 他サービスと同様に緩和申請で上限を引き上げ可能
Q. AWS以外のサーバからアクセスできるか?
A. NO.アクセス元EC2のSecurity Groupと紐付けるため。
� 現状では、現状では、現状では、現状では、VPC内の内の内の内のEC2からはアクセス不可からはアクセス不可からはアクセス不可からはアクセス不可
構成について
Q. アベイラビリティゾーンをまたいだクラスタは作れるか?
A. No. アベイラビリティゾーンごとにクラスタを作る必要あり。
Q. 負荷やメモリ利用量に応じて自動でノード追加可能か?
A. 未対応。ただし、CloudWatchや自前で監視の仕組みを入れて、条件に応じてAPIやCLIで動的にノード追加することは可能
� ただし、アプリケーションがノード数変更を考慮している事が前提
Q. ノードのパラメータ設定内容は?
A. ノードタイプごとに最適値が設定済み
� APIでのみ変更可能。
運用について
Q. クラスタノード障害時の振る舞いは?
A. エンドポイントのDNS名は固定で、ノードが自動に置き換わる
� 注1) IPは変わる可能性があるので使用しない
� 注2) キャッシュは空になるので、再作成は必要
Q. ノード障害のイベントを検知するには?
A. SNS経由で、ノード障害などのイベント通知が可能
� クラスタの設定で、定義済みのNotification Topic ARNを設定
Q. ノード異常時(deleting,creating時)の挙動は?
� APIでnodelistを取得できるが、実際には接続不可
� クライアント側でハンドリングする
運用について
Q. クラスタノード障害時の振る舞いは?
A. エンドポイントのDNS名は固定で、ノードが自動に置き換わる
� 注1) IPは変わる可能性があるので使用しない
� 注2) キャッシュは空になるので、再作成は必要
Q. 監視内容は?
A. CloudWatchのメトリクスを参照
� 基本は、statsで取れる項目
Q. 自動バージョンアップの方針
A. マイナーバージョンアップのみ、自動アップデートあり
� メジャーバージョンアップは手動
追加情報
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
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)
Q & A
Copyright © 2012 Amazon Web Services
Webセミナーセミナーセミナーセミナーほぼ週刊ほぼ週刊ほぼ週刊ほぼ週刊AWSマイスターシリーズ(全マイスターシリーズ(全マイスターシリーズ(全マイスターシリーズ(全13回)回)回)回)
http://aws.amazon.com/jp/aws-meister/資料一覧
ご参加ありがとうございました
マイスターシリーズ終わり???今年もやります!!
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
top related