Upload
makoto-tajima
View
1.867
Download
6
Embed Size (px)
Citation preview
エムロジック株式会社
1998年創業
千代田区神保町で15年+α
エンジニア2名(1名は私)事務1名の3人
草食系企業
当初はWindows、PalmOS方面であれこれ開発
Movable Type日本語化の頃よりこちらの世界
最近はiOSとMovable Typeの2本立て
発展例その2
マイページ+購入履歴+閲覧制限
•購入商品の問い合わせフォーム購入履歴から問い合わせフォーム
•購入者向けダウンロード購入履歴から閲覧制限ページにリンク
•購入商品のサポート情報を掲載商品にサポートブログのIDを持たせて
いきさつ
動的会員サイトの構成
会員管理者
CGI管理画面 HTML
認証のみ認証とコンテンツ
全部MTアプリケーション(MT::App)
タスク実行mt.cgi
ユーザー
アクセス先
サーバ上の動作
MTコマースの構成
いきさつ
ユーザー管理者
CGI管理画面 HTML
認証のみ認証とコンテンツ
MT::App
タスクmt.cgi
API
カート内容・ユーザー情報などの参照のみ
でもCGI
少し軽い
運用チームでSAN値の低下
「1インスタンスでどうやれと」
「24コアでもCPUとメモリが限界」
「なぜ今再構築する!?」
「タイムセールやめてーーー」
「データの転送に1日以上」
「セール時のログ超でかい」
「サーバのアップデートしなきゃ」
さらなるSAN値の低下
「Amazonは0.1秒遅くなると売上が1%ダウンする」
「Googleは0.5秒遅くなるとアクセス数が20%ダウンする」
「一般的に表示スピードが1秒遅くなると、PVは11%、コンバージョンは
7%、顧客満足度は16%ダウンする」出典:Aberdeen Group Report
閑話休題
ありました!Movable Type Advanced
http://www.sixapart.jp/movabletype/solutions/mta.html
でもケースによっては高くつくかも。。。
閑話休題
でました!Movable Type 6 for AWS
インスタンスを使った分だけ課金
ライセンス料金:0.07ドル/1時間
マイクロインスタンスだと無料!
http://www.sixapart.jp/movabletype/aws/
動的サイトで気を付けたいこと
1.スワップボリューム
2.負荷分散
3.SMTP(メール送信)
4.RDSチューニング
5.Workerの数
6.キャッシュ
7.監視 DataAPIにもあてはまります!
スワップボリューム
•AmazonLinuxのAMIでインスタンスを作成した場合スワップが設定されない
•スワップがないとどうなる?•メモリが足りなくなると突然プロセスが殺される
•OOM Killer (Out of Memory Killer)
→スワップは作りましょう!
負荷分散その1
•再構築は1インスタンスにまとめましょう•公開キューでリビルドするようにしてタスクで全部再構築しましょう
•MTコマースは商品ページの再構築をジョブキューで実行します
•1インスタンスにまとまれば他インスタンスへのビルドファイルの配信が楽になります!
※SPOFにもなるのでバックアップ大事!
負荷分散その2
•「再構築中にサーバが重い」• 1インスタンスだけ重くなってしまうとバランスが悪くなりうかつにオートスケールできなくなります
•マスターサーバはELBから分離してしまいましょう
•(予算に)余裕があればタスク専用のサーバがあると快適!
•非セール時の最小構成案(省略版)
ELB、EC2、RDSの接続についてのみ書いています
1インスタンスで管理画面、フロント、再構築、メール送信を行う構成(メール送信・再構築は負荷にならない程度と想定)
SMTP
再構築 メール送信
SMTP
解決策
•メール送信は1インスタンスにまとめましょう•マスターサーバにゲートウェイ設置してマスターサーバから送信するように設定
• MTコマースはフロントからのすべてのメールがジョブキューで送信されます(次期リリースにて実装)
•メールの負荷が重いサーバではメール送信のサーバと管理画面のサーバを分離しましょう
•タスクからの送信はMTに欲しいなー
RDSチューニング
•「インスタンス増えても捌けるユーザーが増えなくなった」•調べてみた
• JMeterで100ユーザーが連続で検索・購入するシナリオを実行
•妙に遅かった。何故?
0
50
インスタンス2 インスタンス3
トランザクション数 (RDS SMALL)
インスタンス2 インスタンス3
RDSチューニング
•「CloudWatchでRDSの負荷がハンパないんだけど」•なんだかんだでMTは結構DBアクセス多いと思います
•現在RDSのデフォルトはクエリキャッシュが無効です>有効にしましょう
• RDSも立派なインスタンス、MySQLのチューニングを怠ってはいけません
•MTコマースの場合、これで急回復!•どうしても改善できないときはプラン変更を・・・
Worker数
•スワップを作ったとしてもスワップはあくまでも保険•使わないよう実行プロセスの調整をしましょう
•Starmanで実行しているのであればWorker数で調節します
--workers 2 ←ココ
•使わないプラグイン・アドオン・CGIを消すというのももちろん実施
Worker数
•MTコマースでは静的ページ用の軽量なShopAPIを分離実行できる•アクセスの傾向を調べてShopAPIを大量実行するという方法も
•MTではData APIだけ実行するサーバーとかも考えられます
•ちょっとしたサイト構成でメモリの使用量が変わることがあるので常時メモリのチェックはしておくと吉
キャッシュ
•MTにも重いタグが存在する(MTコマースにも)
•対策•テンプレートモジュールのキャッシュを活用特定のイベントでキャッシュをクリアできるので便利
•memcachedの導入RDSの負荷を下げることにも貢献設定するとMT内部で使用されます。
キャッシュ
•MTコマースでは…•GoodsPartialCache
商品詳細ページの再構築時にフロントの各所で使用する商品パーツを一括でビルド&キャッシュしておくファイルにすると配信を考えなければならないためDBに格納している
このあたりがキャッシュ
開発でフォローした例として
キャッシュ
•MTコマースでは…•レスポンスキャッシュ
商品検索は動的部分(ユーザー情報)を分離できるため、商品データに変更がなければ検索条件ごとに固定のHTMLを出力できるためこれをmemcachedにキャッシュしている
レスポンスキャッシュはDataAPIなどでも活用できそうです(MTにも欲しいなー)
キャッシュ
•memcached•全インスタンスで同じ設定を使いましょう
•インスタンスごとにキャッシュの内容が違うと問題が発生します
•キャッシュの使用頻度があがるようであればElastiCacheを検討
監視
•CloudWatch•常に設定しましょう•いろんなアラート出せるので便利
•ただECの場合、負荷以外にも不正使用のアラートなどCloudWatchではフォローできないアラートも必要
•監視は複数系統用意しましょう
まとめ
•MTとECってすごく相性がいいです
• AWSは動的サイトの運用には超便利です(Data APIの登場で需要増)
•いまからでもMovable Type for AWSを使ってみるといいよ!
•複数インスタンスにする可能性があるならば最初から備えておかないと大変