Cookpad awakens
by
Yoshiori SHOJI
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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!