Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Amazon ElastiCacheのはじめ方

17,033 views

Published on

2016/03/29に開催した「アプリケーション高速化のためのキャッシュ活用」の講演資料です。

Published in: Technology
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2ZDZFYj ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ♥♥♥ http://bit.ly/2ZDZFYj ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Amazon ElastiCacheのはじめ方

  1. 1. ms μs
  2. 2. Memcached
  3. 3. NoSQL
  4. 4. NoSQL SQL
  5. 5. Power, HVAC, net Rack & stack Server maintenance OS patches DB s/w patches Database backups Scaling High availability DB s/w installs OS installation you App optimization
  6. 6. Power, HVAC, net Rack & stack Server maintenance OS patches DB s/w patches Database backups Scaling High availability DB s/w installs OS installation you App optimization
  7. 7. Power, HVAC, net Rack & stack Server maintenance OS patches DB s/w patches Database backups Scaling High availability DB s/w installs OS installation you App optimization
  8. 8. OS patches DB s/w patches Database backups Scaling High availability DB s/w installs you App optimization Power, HVAC, net Rack & stack Server maintenance OS installation
  9. 9. Power, HVAC, net Rack & stack Server maintenance OS patches DB s/w patches Database backups App optimization High availability DB s/w installs OS installation you Scaling
  10. 10. http://redis.io/commands strings, lists, hashes, sets, sorted sets, bitmaps, HyperLogLogs ACID対応のトランザクション Snapshots か append-only log
  11. 11. 起動
  12. 12. これ以外のサブネット、セキュリティおよ びパラメータグループの設定は既に行って いるとします... Choose: • Version • Port • Parameter group • Multi-AZ & replication* • Cluster name • Node type • # of Nodes (or replicas) • S3 backup location* Choose: • Subnet group • Availability Zones • Security group • Enable backups* • Maintenance window • SNS topic *redis オプション Select Engine:
  13. 13. aws elasticache create-cache-cluster ¥ --cache-cluster-id mycache ¥ --engine redis ¥ --cache-node-type cache.m3.medium ¥ --num-cache-nodes 1 "Resources" : { "CacheCluster" : { "Type": "AWS::ElastiCache::CacheCluster", "Properties": { "CacheNodeType" : { "Ref" : "CacheNodeType" }, "CacheSecurityGroupNames" : [ { "Ref" : "CacheSecurityGroup" } ], "Engine" : "memcached", "NumCacheNodes" : { "Ref" : "NumberOfCacheNodes" } } }
  14. 14. mycache-002.hnou5c.0001.usw2.cache.amazonaws.com:6379 (redis) mycache.hnou5c.0002.usw2.cache.amazonaws.com:11211 (memcached) mycache.hnou5c.cfg.usw2.cache.amazonaws.com:11211 mycacherepgroup.hnou5c.ng.0001.usw2.cache.amazonaws.com:6379
  15. 15. Availability Zone #1 Availability Zone #2 “Primary Endpoint” を使用します ‘replica’ endpoints を 使用します *‘primary’ も使用可能 Auto-Failover  レプリ遅延のみでレ プリカ昇格  DNSの変更なし
  16. 16. クラスタへの接続
  17. 17. Language Library Ruby Redis-rb, Redis objects Python Redis-py Node.js node-redis C#/.NET ServiceStack.Redis PHP phpredis Java Jedis $telnet {primary-endpoint} 6379 >HSET hash mykey "mydata” :1 >HGET hash mykey $6 mydata #from redis.io download: $redis-cli -h {primary-endpoint} redis-cliをRedis単体と同様にサポート + command history + latency test + backups + その他もろもろ
  18. 18. // Java Example – requires http://aws.amazon.com/sdk-for-java AmazonElastiCache ec = new AmazonElastiCacheClient(); String replicationGroupName = "mycache"; // change to your Redis Replication Group Name String metadataURL = "http://169.254.169.254/latest/meta-data/placement/availability-zone"; String myAZ = new Scanner(new URL(metadataURL).openStream(), "UTF-8").useDelimiter("¥¥A").next(); ec.setRegion(Region.getRegion(Regions.US_WEST_2)); DescribeReplicationGroupsRequest rgrequest = new DescribeReplicationGroupsRequest() .withReplicationGroupId(replicationGroupName); DescribeReplicationGroupsResult rgresult = ec.describeReplicationGroups(rgrequest); for (ReplicationGroup rg : rgresult.getReplicationGroups()) { for (NodeGroup ng : rg.getNodeGroups()) { for (NodeGroupMember ngm : ng.getNodeGroupMembers()) { if (ngm.getCurrentRole().equals("replica") && ngm.getPreferredAvailabilityZone().equalsIgnoreCase(myAZ)) { System.out.println(ngm.getReadEndpoint().getAddress() + ":" + ngm.getReadEndpoint().getPort()); } } } } AZ確認 ElastiCache API 呼び出し
  19. 19. telnetは運用や、情報取得には便利ですが、 基本的にはアプリケーションからはクライア ントライブラリを使用して接続します Language Library Ruby Dalli, Dalli:ElastiCache Python Memcache Ring, django-elasticache Node.js node-memcached C#/.NET ElastiCache Auto Discovery Client PHP ElastiCache Auto Discovery Client Java ElastiCache Auto Discovery Client (based on spymemcached) $telnet {cfg-endpoint} 11211 >config get cluster $telnet {node1} 11211 >set mykey 0 60 6 >mydata STORED >get mykey VALUE mykey 0 6 mydata END
  20. 20. あくまでも自動検知情報をEndpointで検知するだけである点 CacheCluster Configuration Endpoint xxx.cfg.apne1.cache.amazonaws.com xxx.0001.apne1.cache.amazonaws.com xxx.0002.apne1.cache.amazonaws.com App 通常のクライアントライブラリ App Auto Discovery クライアントライブラリ • 確認コマンド ・Memchached 1.4.14以上 >Config get cluster ・Memchached 1.4.14未満 >get AmazonElastiCache:cluster
  21. 21. # PHP $server_endpoint = "mycache.z2vq55.cfg.usw2.cache.amazonaws.com"; $server_port = 11211; $cache = new Memcached(); $cache->setOption( Memcached::OPT_CLIENT_MODE, Memcached::DYNAMIC_CLIENT_MODE); # Set config endpoint as only server $cache->addServer($server_endpoint, $server_port); # Lib auto-locates nodes $cache->set("key", "value"); Configuration Endpointは常に使用
  22. 22. メモリ & モニタリング
  23. 23. >stats cachedump 1 100 ITEM mykey3 [4 b; 1414372065 s] >stats slabs STAT 1:used_chunks 1 >get mykey3 END >stats cachedump 1 100 END >stats slabs STAT 1:used_chunks 0 Example
  24. 24. Source: http://blog.elijaa.org/index.php?pages/phpMemcachedAdmin-Download Alarms
  25. 25. – 用量
  26. 26. セキュリティ
  27. 27. • ElastiCacheそのものは、認証や暗号化も基本機 能では持っていない • VPCのプライベートサブネットでElastiCacheク ラスターを起動する • ElastiCacheノードへのアクセスを制御するため 適切なセキュリティグループを適用する
  28. 28. コスト
  29. 29. • オンデマンド キャッシュノード – 初期費用無し、時間単位の従量課金モデル • リザーブド キャッシュノード – 予約金を支払うことで時間当たり価格を割引(最大 70%節減) • バックアップストレージ – Redis向け機能 – 各クラスタに対して1つのSnapshotは無料 • AZ間データ転送量 – ElastiCache間の通信は課金対象外 – EC2とElastiCache間でAZを超える場合 0.01 USD/GB が課金 時間あたりの料金(東京リージョン) ※2016年3月29日現在 Standard Cache Nodes - Current Generation cache.t2.micro $0.026 cache.t2.small $0.052 cache.t2.medium $0.104 cache.m3.medium $0.120 cache.m3.large $0.240 cache.m3.xlarge $0.485 cache.m3.2xlarge $0.965 Memory Optimized Cache Nodes - Current Generation cache.r3.large $0.273 cache.r3.xlarge $0.546 cache.r3.2xlarge $1.092 cache.r3.4xlarge $2.184 cache.r3.8xlarge $4.368
  30. 30. • 同スペックでのEC2とElastiCacheでのTCOの比較 – Multi-AZ構成時の通信料を削減可 – 運用コスト • バックアップ • Multi-AZ Failover構成 • Clluster構成(Node Auto Discovery, Replication環境) • バージョンアップ/スケールアップ オンデマンド価格(月額換算) 重度リザーブド価格(月額換算) インスタンスタイプ EC2 ElastiCache 差額 EC2 ElastiCache 差額 t2.small $ 29 $ 38 $ 9 $ 21 $ 28 $ 7 r3.large $ 146 $ 199 $ 53 $ 95 $ 130 $ 35
  31. 31. Redis運用時 の注意
  32. 32. の前に・・・
  33. 33. • Amazonが独自に拡張したRedis • 2015/9/28にリリース済! • ElasitiCacheのRedis 2.8.22 以上 • 改善点 • Swapの効率化 • 同期の効率化
  34. 34. • Redisにおける運用注意点 • Redis バックアップ時のSwap • Primary-Replica 同期 • 実行時間の長いコマンド • ElastiCacheのRedisにおける運用注意点 • DNS キャッシュ
  35. 35. copy-on-write
  36. 36. – パラメータグループ reserved-memory http://bit.ly/elasticache- bgsave
  37. 37. • Amazon Redisでは BGSAVE コマンドを Memory使用率が高い状況でも使えるように 改善 • Memory使用率が抑える事が可能
  38. 38. Master Replicas Amazon Redisでは改善(軽減)
  39. 39. • 高負荷時のPrimary-Replica 同期時 – 初期同 期時には書き込みを制限する (Update の同期 は継続して行います) • Replica 初期化 – フェイルオーバー実行時に PSYNC と 完全同期の適切な方を選択する様 になった • DISK Less構成時の primary-replica 同期速 度の向上
  40. 40. http://bit.ly/jvm-dns
  41. 41. New! “Primary Endpoint” を使用します ‘replica’ endpoints を 使用します *‘primary’ も使用可能

×