JAWS-UG Summit2012にいってきた (2012-03-03)第二日目 その3

RIAとクラウド (横田氏 classmethod代表取締役

  1. 時間がないのでRIAの話はしませんw
  1. なぜUIとサーバ側をわけるのか?
    • UI側:増え続けるクライアント、画面サイズに合わせた情報量
    • ライフサイクルの違いをAPIで吸収
    • サーバ側:データ構造やロジックの定義には時間がかかるが変化は少ない。応答スピードの対応が必要
  1. 良いレスポンスのために
    • サービスを止めない
    • EC2,ELB,AutoScaling,CloudWatch,RDSなど
    • ボトルネックを解消する
    • リクエスト数を減らす、ディスクIOを減らす、DBアクセスを減らす
  1. リクエスト数を減らす1
    • ファイルをまとめる
    • CSS/JSをひとつにする
    • CSSの画像スライスで1ファイルにする
    • 適切な場所に配置
    • HTMLの上部にCSS、下部にJSを配置
    • 静的HTMLにCSS・JSを書かない
    • JSライブラリを非同期に読み込む
    • 静的ファイルをすべてEBS上に置く
    • HTML、CSS,JS、画像、動画、大容量ファイルなどはS3かCloudFrontにおくことでEC2へのリクエストが減る
    • 多くの場合、ELBを併せて使っているのでELBへの負荷が減る
  1. リクエスト数を減らす2
    • S3に静的ファイルを置くとき
    • HTML/CSS/JSはgzip圧縮する
    • 画像はExpires Cache-Controlを長めに設定
    • S3とCloudFrontどっちに置く
    • S3はストレージサービス。長期保存用
    • 東京リージョンに置けばそこそこスピードが出るが高速にデータをダウンロードしたければCloudFront
    • アクセス制限を付与したい場合は、S3
    • 認証つきURLならCloudFront/S3
    • CloudFrontのエッジロケーションが大阪にもできた
    • ネットワーク遅延を解消するため高価が大きい
    • CloudFrontはS3 Originヘッダを引き継ぐためキャッシュや圧縮が有効であれば引き継ぐ。コスト面のメリット大きい
  1. S3/CloudFrontへの配備
    • 手作業はめんどくさい
    • キャッシュ設定
    • Gzip圧縮
    • アップロード
    • 公開設定
    • アクセス制限
    • ビルドツールの活用
      • ant
      • S3Cmd
      • S3Sync
  1. リクエス数を減らす3
    • Webサーバで自動生成されるページのHTMLを修正できない場合
    • Apache/nginx等のUriRewriteを使って304転送
    • すべて静的なWebページの場合
    • ColudFrontのカスタムOriginを設定する
    • Route53のIPアドレス変更の浸透は数秒オーダー
    • TTLを短く設定するなど
  1. ディスクIOを減らす1
    • EC2とEBSはネットワークで接続されている
    • インスタンスサイズが大きいと割り当てられるネットワーク帯域が太くなる(SmallよりLargeが太い)
    • ネットワーク帯域をたくさん使ってしまうと応答が遅くなる
    • EBSはディスクなのでIOが大量に発生すると遅くなる
      • ログを大量に出力するとIOが大量発生
    • サービス系は常にカイゼンのために本番系でもデバッグログを出力していることもよくある
    • ディスクへの書き込みを減らす
    • ログはログサーバ(Fluentd等)を利用
    • ディスクアクセスを高速化したい場合
      • 大きいEC2インスタンスを使う
      • RAID0を組む
        • 2つのEBSボリュームをマウント
        • MdadmでRAID0化
    • EBSを使わずにEphemeral Disk を使う(EC2のローカル)
  1. DBアクセスを減らす2
    • とりあえず負荷を減らす
    • リードレプリカを用いる
      • 検索・更新を分ける
    • シャーディングする
    • DBに何でも入れてしまう傾向
    • DBのIO減らしてAWSのサービスを利用
    • SPOFの無いAWSサービス群
    • サービスそのものが高可用性.DynamoDB,SimpleDBなど
    • DBへの問い合わせ回数を減らす
      • キャッシュ機構を使う.ElasticCache
      • データベースにRDBMSを使わない
      • DynamoDB、SimpleDB
    • 操作ログや履歴はファイルへ.S3の利用