Slide 1

Slide 1 text

$PPLQBEBXBLFOT ঙ࢘Յ৫ ∠

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

ਓࣄ෦௕ バックオフィスでも技術が分かる人がいることが大事
 エンジニアの採用にも、もちろん大事 エンジニア以外に人権が無いのではない 逆に変に神聖視されないためにも大事

Slide 4

Slide 4 text

ٕज़෦௕

Slide 5

Slide 5 text

࠷ॳ쎂

Slide 6

Slide 6 text

まだまだ いっぱい

Slide 7

Slide 7 text

쎿썗쏝쏃쎅෼ׂ썿࿈ܞ

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

1BDU -サービス間の連携部分のテスト -簡単に言うと Service-A が返す JSON と 
 Service-B が期待する JSON のテスト -Consumer-Driven Contract testing 
 (CDC testing) - 詳しくは http://techlife.cookpad.com/entry/2016/06/28/164247

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

IBLP

Slide 16

Slide 16 text

IBLP -Docker のデプロイツール - 今のところ ECS に対応 - 定義は YAML で記述
 (Ruby DSL とかは無い) eagletmt/hako

Slide 17

Slide 17 text

-一昨年から新規はすべて Docker、既存のものもど んどん Docker 化は結構進んでいた。 -が、どうしてもインフラ作業などは発生する。 - アプリケーションサーバ以外の機能
 (RDS、Route53、ELB などなどの設定) - 環境変数の追加など
 (DB 情報や APIのキーなどの秘匿値) IBLP

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

-hako deploy - デプロイを実行するコマンド - クックパッドではコマンド実行に Rundeck を使 用 -hako oneshot - バッチ系 IBLP

Slide 22

Slide 22 text

LVSPLP

Slide 23

Slide 23 text

-ジョブ管理システム - 各チームのジョブスケジュールを
 可視化する機能などもあり -Ruby で書かれてる -Web UI がある -細かい話は http://techlife.cookpad.com/entry/2015/12/07/195732 LVSPLP cookpad/kuroko2

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

-hako oneshot - ECS task なので IAM role を設定できる - 権限管理や秘匿値の管理がコンテナ単位になっ て適切にサービス毎に権限が管理できる - デプロイを気にする必要ない
 (Dokcer イメージを hako で実行するため) 쏂쏱쏠쎂썻썛썽

Slide 27

Slide 27 text

#BSCFRVF

Slide 28

Slide 28 text

-ジョブキューシステム -Ruby で書かれてる -kuroko2 と同じような Web UI -細かい話は 
 https://speakerdeck.com/k0kubun/scalable-job-queue-system-built- with-docker #BSCFRVF cookpad/barbeque

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

*NNVUBCMF *OGSBTUSVDUVSF

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

)5514Խ

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

"NB[PO3FETIJGU쎏쎅 ׬શҠߦ

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

쎕썿쎘

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

We are hiring!