Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cookpad awakens

Cookpad awakens

Yoshiori SHOJI

January 21, 2017
Tweet

More Decks by Yoshiori SHOJI

Other Decks in Technology

Transcript

  1. $PPLQBEBXBLFOT
    ঙ࢘Յ৫

    View full-size slide

  2. ঙ࢘Յ৫
    yoshiori
    ٕज़෦௕ਓࣄ෦௕

    View full-size slide

  3. ਓࣄ෦௕
    バックオフィスでも技術が分かる人がいることが大事

    エンジニアの採用にも、もちろん大事
    エンジニア以外に人権が無いのではない
    逆に変に神聖視されないためにも大事

    View full-size slide

  4. まだまだ
    いっぱい

    View full-size slide

  5. 쎿썗쏝쏃쎅෼ׂ썿࿈ܞ

    View full-size slide

  6. 쎿썗쏝쏃쎅෼ׂ썿࿈ܞ
    microservices化によってサービス間の連携が大事に
    なった。
    サービス間の境界に対して Pact と Expeditor とい
    うのを使っている
    -障害を制御する Expeditor
    -障害を予防する Pact

    View full-size slide

  7. &YQFEJUPS
    -サーキットブレイカー
    -並列リクエスト
    -リトライ制御
    cookpad/expeditor

    View full-size slide

  8. 1BDU
    -サービス間の連携部分のテスト
    -簡単に言うと Service-A が返す JSON と 

    Service-B が期待する JSON のテスト
    -Consumer-Driven Contract testing 

    (CDC testing)
    - 詳しくは http://techlife.cookpad.com/entry/2016/06/28/164247

    View full-size slide

  9. QBDU@KVOJU@GPSNBUUFS
    -規模が大きいアプリケーションでは、pact
    verification が失敗した時に出力が多く見づらい
    -JUnit のフォーマットにすることで CI などでも
    見やすいようにするプラグイン
    taiki45/pact_junit_formatter

    View full-size slide

  10. QBDU@FYQFDUBUJPOT
    -Remote Facade のテストでのみ Pact を使い、そ
    の他の層では Remote Facade をモックするように
    -Pact の expectation をレスポンスとして流用で
    きる
    -ちゃんと設定したものが両方で呼ばれていること
    も確認できる
    yoshiori/pact_expectations

    View full-size slide

  11. 1IBLDIJ
    -iOS からの API 呼び出しも
    -Pact の expectation を楽に記述できる
    -Swift 製
    -XCTest から利用
    cookpad/Phakchi

    View full-size slide

  12. 쎿썗쏝쏃쎅
    쏧썗쏉쏝쏴쏐쎭
    分割したサービスは全て Docker 化されている
    Docker を更に有効的に使うために hako を作った

    View full-size slide

  13. IBLP
    -Docker のデプロイツール
    - 今のところ ECS に対応
    - 定義は YAML で記述

    (Ruby DSL とかは無い)
    eagletmt/hako

    View full-size slide

  14. -一昨年から新規はすべて Docker、既存のものもど
    んどん Docker 化は結構進んでいた。
    -が、どうしてもインフラ作業などは発生する。
    - アプリケーションサーバ以外の機能

    (RDS、Route53、ELB などなどの設定)
    - 環境変数の追加など

    (DB 情報や APIのキーなどの秘匿値)
    IBLP

    View full-size slide

  15. IBLP
    -定義は YAML で記述
    -ソフトウェアと同様に開発者が管理ができ、
    git&github 等で管理、レビューが出来る
    -cookpad では hako_apps というリポジトリで集中
    管理してる

    View full-size slide

  16. IBLP
    -秘匿値を含む環境変数の扱い
    - etcd をバックエンドにした etcvault を使用
    - 現在 hashicorp/vault に移行中
    sorah/etcvault

    View full-size slide

  17. -デプロイに処理を差し込む
    - Route53 の自動設定やデプロイするリビジョン
    を jenkins から取得等
    -詳しくは下記
    - https://speakerdeck.com/eagletmt/ecs-woli-yong-sitadepuroihuan-
    jing
    - http://techlife.cookpad.com/entry/2016/09/09/235007
    IBLP

    View full-size slide

  18. -hako deploy
    - デプロイを実行するコマンド
    - クックパッドではコマンド実行に Rundeck を使

    -hako oneshot
    - バッチ系
    IBLP

    View full-size slide

  19. -ジョブ管理システム
    - 各チームのジョブスケジュールを

    可視化する機能などもあり
    -Ruby で書かれてる
    -Web UI がある
    -細かい話は http://techlife.cookpad.com/entry/2015/12/07/195732
    LVSPLP
    cookpad/kuroko2

    View full-size slide

  20. -ジョブ管理を最初は cron で雑に管理していて破
    綻する
    - どのサーバでやるか
    - リソース使い切って分散したくなったり
    - バッチ用のサーバ立てたり
    쏂쏱쏠쎂썻썛썽

    View full-size slide

  21. -DB への接続やドメイン特有の処理など

    Web アプリと共有したいものは多い
    -普通にやると job 実行は web アプリを内包しな
    きゃいけなくなる
    - デプロイが別になったり大変
    - プロビジョニング自動化してても大変……
    - ワーカーは最強の権限をもったサーバになりがち
    쏂쏱쏠쎂썻썛썽

    View full-size slide

  22. -hako oneshot
    - ECS task なので IAM role を設定できる
    - 権限管理や秘匿値の管理がコンテナ単位になっ
    て適切にサービス毎に権限が管理できる
    - デプロイを気にする必要ない

    (Dokcer イメージを hako で実行するため)
    쏂쏱쏠쎂썻썛썽

    View full-size slide

  23. -ジョブキューシステム
    -Ruby で書かれてる
    -kuroko2 と同じような Web UI
    -細かい話は 

    https://speakerdeck.com/k0kubun/scalable-job-queue-system-built-
    with-docker
    #BSCFRVF
    cookpad/barbeque

    View full-size slide

  24. -Rails だと Resque や Sidekiq 使うことが多い
    -さらにキューの管理が複雑に
    -起動がユーザリクエスト単位だったりするので負
    荷が読みにくい
    쏂쏱쏠쎷쏯썗쎂썻썛썽

    View full-size slide

  25. -Barbeque も kuroko2 と同じように

    hako oneshot でジョブを実行(OSS 化済み)
    -Scale-out は hakoの特性を使ってやっている
    - ワーカー単位ではなくジョブ単位で必要な時に
    必要な分だけオートスケールできる
    쏂쏱쏠쎷쏯썗쎂썻썛썽

    View full-size slide

  26. *NNVUBCMF
    *OGSBTUSVDUVSF

    View full-size slide

  27. -言葉がバズってから結構たった
    -Docker 化により開発者も半ば強制的に意識するよ
    うになり、hako で加速
    -コンテナ化によりポータビリティが上がりそれを
    有効活用したシステム構成に出来るようになった
    *NNVUBCMF
    *OGSBTUSVDUVSF

    View full-size slide

  28. -まだ Docker 化出来てない><
    -が、もちろん Immutable な構成にはなっている
    -のでインフラ周りではちょっと面白いことやって
    いるよ〜
    썾ɺDPPLQBEຊମ

    View full-size slide

  29. -Web の現状を鑑みるとHTTPS 化しない理由がない
    -新しい技術は HTTPS を要求するものが増えている
    (HTTP/2 やService worker 等)
    -さらなる挑戦のためにも HTTPS 化が必要だった
    )5514Խ

    View full-size slide

  30. "NB[PO3FETIJGU쎏쎅
    ׬શҠߦ

    View full-size slide

  31. -去年発表のあった DWH の件
    -今まで サードパーティの DWH サービスを併用し
    ていたが完全に Redshift へ移行した
    -データが一箇所に集まった(アクセスログも!)
    "NB[PO3FETIJGU쎏쎅
    ׬શҠߦ

    View full-size slide

  32. -つまりアクセスログとアプリケーションのデータ
    を join 出来る
    -例えば 神奈川県に住んでいる 20代女性が昨日一
    番見ていたレシピのタイトルとかが簡単に取れる
    શ썽쎅쏑썗쏉썣ू쎕쎢
    썿썛썝썪썿

    View full-size slide

  33. -ディレクターも活用
    -AB テストなどでもユーザーセグメント作ったり
    -もちろんプライバシーへの配慮なども取り組んで
    いる
    શ썽쎅쏑썗쏉썣ू쎕쎢
    썿썛썝썪썿

    View full-size slide

  34. -この一年もドンドン進歩していった
    -もちろん今年も更に加速していきます!!
    쎕썿쎘

    View full-size slide

  35. We are hiring!

    View full-size slide