by shigemk2

当面は技術的なことしか書かない

memo クックパッドのバッチまわりの概況とKuroko2の近況 #cookpad_tech_kitchen

https://speakerdeck.com/takai/the-design-philosophy-of-kuroko2

  • kuroko2運用
  • 複数サービス感の整合性の取り組みについて

agenda

  • kuroko2の近況
  • バッチ周りの概況
    • 構成
    • 運用
    • デプロイ

kuroko2の近況

ジョブスケジューラー/ワークフローエンジン

アーキ

  • console
    • UI
    • スケジュールを登録する
    • 実行命令を投げる
  • worker
    • 実行(commandexecutorでシェル実行する)
  • DB
    • console/workerとで情報の受け渡しをする

沿革

  • Takaiさんのスカンクワーク
  • 大石さんが引き継ぐ
  • OSSにしないつもりだったのがOSSになった
  • サイレントリリース
  • Takaiさんの資料をみてほしい

方針

  • 現実的な運用を見据えた安定した設計
  • kuroko rabbitmqを使っていたけど不安定だった
  • DBでポーリングしたほうが安定するんじゃないかという発想
  • UI/UXで管理の問題を解決する
  • シンプリシティ
    • スケジューラーと汎用性の高いワークフロー管理に徹する
    • 外の機能と連携する(slack hipchat bricolage hako)
    • 必要な部分にだけ開かれた拡張性

拡張性

  • カスタムタスク(digdag/airflowでいうところのoperator)
    • タスクの作成
    • kuroko2.ymlへ宣言
    • kuroko2 script
      • env/env/runner

使いどころ

  • ショートカットの作成
  • 本体に手を入れなくても運用しているドメインに合わせたタスクが作れる
  • 実験的タスクを試す

Kuroko2::ApplicationController拡張

  • lib
  • Raven::Transports::Fluentdへのコンテキスト通知などで利用
  • ログなどのトレーシング
  • ユーザーごとのアクセス制限
  • Controller拡張だけでなく別の拡張ポイントも必要

課題

  • ドキュメント
  • 枯れさせたい
  • ワークフローの機能強化
  • Hako(Docker)との効率的な連携

バッチ周りの概況

  • kuroko2の社内バージョンはない masterブランチのリリース直前のものを使う
  • 700のバッチジョブ 1日あたり6000回 230worker
  • kuroko2の上ですべて管理

  • 監視

  • cpu/disk/network/死活監視
  • ジョブの状況を関し

  • APiをみてる

    • v1/stats/waiting_execution(実行まちジョブ)
    • v1/stats/instance
  • デプロイ

    • capistrano
    • console/scheduler/processor/comand-executerにわけている
    • HUPシグナルによるgraceful shutdown
  • バッチジョブは各部署が責任を持つ

− テンプレ通りに運用