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

クラウドネイティブ×持続可能 セルフサービス型データ分析ジョブプラットフォーム設計プラクティス / cndt2021_kojisuganuma

85da685d91fda190e2e3162d0de248a4?s=47 Recruit
December 06, 2021

クラウドネイティブ×持続可能 セルフサービス型データ分析ジョブプラットフォーム設計プラクティス / cndt2021_kojisuganuma

2021/11/04_Cloud Native Days Tokyo 2021での菅沼の講演資料になります

85da685d91fda190e2e3162d0de248a4?s=128

Recruit

December 06, 2021
Tweet

Transcript

  1. •マスター テキストの書式設定
 第 2 レベル
 第 3 レベル
 第 4

    レベル
 第 5 レベル マスタ タイトルの書式設定 1 クラウドネイティブ × 持続可能 セルフサービス型データ分析ジョブプラットフォーム 設計プラクティス 株式会社リクルート 菅沼孝二
 Cloud Native Days Tokyo 2021 (C) Recruit Co., Ltd. All rights reserved.
  2. 2 ❏ 発表について補足 ❏ 発表資料は後日公開されます ❏ 発表当日リアルタイムに質問に回答します ❏ 非同期で質問・コメントしたい場合 ❏

    Twitter DM : @kojisuganuma ❏ Twitter Hash Tag : #CNDT2021_C (C) Recruit Co., Ltd. All rights reserved. ご視聴いただきありがとうございます!
  3. 3 3 (C) Recruit Co., Ltd. All rights reserved. 自己紹介

      菅沼孝二 社会人歴 5 年 所属     株式会社リクルート データ推進室 2016年 - 新卒 メディア・ゲーム・広告関連事業会社 広告データ収集基盤開発・広告効果モデリング 2017年 - 中途 株式会社リクルートライフスタイル データ分析・モデリング・実装 / データプラットフォーム開発・SRE 2021年 - (統合) 株式会社リクルート データプラットフォーム開発・SRE・採用関連 3 Hobby & Ability 資産形成 / 子育て Resolution 経済的自立 / エンジニアリングで社会に貢献 (C) Recruit Co., Ltd. All rights reserved.
  4. 発表のアウトライン 4 4 (C) Recruit Co., Ltd. All rights reserved.

    • スコープ ◦ データ分析向けジョブプラットフォーム ◦ データ活用の業務プロセス ◦ それを取り巻くエンジニア・データサイエンティスト・データプランナー • ゴール ◦ スケーラブルな業務運用プロセス設計 ▪ データ施策・プロダクト利用者の数に運用負荷を比例させない ◦ 信頼性が高いプロダクト開発 ▪ 高いスケーラビリティ・回復性・障害耐性を持つプロダクト ◦ 持続可能なプロダクト開発 ▪ ワークフローエンジンを実装詳細を隠蔽し、プロダクトの変更容易性を維 持する
  5. 5 5 Agenda 1. 事業・組織について 2. チーム・プロダクトについて 3. 直面した問題と設計プラクティス 4.

    実装と運用 5. 新たな課題・今後の展望 6. まとめ 5 (C) Recruit Co., Ltd. All rights reserved.
  6. 6 6 Agenda 1. 事業・組織について 2. チーム・プロダクトについて 3. 直面した問題と設計プラクティス 4.

    実装と運用 5. 新たな課題・今後の展望 6. まとめ 6 (C) Recruit Co., Ltd. All rights reserved.
  7. 主な事業領域 (C) Recruit Co., Ltd. All rights reserved. https://recruit-saiyo.jp/present/ 7

  8. ビジネスモデル 8 https://recruit-holdings.com/ja/about/business/ (C) Recruit Co., Ltd. All rights reserved.

    個人ユーザーと企業クライアントが出会う場を作り出し より多くの最適なマッチングを実現 8
  9. データ推進室 データ推進室の取り組み 9 9 事業領域A 事業領域Aデータ ソリューション データエンジニアリング・データマネジメント 事業領域C 事業領域B

    事業領域Bデータ ソリューション 事業領域Cデータ ソリューション (C) Recruit Co., Ltd. All rights reserved.
  10. 10 10 Agenda 1. 事業・組織について 2. チーム・プロダクトについて 3. 直面した問題と設計プラクティス 4.

    実装と運用 5. 新たな課題・今後の展望 6. まとめ 10 (C) Recruit Co., Ltd. All rights reserved.
  11. データ活用プロセス 11 11 (C) Recruit Co., Ltd. All rights reserved.

    collect transform delivery analyze modeling app web server storage database Illustration designed by Freepik From Flaticon
  12. 私たちのチーム・プロダクトの位置付け 12 12 (C) Recruit Co., Ltd. All rights reserved.

    collect transform delivery analyze modeling app web server storage database Illustration designed by Freepik From Flaticon 販促領域・SaaS 領域・その他 (※2021年時点)
  13. 13 13 (C) Recruit Co., Ltd. All rights reserved. データプラットフォームの

    設計・構築・運用 データマネジメント 高度なデータパイプライン の設計・構築 ... 高度なデータパイプライン の設計・構築・運用 特徴量エンジニアリング MLモデリング データビジュアライズ データ開発 ... 高度なML・数理モデリング 特徴量エンジニアリング データ探索 データ基礎分析 データビジュアライズ データ開発 ... データ戦略の立案・推進 データ開発 データ探索 データ基礎分析 データビジュアライズ ... 各種職務による エンジニアリング MLOps DevOps SRE セキュリティ データマネジメント ... エンジニアリング MLOps 機械学習理論 データ加工 データ抽出 データ可視化 ... 機械学習理論 数理最適化理論 統計・検定理論 データ加工 データ抽出 データ可視化 ... データ戦略立案・推進 仮説設計・効果検証設計 データ加工 データ抽出 データ可視化 ... 各種職務による Data Planner Data Scientist ML Engineer ディレクター・ マーケター・事 業開発など Software Engineer Data Engineer Role Capability Posision データ活用人材の Posision & Role & Capability ※ Role 及び Capability はあくまでも一例です。組織・チームによって異なります。
  14. 14 14 (C) Recruit Co., Ltd. All rights reserved. データプラットフォームの

    設計・構築・運用 データマネジメント 高度なデータパイプライン の設計・構築 ... 高度なデータパイプライン の設計・構築・運用 特徴量エンジニアリング MLモデリング データビジュアライズ データ開発 ... 高度なML・数理モデリング 特徴量エンジニアリング データ探索 データ基礎分析 データビジュアライズ データ開発 ... データ戦略の立案・推進 データ開発 データ探索 データ基礎分析 データビジュアライズ ... 各種職務による エンジニアリング MLOps DevOps SRE セキュリティ データマネジメント ... エンジニアリング MLOps 機械学習理論 データ加工 データ抽出 データ可視化 ... 機械学習理論 数理最適化理論 統計・検定理論 データ加工 データ抽出 データ可視化 ... データ戦略立案・推進 仮説設計・効果検証設計 データ加工 データ抽出 データ可視化 ... 各種職務による Data Planner Data Scientist ML Engineer ディレクター・ マーケター・事 業開発など Software Engineer Data Engineer Role Capability Data Platform Architect Data Solution Architect Service Developer Posision データ活用人材のカテゴライズ
  15. 15 15 (C) Recruit Co., Ltd. All rights reserved. Data

    Platform Architect Software Engineer / Data Engineer Data Solution Architect ML Engineer / Data Scientist / Data Planner Service Developer ディレクター・マーケター・事業開発など カスタマー・クライアント データプラットフォームの提供 データソリューションの提供 データによるサービス品質の向上 事業価値 データによる事業価値創出の構造
  16. 16 16 (C) Recruit Co., Ltd. All rights reserved. Data

    Platform Architect Software Engineer / Data Engineer Data Solution Architect ML Engineer / Data Scientist / Data Planner Service Developer ディレクター・マーケター・事業開発など カスタマー・クライアント データプラットフォームの提供 データソリューションの提供 データによるサービス体験の向上 事業価値 私たちのチーム・プロダクトの位置付け
  17. 17 17 Agenda 1. 事業・組織について 2. チーム・プロダクトについて 3. 直面した問題と設計プラクティス 4.

    実装と運用 5. 新たな課題・今後の展望 6. まとめ 17 (C) Recruit Co., Ltd. All rights reserved.
  18. データプラットフォームのよくある問題 18 18 (C) Recruit Co., Ltd. All rights reserved.

    ✔ インフラの信頼性が低く、データ処理リクエストの増加 に処理が追いつかなかったり、メンテナンス時・障害時 に単一障害点起因のダウンタイムが発生してしまう ✔ 開発体験の悪いデータプラットフォームは、利用者から の問い合わせ数が増大し、その対応で工数が溶ける ✔ データ施策・プロダクト利用者が増加するほど、データ エンジニア工数不足がボトルネックになる ✔ プロダクトが大きく成長するにつれて、各種コードの依 存関係が複雑になり、あらゆる変更が困難になる
  19. 19 19 (C) Recruit Co., Ltd. All rights reserved. 運用がスケールしない

    データプラットフォーム ”データから価値を生み続けるには ” より一部修正して再掲 データ活用の取り組みにおける 「運用がスケールしない」 業務プロセスのスキーム ① コミュニケーションコスト / 専門性の違いに   よる生産性低下 ② エンジニアのリソース上限が   データ施策の推進のボトルネックに ③ プロダクトの機能開発・自動化・信頼性向上   に開発リソースを十分に割けない ① ② ③ データ サイエンティスト データ プランナー エンジニア Illustration designed by Freepik From Flaticon
  20. 20 20 (C) Recruit Co., Ltd. All rights reserved. 実装・デプロイ・運用がセルフサービス化

    されたデータプラットフォーム データ活用の取り組みにおける 「価値創出がスケールする」 業務プロセスのスキーム ① 開発・デプロイ・運用のセルフサービス化   により変更反映のリードタイムを削減 ② エンジニアによるデータ施策個別の   開発コストをゼロに ③ エンジニアはデータプロダクトの   機能開発・自動化・信頼性向上に集中 ”データから価値を生み続けるには ” より一部修正して再掲 データ サイエンティスト データ プランナー エンジニア ① ② ③ Illustration designed by Freepik From Flaticon
  21. 21 21 (C) Recruit Co., Ltd. All rights reserved. ”データから価値を生み続けるには

    ” より一部修正して再掲 Illustration designed by Freepik From Flaticon 運用がスケールしない データプラットフォーム データ サイエンティスト データ プランナー エンジニア 実装・デプロイ・運用がセルフサービス化 されたデータプラットフォーム データ サイエンティスト データ プランナー エンジニア 関心の分離 & セルフサービス化 データ活用の業務プロセスとプロダクトデザインを最適化 データサイエンティスト・データプランナーの関心 エンジニアの関心
  22. 22 (C) Recruit Co., Ltd. All rights reserved. ALL OK?

    → NO!!!!! ❏ Developer からの問い合わせ対応が大変!
  23. 23 23 (C) Recruit Co., Ltd. All rights reserved. 開発体験が悪い

    セルフサービス型データプラットフォーム 「開発体験が悪い」 セルフサービス型データプラットフォーム ① 開発・運用時のデバッガビリティが悪く   問い合わせが殺到 ② プロダクトの機能開発・自動化・信頼性向上   に開発リソースを十分に割けない データ サイエンティスト データ プランナー エンジニア ① ② Illustration designed by Freepik From Flaticon
  24. 24 24 (C) Recruit Co., Ltd. All rights reserved. 開発体験が良い

    セルフサービス型データプラットフォーム 「開発体験が良い」 セルフサービス型データプラットフォーム データ サイエンティスト データ プランナー エンジニア ② Illustration designed by Freepik From Flaticon ① 実行ログ検索性の向上・データ施策ごとの   リソースモニタリングダッシュボードの提供   ・docs 拡充・docs 自動生成・etc. ② セルフサービス開発のデバッガビリティの   改善により問い合わせ対応工数を削減 ① ③ ③ エンジニアはプロダクトの   機能開発・自動化・信頼性向上に集中
  25. 25 25 (C) Recruit Co., Ltd. All rights reserved. 開発体験が悪い

    セルフサービス型データプロダクト データ サイエンティスト データ プランナー エンジニア Illustration designed by Freepik From Flaticon 開発体験が良い セルフサービス型データプロダクト データ サイエンティスト データ プランナー エンジニア 開発体験(Developer Experience)の最大化 利用方法がわからない時・問題の発生時も自立的に理解を深められる仕組みを提供
  26. 26 (C) Recruit Co., Ltd. All rights reserved. ALL OK?

    → NO!!!!! ❏ データ施策数の増加に伴ってアーキテクチャ上のボトル ネックが浮き彫りに!
  27. 27 27 (C) Recruit Co., Ltd. All rights reserved. 「

    Non-Scalable & Non-Reliable」 Infrastructure ② 単一障害点となるコンポーネントが存在し、メ   ンテナンス(ソフトウェア/ノードアップグレー   ド等)時や障害時にダウンタイムが発生する ① ジョブ実行に必要なコンポーネントである    ワーカー・スケジューラー・ウェブサー     バー、及びノードが事前に決められた台数の   み起動しており、リクエストが急増すると期   待する時間内に処理が始まらない job worker job scheduler job webserver ③ 単一のゾーンにのみコンポーネント群が存在    し、ゾーンレベルの障害耐性がない zone node
  28. zone node 28 28 (C) Recruit Co., Ltd. All rights

    reserved. 「 Scalable & Reliable」 Infrastructure ② 単一障害点となるコンポーネントが存在せず、   メンテナンス・障害時に系全体ではダウンタイ   ムが発生せず、かつ回復性を持つ ① ワーカー・スケジューラー・ウェブサー     バーやノードの全てがリクエストの増減に応   じてオートスケーリングする job worker job scheduler schedulable spot Scalable & Reliable ③ 複数のゾーン(もしくはリージョン)に跨って   コンポーネントが冗長化されており、ゾーンレ   ベルの障害耐性を持つ ④ クラウドファースト・コンテナ化・ポータブ    ル・完全なコード管理・マイクロサービス化・   リリース自動化・etc... job webserver
  29. 29 29 (C) Recruit Co., Ltd. All rights reserved. クラウドネイティブ化

    ビジネス・組織・外部環境の変化に頑健なインフラストラクチャ設計 job worker job scheduler job webserver zone node zone node job worker job scheduler schedulable spot Scalable & Reliable job webserver
  30. 30 (C) Recruit Co., Ltd. All rights reserved. ALL OK?

    → NO!!!!! ❏ プロダクトが大きくなると、変更容易性が悪く なり、開発生産性が低下!
  31. 31 31 (C) Recruit Co., Ltd. All rights reserved. ジョブスケジューラー・ワークフローエンジン

    の実装詳細 ワークフローの定義 データ処理ロジックの構築 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import datetime from airflow.models import DAG from airflow.contrib.operators.bigquery_operator import BigQueryOperator from airflow.contrib.operators.bigquery_to_gcs import BigQueryToCloudStorageOperator # define DAG dag = DAG( "bq-to-gcs-job", default_args={...}, schedule_interval=datetime.timedelta(days=1), catchup=False, ) # define Task1 create_bq_table = BigQueryOperator( dag=dag, task_id="create-bq-table-task", sql="""select … from `google_cloud_project.dataset_src.table_src` … """, destination_dataset_table="google_cloud_project.dataset_dst.table_dst", use_legacy_sql=False, ) # define Task2 bq_table_to_gcs = BigQueryToCloudStorageOperator( dag=dag, task_id="bq-table-to-gcs-task", source_project_dataset_table="google_cloud_project.dataset_dst.table_dst", destination_cloud_storage_uris="gs://bukcet/path/to/object.csv", ) # define task dependecy create_bq_table >> bq_table_to_gcs データを集計し、 ストレージに保存する 実行コンテキストや、 依存関係などの定義 Apache Airflow よくある問題 • バージョンアップデートが大変...😑 • 別のワークフローエンジンに移行するのが超大 変......😂 なぜ発生するの? • データ処理ロジックの構築が『実装詳細に依存』 • ワークフローの定義が『実装詳細に依存』 Apache Airflow による実装例を基に 変更容易性に関する問題を探る ワークフローの定義 データ処理ロジックの構築
  32. 32 32 (C) Recruit Co., Ltd. All rights reserved. 「

    実装の詳細に依存する」 Layered Architecture ① アプリケーションレイヤもドメインレイヤも   インフラストラクチャレイヤの依存している インフラストラクチャレイヤ ドメインレイヤ アプリケーションレイヤ Job Scheduler や Workflow Engine の 機能を提供するツール(実装詳細) (ex) Apache Airflow / Kubeflow Pipelines ワークフローの定義 データ処理のロジック ② インフラストラクチャレイヤの変更影響がア   プリケーションレイヤやドメインレイヤ全体   に波及するため、変更容易性が低い
  33. 33 33 (C) Recruit Co., Ltd. All rights reserved. ① インフラストラクチャレイヤもアプリケー   

    ションレイヤもドメインレイヤに依存する インフラストラクチャレイヤ ドメインレイヤ アプリケーションレイヤ Job Scheduler や Workflow Engine の 機能を提供するツール(実装詳細) (ex) Apache Airflow / Kubeflow Pipelines ワークフローの定義 データ処理のロジック 「 抽象に依存する」 Layered Architecture 逆転 ② インフラストラクチャレイヤの変更影響がド   メインレイヤやアプリケーションレイヤに波   及しないため、変更容易性が高い
  34. 34 34 (C) Recruit Co., Ltd. All rights reserved. インフラストラクチャレイヤ

    ドメインレイヤ アプリケーションレイヤ Job Scheduler や Workflow Engine の 機能を提供するツール(実装詳細) (ex) Apache Airflow / Kubeflow Pipelines ワークフローの定義 データ処理のロジック インフラストラクチャレイヤ ドメインレイヤ アプリケーションレイヤ Job Scheduler や Workflow Engine の 機能を提供するツール(実装詳細) (ex) Apache Airflow / Kubeflow Pipelines ワークフローの定義 データ処理のロジック 依存性逆転の原則 変更容易性を維持するために、実装の詳細に依存させず抽象に依存するように設計 逆転
  35. 35 35 Agenda 1. 事業・組織について 2. チーム・プロダクトについて 3. 直面した問題と設計プラクティス 4.

    実装と運用 5. 新たな課題・今後の展望 6. まとめ 35 (C) Recruit Co., Ltd. All rights reserved.
  36. Kubernetes Cluster 36 36 (C) Recruit Co., Ltd. All rights

    reserved. Airflow DB Cloud SQL Cloud SQL Proxy Airflow DAGs/Logs Cloud Storage Airflow Webserver Airflow Scheduler Cloud Load Balancing Cloud Armor Identity-Aware Proxy Airflow Worker (by Task) Task Container (by Task) Job CI/CD Cloud Logging Kubernetes Engine region cluster Cloud Build Container Registry Developer ジョブプラットフォーム アーキテクチャ像
  37. セルフサービス化 × 優れた開発体験 を実現する工夫 37 37 (C) Recruit Co., Ltd.

    All rights reserved. 各種 スクリプト + Job Manifest Job CI/CD Project CI/CD Project Manifest project repository/team role/docs 自動生成 Job 自動登録 project dashboard 自動生成 Project 申請フォーム Job Infrastructure Cloud Logging Maintainer Developer Pick up! ・ジョブ開発運用に必要なリソース生成の自動化 ・ジョブ登録・更新の自動化 Illustration designed by Freepik From Flaticon Project Owner 各種 k8s/cloud resource 自動生成
  38. Kubernetes Cluster 38 38 (C) Recruit Co., Ltd. All rights

    reserved. Airflow DB Cloud SQL Cloud SQL Proxy Airflow DAGs/Logs Cloud Storage Airflow Webserver Airflow Scheduler Cloud Load Balancing Cloud Armor Identity-Aware Proxy Airflow Worker (by Task) Task Container (by Task) Job CI/CD Cloud Logging Kubernetes Engine region cluster Cloud Build Container Registry Developer Pick up! ・Region Cluster / Private Cluster によるクラスタ冗長化・セキュア化 ・Cluster autoscaling ・Cluster auotupgrade / Maintenance window による保守自動化 ・Airflow Scheduler / Webserver / Cloud SQL Proxy の冗長化  ・Deployment / HPA 利用  ・Pod Anti Affiniity によるホスト・ゾーン分散 ・Airflow Worker は Airflow Task 毎に on-demand 起動  ・Airlfow Kubernetes Executor 利用 ・その他  ・フルコンテナ化によるポータビリティ  ・Datadog monitoring / alert による定常監視 & 障害検知  ・Terraform / k8s Manifest / Helm / Kustomize によるコード管理 クラウドネイティブ化を実現する工夫
  39. Job CI/CD (Backend: workflowengine-a) 39 39 (C) Recruit Co., Ltd.

    All rights reserved. 39 39 Workflow Definition 自動生成 なし Dockerfile(s) (1task-1image) 依存性逆転の原則を実現する工夫 各種 スクリプト + Job Definition Workflow Engine A Workflow Engine B Workflow Engine C Non-Plugable Component Job CI/CD (Backend: plugable) Workflow Definition Dockerfile(s) (1task-1image) 各種 スクリプト + Job Definition Workflow Engine A Workflow Engine B Workflow Engine C Plugable Component dependency dependency 依存性を解決できていないワークフローエンジンの (非) 抽象化の例 依存性を解決したワークフローエンジンの抽象化の例 自動生成 自動生成 or dependency Illustration designed by Freepik From Flaticon
  40. Job CI/CD (Backend option: airflow) 40 40 (C) Recruit Co.,

    Ltd. All rights reserved. 40 40 (C) Recruit Co., Ltd. All rights reserved. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # Job Definition schema: job/v2 # define job metadata: name: bq-to-gcs-job spec: trigger: # { 実行スケジュール設定 (cron) } tasks: # define Task1 - name: create-bq-table-task spec: operator: query: runtimeVersion: v1 path: ./aa.sql # 別途実装する output: bigQuery: tableId: google_cloud_project.dataset_dst.table_dst truncate: { … } partitioning: { … } serviceAccount: sample-sa # deine Task2 - name: bq-table-to-gcs-task spec: operator: python: image: python:3.9 path: ./bb.py # 別途実装する resource: # { cpu/memory設定 } serviceAccount: sample-sa dependsOn: # define task dependency allOf: - name: create-bq-table-task status: success callback: onSuccess: - slackNotification: # { 正常系slack通知設定 } onFailure: - slackNotification: # { 異常系slack通知設定 } Illustration designed by Freepik From Flaticon aa.sql bb.py + + Airflow DAG 自動生成 Apache Airflow Container Registory Dockerfile(s) (1task-1image) Plugable Component example Backend option: Apache Airflow push deploy build pull Job Definition
  41. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # Job Definition schema: job/v2 # define job metadata: name: bq-to-gcs-job spec: trigger: # { 実行スケジュール設定 (cron) } tasks: # define Task1 - name: create-bq-table-task spec: operator: query: runtimeVersion: v1 path: ./aa.sql # 別途実装する output: bigQuery: tableId: google_cloud_project.dataset_dst.table_dst truncate: { … } partitioning: { … } serviceAccount: sample-sa # deine Task2 - name: bq-table-to-gcs-task spec: operator: python: image: python:3.9 path: ./bb.py # 別途実装する resource: # { cpu/memory設定 } serviceAccount: sample-sa dependsOn: # define task dependency allOf: - name: create-bq-table-task status: success callback: onSuccess: - slackNotification: # { 正常系slack通知設定 } onFailure: - slackNotification: # { 異常系slack通知設定 } Job CI/CD (Backend option: composer) 41 41 (C) Recruit Co., Ltd. All rights reserved. 41 41 (C) Recruit Co., Ltd. All rights reserved. Illustration designed by Freepik From Flaticon aa.sql bb.py + + Airflow DAG 自動生成 Cloud Composer Container Registory Dockerfile(s) (1task-1image) Plugable Component example Backend option: Cloud Composer pull deploy build push Job Definition
  42. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # Job Definition schema: job/v2 # define job metadata: name: bq-to-gcs-job spec: trigger: # { 実行スケジュール設定 (cron) } tasks: # define Task1 - name: create-bq-table-task spec: operator: query: runtimeVersion: v1 path: ./aa.sql # 別途実装する output: bigQuery: tableId: google_cloud_project.dataset_dst.table_dst truncate: { … } partitioning: { … } serviceAccount: sample-sa # deine Task2 - name: bq-table-to-gcs-task spec: operator: python: image: python:3.9 path: ./bb.py # 別途実装する resource: # { cpu/memory設定 } serviceAccount: sample-sa dependsOn: # define task dependency allOf: - name: create-bq-table-task status: success callback: onSuccess: - slackNotification: # { 正常系slack通知設定 } onFailure: - slackNotification: # { 異常系slack通知設定 } Job CI/CD (Backend option: argo) 42 42 (C) Recruit Co., Ltd. All rights reserved. 42 42 (C) Recruit Co., Ltd. All rights reserved. Illustration designed by Freepik From Flaticon aa.sql bb.py + + Argo Workflow Manifest 自動生成 Argo Workflows Container Registory Dockerfile(s) (1task-1image) Job Definition Plugable Component example Backend option: Argo Workflows pull deploy build push
  43. 直面した問題と設計プラクティス 43 43 (C) Recruit Co., Ltd. All rights reserved.

    ✔ インフラの信頼性が低く、データ処理リクエストの増加 にインフラが追いつかなかったり、メンテナンス時・障 害時に単一障害点起因のダウンタイムが発生してしまう ✔ 開発体験の悪いデータプラットフォームは、利用者から の問い合わせ数が増大し、その対応で工数が溶ける ✔ データ施策・プラットフォーム利用者が増加するほど、 データエンジニア工数不足がボトルネックになる ✔ プラットフォームが大きく成長するにつれて、各種コー ドの依存関係が複雑になり、あらゆる変更が困難になる 問題 設計プラクティス ✔ クラウドネイティブ化 ✔ 開発体験 (Developer Experience) の最適化 ✔ セルフサービス化 ✔ 依存関係逆転の原則の導入
  44. 44 (C) Recruit Co., Ltd. All rights reserved. ALL OK?

    → NO!!!!!
  45. 45 45 Agenda 1. 事業・組織について 2. チーム・プロダクトについて 3. 直面した問題と設計プラクティス 4.

    実装と運用 5. 新たな課題・今後の展望 6. まとめ 45 (C) Recruit Co., Ltd. All rights reserved.
  46. 新たな課題と今後の展望 46 46 (C) Recruit Co., Ltd. All rights reserved.

    課題 - インフラコストの肥大化 - アプリケーションコードの品質担保 - より高い隔離性が求められるデータの扱い - より高いサービスレベルが求められる事業・施策の扱い - etc... 展望 - リクルートのデータ活用をさらに高度化する機能拡張 - リクルートの全ての事業領域に展開するための非機能拡張 - etc...
  47. 47 We're Hiring!!! ❏ Career Site ❏ 学生向けキャリアサイト ❏ 中途採用向けテクノロジー職

    ❏ Blog ❏ Recruit Data Blog ❏ Recruit Tech Blog ❏ Direct Message ❏ Twitter : @kojisuganuma ❏ Linkedin: Koji Suganuma (C) Recruit Co., Ltd. All rights reserved.
  48. 48 48 Agenda 1. 事業・組織について 2. チーム・プロダクトについて 3. 直面した問題と設計プラクティス 4.

    実装と運用 5. 新たな課題・今後の展望 6. まとめ 48 (C) Recruit Co., Ltd. All rights reserved.
  49. まとめ 49 49 (C) Recruit Co., Ltd. All rights reserved.

    • スコープ ◦ データ分析向けジョブプラットフォーム ◦ データ活用の業務プロセス ◦ それを取り巻くエンジニア・データサイエンティスト・データプランナー • ゴール ◦ スケーラブルな業務運用プロセス設計 ▪ データ施策・プロダクト利用者の数に運用負荷を比例させない ◦ 信頼性が高いプロダクト開発 ▪ 高いスケーラビリティ・回復性・障害耐性を持つプロダクト ◦ 持続可能なプロダクト開発 ▪ ワークフローエンジンを実装詳細を隠蔽し、プロダクトの変更容易性を維 持する • プラクティス ◦ セルフサービス化 ◦ 開発体験の最適化 ◦ クラウドネイティブ化 ◦ 依存性逆転の原則の導入
  50. •マスター テキストの書式設定
 第 2 レベル
 第 3 レベル
 第 4

    レベル
 第 5 レベル マスタ タイトルの書式設定 50 Cloud Native Days Tokyo 2021 (C) Recruit Co., Ltd. All rights reserved.