LoginSignup
2
2

More than 5 years have passed since last update.

AWS Summit Tokyo 2015 DAY2

Last updated at Posted at 2015-06-03

Official

なぜクックパッドは開発しやすいのか

  • slide
  • EC2多い時1000台
  • Ops7人、90人エンジニア、10日/dayデプロイする
  • 世界一巨大なモノリシックなRailsアプリケーション
    • model数が1732
  • 開発しにくい状態の例
    • 大量のレガシーコード、技術的負債
    • テストがFailしていて、放置されている
    • てプロイが属人的で、時間がかかりすぎたり、たまに失敗する
  • 開発し易さを保つべき
  • サービス開発とは何なのか
  • 作っているのは機能ではなく、サービス、ユーザー体験
  • 本番データを使って開発するべき
    • 本番を同期したDBで開発するメリット
    • ユーザーと同等の体験
    • 予期せぬデータによるバグに気づきやすい
    • 重いクエリに気づきやすい
    • 昔はmysqldump。半年に1回。
    • 今は、本番DBのslave1台を利用。
    • auto increment idが衝突しないように、devではidにoffset値(60000とか大きい数値)を付ける。
    • 行ベースレプリケーションしてる
    • bin_logが大きくなるので1つDBをかましている
    • slave_skip_error = ON
  • 本番環境で開発する
    • β機能リリース
    • 公開範囲の限定する
    • サービスの価値はユーザーに使ってもらわないとわからないから
    • 作りこむより、速く失敗して気付くべき
    • chanko
    • 価値が検証されて価値が認められたら取り込む
    • ステージング用のサーバは存在するが利用頻度は低い
  • テスト
    • Cookpadでは、rspec(21000 examples 1800 files) ある
    • テストが多いと実行時間が長い、壊れやすい、環境依存などでメンテしにくいとかある
    • rrrspec
    • フォールトトレラント、いかにしてfailしにくいCIにするか
    • rrrspecでは1回failしたら自動で再実行して1回通ればsuccessにするようになっている
    • 割れ窓理論・・・CIがテスト失敗したら通知するようになっている
    • pendingにさせっぱなしのテストの作者に通知するようになっている
    • ビルド時間、通過率、コストなどをメトリクスとして指標
  • デプロイに重要な事
    • 属人性がないこと
    • 正確であること
    • ロールバックできること
    • 十分に速いこと
    • Capistranoではスケール出来ない
    • Mamiya (Selfイベントを利用してる)
    • Cookpadでは13秒でデプロイ出来る
  • 割れ窓を作らない為には、責任者と指標が必要
  • 開発しやすさの価値
    • 開発からデプロイまでのサイクルが速ければ、本番環境を使った開発が実現が出来る
    • ユーザーと同じ体験の中で開発する
    • 開発しやすさに投資する価値は十分ある
    • 結果として開発組織もサービスも健全な状態が保てる

サーバにログインしない・させないサービス運用

  • slide
  • Gunosyのエンジニア数26名
  • 開発の特徴
    • 小さい単位ですぐ捨てる
    • マイクロサービス的な
    • 機能が増え過ぎたら分割
    • メンテするよりリプレイス
  • サーバへの不要なログインをやめる
  • サーバーにログインされて困る事
    • 信頼出来ないビルド・デプロイ・・・どこの断面かわからない
    • 勝手に加えられる変更・・・パッケージ、crontab
    • 以前からChefを使用していたが・・・サーバとレシピに乖離があった。レシピを追随させる必要があった。
  • デプロイは信頼出来る必要がある
  • 信頼出来ないデプロイ
    • 事故
    • 手戻り
    • 継続的デプロイ
  • 継続的デリバリ
    • バージョン管理ツール、CIツール、デプロイツールなどを使えば良いと言うものではない -> フローを作る事が大事。
  • Githubを中心とした開発・デプロイフロー
    • Github
    • CircleCI
    • OpsWorks
  • Mergeボタンに全てを集中させる
    • 各ブランチをマージする度に自動でビルド・テスト・デプロイ
    • master, develop, feature, releaseというブランチ戦略
    • デプロイしたければPullRequestを作る
    • Opsworksでもデプロイ履歴が追える
  • Pull requestDriven Deploy
  • 全ての情報がGihubに集約
  • 見える化、ビルドデプロイの効率化、事故の削減
  • ワークフローがわかりやすくなった
  • 調査の為のログ収集(ミドルウェア、アプリケーションログ)

Auto Scaling x Spot Instances によるスケーラビリティとコストカット事例

  • slide
  • 設計方針
    • web-apiはリクエスト数によってオートスケーリング
    • web-apiはspotインスタンスは使わない
    • workerはJob数に応じてオートスケーリング
    • workerはspotインスタンスを優先的に使用する
    • spotインスタンスを使用しない場合もReservedインスタンスを適用する
    • メッセージ配信とかで負荷が増加したらScheduledActionで対応
  • Spotインスタンスを優先する理由
    • 少し速くスケールアウトさせ、より遅くスケールインさせる -> Spotが買える限りSpotのみが増減させる状況を作る
  • スティッキーにしない
  • 急なアクセス増の準備時にはインスタンス数だけでなく、ELBのスケールにも注意。
  • 仮にSpotが全く買えなくても、オンデマンドでさばけるようにアプリを設計する
  • ELBのヘルスチェックに頼れない
  • スケールアウトからサービスインまでの時間を短く(2〜5分)
  • 時間がかかる初期化処理はAMIに入れておく
  • アプリケーションが刻々と変わるので、Threshuld値をその都度変更する
  • SpotInstanceの上限に注意
  • 設定はYAMLファイルに書いて適用させていた
  • パラメータチューニング要領・・・プレゼン参照
  • 期待出来る成果
  • コストカット成果シート
  • その他のコストカットポイント
    • その他のサービスのReservedInstanceを使用してみる
    • 高騰しにくいタイプのSpotInstanceを使うと安心
    • WorkerにやらせているジョブをLamdaに移行したら安くなったりする
  • 今後
    • Labdaをフルに使ったらさらなる節約になるかも
    • HTTP/2時代にステートレスを前提にしたawsでのスケールはどうなるのか

新サービス解説セッション ~ Amazon Elastic File System と Amazon Machine Learning ~

  • Amazon Elastic File System
    • NFS(NFSv4)でアクセス出来るストレージ
    • コンテンツレポジトリ・ビックデータ/HPCとして利用例
    • シンプル、フルマネージド型
    • 課金体系は容量課金 $0.3/GB・月(USリージョン)
    • 容量は自動的に拡張・縮小
    • 性能に応じてスケール
    • 数千のNFS同時接続可能
    • 複数AZに複製されて保存される
    • 複数AZに同時に書き込み可能
    • mountコマンドで普通にマウント
    • バースト機能あり(1TB以上では毎日12時間、倍にバースト可)
    • TCP2049番ポート固定
    • LinuxNFSv4クライアントサポート
    • ロック,shareDeny,ACL,kerberos認証は現状未サポート
    • 同一VPCからのみ接続可能
    • EFSがあれば、NFS Sharingパターンが変わる
  • Amazon Machine Learning
    • 未来、未知を予測する
    • スパムメールの判定(教師あり学習)
    • 明日の売上はどのくらいになるか(線形回帰分析)
    • 機械学習に強くて、R,Python、Hadoop,Spark、ビジネス分野の経験が深い人という採用は難しい -> スマートアプリケーションが解決
    • Amazonが提供するアルゴリズムを使用
    • パッケージサービスとして提供
    • スケーラビリティは気にする必要はない
    • 二項分類(ロジスティック回帰)例. このメールはスパム?
    • 多クラス分類(多項式ロジスティック回帰)例.これは木、車、食べ物?
    • 回帰分析(線形回帰分析)例.明日は水曜日、在庫はいくつくらい必要?
    • バッチ予測(S3にアップロードしてバッチで)。
    • リアルタイム予測(APIで)。
    • 教師用、評価データを準備(S3,Redshift,RDSで)。
    • 教師データからモデル(二項分類、多クラス分類、回帰分析)作成
    • 作成したモデルに対して評価(評価用のデータを流してみて予測用の制度を測る事)を実施する。
    • 制度に満足出来ない場合、教師用のデータのETLや量を再教育する。
    • データ分析: $0.42/インスタンス時
    • バッチ予測: $0.10/1000
    • リアルタイム予測: $0.10/1000
    • 現状リージョンはus-east-1のみ、S3は他リージョンでも可能。
    • 利用例(広告の不正クリック検出、デモグラ推定、デモグラに基づいたレコメンデーション、顔写真から特定人物かどうか判定(顔写真をグレースケールしてビットマップ化したものを教師データに))
    • 問題をどうモデルに落としこむかが大事
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2