awsを用いたシステム設計の ベストプラクティス · aws...
TRANSCRIPT
クラウドデザインパターン‐AWSを用いたシステム設計の
ベストプラクティス‐
⾃⼰紹介
名前玉川憲
所属技術統括部⻑ / エバンジェリストアマゾンデータサービスジャパン株式会社
ID@KenTamagawa
好きなAWSサービスAmazon CloudSearch
インフラストラクチャは
ソフトウェアになった
$options = array('KeyName' => "User's Keys", 'InstanceType' => "m1.small");
$res = $ec2‐>run_instances("ami‐48aa4921", 1, 1, $options);
AWS のグローバルなインフラ
AWSのサービスお客様のアプリケーション
ライブラリ & SDKsJava, PHP, .NET,
Python, Ruby
Web インターフェース
Management Console
IDE プラグインEclipse
Visual Studio
デプロイと⾃動化AWS Elastic BeanstalkAWS CloudFormation
認証 & 請求AWS IAM
Identity FederationConsolidated Billing
モニタリングAmazon CloudWatch
スケーリングAuto Scale
ネットワーク&ルーティングAmazon VPC
Amazon Elastic LBAmazon Route 53
AWS Direct Connect
コンテンツ配信Amazon
CloudFront
メッセージングAmazon SNSAmazon SQS
分散処理Elastic
MapReduce
メール配信Amazon SES
コンピュータ処理Amazon EC2
ストレージAmazon S3
Amazon EBS
データベースAmazon RDS
Amazon SimpleDBAmazon DynamoDBAmazon Elasticache
AWS使いは、こんなこと良く⾔う
「万が⼀障害おきても、EIP付け替えればいいや。EBSスワップして⼀瞬で復帰って、すごい楽じゃないですか?」「EC2の前にELBを⽴てて、マルチAZに振り分け、最悪マルチリージョンして、LBRすれば?」「EC2にNFS⼊れて、エファーメラルディスクにrsyncすれば同期も楽でしょ?」
ネタが細かすぎて
伝わらない
選手権
AWS使いこなし度合と⼈数分布
人数
AWS使いこなし度合
「AWS使いこなし度合」と⼈数分布
人数
クラウドの良さをもっと知ってもらいたい
AWS使いこなし度合
やりたいこと
AWSクラウドを
より伝わりやすくしたい
既存ノウハウを伝えたい
(暗黙知→形式知化)
そこで
AWSクラウドデザインパターン[beta]
(略して、CDP)
AWS クラウドデザインパターンとは
AWSクラウドを使ったシステムアーキテクチャ設計を⾏う際に発⽣する、典型的な問題とそれに対する解決策・設計⽅法を、分かりやすく分類して、ノウハウとして利⽤できるように整理したものである。
パターン例
FloatingIPパターン
サーバ障害時やバージョンアップ時に、瞬時にサーバ切り替えを⾏いたい場合に利⽤
EIP(固定IPアドレス)の付け替えを⾏い、サーバを切り替える
例: Clone Serverパターン
仮想サーバ
Web Web
ロードバランサ
マシンイメージ
Web
①サーバ起動
仮想ディスク
マスタ
②ディスクを同期
例: Job Observerパターン
CDPカテゴリ (4⽉17⽇時点)基本パターンSnapshotStampScale UpOndemand Disk
可用性を高めるMulti‐ServerMulti‐DatacenterFloating IPDeep Health Check
動的コンテンツを処理Scale OutClone ServerNFS ShardingNFS ReplicaState SharingURL RewritingRewrite ProxyCache ProxyScheduled Scale Out
静的コンテンツを処理Web StorageDirect HostingPrivate DistributionCache DistributionRename Distribution
クラウドへデータをアップロードWrite ProxyStorage IndexDirect Object Upload
リレーショナル・データベースDB ReplicationRead ReplicaInmemory DB CacheSharding Write
バッチ処理Queuing ChainPriority QueueJob ObserverScheduled Autoscaling
運用保守BootstrapCloud DIStack DeploymentServer SwappingMonitoring IntegrationWeb Storage ArchiveHybrid Backup
ネットワーキングOnDemand NATBacknetFunctional FirewallOperational FirewallMulti Load BalancerWAF ProxyCloudHub
CDP48
Wikiでノウハウを共有
facebook.com/awscdp
パターンを活⽤した実装シナリオ
画像動画配信サイト -> Movable Type⼤量のユーザに配信したい
Eコマースサイト -> EC-CUBE可⽤性、耐障害性⾼くしたい
キャンペーンサイト -> WordPress突発的アクセス増加に耐えたい
AWSクラウドデザインパターン‐コンテンツ配信編‐
このシナリオの背景
雲の写真を載せるブログサイト開始はじめは個⼈的に開始
利⽤環境・ソフトウェア
Amazon Linux (64bit)Movable Type 5.12 (MTOS)Apache HTTP Server 2.2.21MySQL 5.1.52Perl 5.10.1
雲の写真を載せるブログサイト開始
課題
課題:ユーザー要望により動画を公開サイズ⼤きい、容量読めない
Web Storageパターンアクセス負荷の⾼い動画や画像コンテンツを、S3に逃がす
パターンを適⽤
まさかの⼤⼈気
雲マニア御⽤達のサイトへ
アクセス増により、アクセス出来ない状況に
EC2やELB導⼊は費⽤がかかる
Direct Hostingパターン
パターンを適⽤
まさかの海外展開
海外の雲マニアがサイトを発⾒海外有名ニュースサイトへの掲載が決定掲載までに海外からのアクセスへの対応が必要
Cache Distributionパターン
パターンの適⽤
ブログコンテンツ
動画・画像集
コンテンツ管理・コメント投稿
デザイン推移
動画⼈気
海外
AWSクラウドデザインパターン‐Eコマース編‐
このシナリオの背景
まさかの雲グッズ販売サイト開始
この実装シナリオの狙い
Eコマースサイトをとりあげ、可⽤性耐障害性
を⾼めるパターンを中⼼にAWSを使⽤した実装⽅法を解説
利⽤環境・ソフトウェア
EC-CUBEバージョン 2.11.4Amazon Linux (64bit)PHPバージョン PHP 5.3.8DBバージョン MySQL 5.1.52
ec.cloudesignpattern.org
EC-CUBEバージョン 2.11.4Amazon Linux (64bit)PHPバージョン PHP 5.3.8DBバージョン MySQL 5.1.52
初期のデザイン
EC‐CUBEApacheMySQL
課題
課題:利⽤ソフトのバージョンアップが必要
Floating IPパターンの適⽤後
EC2
テスト環境
④EIPを付け替える
EC2
本番環境
EIP
Amazon Route 53 ec.clouddesignpattern.org
EC2 AMI
①AMIを取得する
②テスト環境⽤のEC2インスタンスを⽴ち上げる
③ソフトウェアをアップデートしテストを⾏う
EIP「46.51.xxx.xxx」
課題
課題: サーバに障害が発⽣して、速やかに復旧したい
Server Swappingパターンの適⽤後
仮想サーバ
仮想サーバ
サーバに障害
マシンイメージ
サーバ起動
仮想ディスク
データ
仮想ディスク
データ
課題
課題: Webサーバが落ちても、システム全体で稼働し続けるようにしたい
Multi-Serverパターン
EC2インスタンス
冗⻑構成
EC2インスタンス
オリジナル
MySQL DB インスタンス
ロードバランサ
RDSの作成
45
Multi-Serverパターンの適⽤後
EC2インスタンス
冗⻑構成
EC2インスタンス
オリジナル
MySQL DB インスタンス
ロードバランサ
ロードバランサの起動
ロードバランサの起動EC‐CUBEでは、SSLをサポート。ELBでも対処可能だが、今回はELBではSSLの処理はしないことに。
ELB配下にEC2を追加AMIからEC2起動
ELB配下に追加
Multi-Serverパターンの適⽤後
EC2インスタン
ス
冗⻑構成
EC2インスタン
ス
オリジ
ナル
MySQL DB インスタン
ス
ロードバランサ サーバーわざと停止させても動く??
課題
課題: DB部分のSPOFを解消したい
DB Replicationパターンを適⽤し、DBをマルチ構成に切り替える
マルチAZに変更
DB Replicationパターンの適⽤後
ゾーン1a
EC2インスタンス
冗⻑構成
EC2インスタンス
オリジナル
ゾーン1b
同期
ロードバランサ
MySQL DB インスタンス
MySQL DB スタンバイ
課題
課題: サーバレベルだけでなく、データセンタレベルの障害にも対応できるようにする
Multi-Datacenterパターンを適⽤し、すべてのレイヤで冗⻑化を⾏う
Multi-Datacenterパターンの適⽤後
EC2インスタン
ス
冗長構成
EC2インスタン
ス
オリジナル
ロードバランサ
同期
ゾーン1a ゾーン1b
MySQL DB インスタンス
MySQL DB スタンバイ
デザイン推移
障害対応障害対策
SPOF回避
最終
AWSクラウドデザインパターン‐キャンペーンサイト編‐
背景とシナリオ
ECサイトの商品が⼤⼈気
さらなる販促のためキャンペーンサイト
アクセス急増対策ため順次パターンを適⽤
利⽤環境・ソフトウェア
Amazon Linux (32bit)Apache HTTP Server 2.2.21MySQL 5.1.52PHP 5.3.8WordPress 3.3.1
キャンペーンサイト開設
スモールスタートテータ転送量などは気にしないとりあえずやってみる
EC2は1インスタンスで運⽤
EIPをDNSに登録ELBは利⽤しない
Scale Out パターン
課題
課題:シングル構成のサーバーをスケールアウトさせたい
Clone Server パターンクローン⽤AMIからスケールアウト
課題
課題:リアルタイムで共有コンテンツを反映させたい
NFS Sharing パターン
課題
課題:NFS部分にパフォーマンスの問題が。。
NFS Replica パターン
課題
課題:コスト効果⾼く、リクエストをさばく
URL Rewriting パターンS3に静的コンテンツを分散Mod_ext_filterでコンテンツ中のURLを動的に書き換え
さいごに
クラウドアーキテクティング原則
• できるだけサービスを利用
• 机上実験よりも実証実験
• スモールスタートからスケールアウト
• 変化に対し全レイヤで対処
• 故障のための設計(Design For Failure)
• 最初だけでなく周期的なカイゼン
Ninja of Three
CDP、誰が作ったの?
Ninja of Three
表千家 裏千家
CDPは⽇本発!
⽇本から世界に発信
していこう!
Wikiでノウハウを共有
ご清聴ありがとうございました@KenTamagawa