Slide 1

Slide 1 text

primeNumber Inc. © PaaSとSaaSの境目で信頼性と開発速度を両立する 〜TROCCO®のこれまでとこれから〜 @アーキテクチャConference 2024 2024/11/26 株式会社primeNumber プロダクト開発本部 CTO室 室長 中根 直孝

Slide 2

Slide 2 text

© primeNumber Inc. 2 © primeNumber Inc. 2 会社概要 会社名 代表 創業 メンバー数 累計調達額 オフィス 株式会社primeNumber 代表取締役CEO 田邊 雄樹 2015年11月 約100名 約34億円 東京都品川区上大崎3丁目1番1号 JR東急目黒ビル5F

Slide 3

Slide 3 text

© primeNumber Inc. 3 © primeNumber Inc. 3 あらゆるデータを、 ビジネスの力に変える。 我々は、「あらゆるデータを、ビジネスの力に変える」 データテクノロジーカンパニーです。 データが爆発的に増えていく時代に、 誰もがすばやく、簡単にデータを使える環境を構築し、 データ活用までのプロセスを最適化。 高度なテクノロジーと独自のアイデアで、 世界中のビジネスを支援します。 VISION

Slide 4

Slide 4 text

© primeNumber Inc. 4 データ基盤構築・運用の支援SaaS TROCCO® © primeNumber Inc. 4 詳細は 後ほど

Slide 5

Slide 5 text

© primeNumber Inc. 5 © primeNumber Inc. 5 データカタログSaaS COMETA® 2024年 TROCCO® から派生

Slide 6

Slide 6 text

© primeNumber Inc. 6 TROCCO®とCOMETA® TROCCO®:「統合」を軸にデータ基盤の構築や運用を支援 COMETA®:データの発見・理解・活用を促進するデータカタログ データをビジネスに活用するまでのステップ

Slide 7

Slide 7 text

© primeNumber Inc. 7 たくさんのお客様にご利用いただいております 業界・業種問わず、さまざまな企業や団体にご利用いただいています。

Slide 8

Slide 8 text

© primeNumber Inc. 8 中根 直孝 (@gtnao) 株式会社primeNumber Staff Software Engineer プロダクト開発本部 CTO室 室長 ● 2017 エンジニアキャリアスタート ● 2018/11 primeNumber入社 ○ TROCCO®のリリースと同月 ● TROCCO®の開発に黎明期から従事 ○ 2018〜 ゼロイチで色々 ○ 2023〜 組織横断で色々

Slide 9

Slide 9 text

© primeNumber Inc. 9 AGENDA 01. 本日のお話 02. TROCCO®とは 03. これまで 04. これから

Slide 10

Slide 10 text

© primeNumber Inc. 10 本日のお話 2019 2018 2020 2022 2021 2023 2024 前半 3/4:これまで (当時のアーキテクチャ/課題/意思決定) 後半 1/4:現在進行系、これから (組織/事業/プロダクトが拡大する中での課題) 2018/11 初期リリース 2018/06 開発スタート 海外リージョン展開 COMETA®の リリース 様々な機能拡充

Slide 11

Slide 11 text

© primeNumber Inc. 11 どのような方に向けて? ※ 色々なトピックを話していくので、それ以外でも何かしらの参考になれば! 1 2 (主にスタートアップの)様々なフェーズの開発者の方 ジョブ基盤、PaaS的性質を備えたサービスの裏側に興味がある方

Slide 12

Slide 12 text

© primeNumber Inc. 12 AGENDA 01. 本日のお話 02. TROCCO®とは 03. これまで 04. これから

Slide 13

Slide 13 text

© primeNumber Inc. 13 TROCCOの守備範囲 主にデータ基盤構築/運用の「統合」の部分を担う

Slide 14

Slide 14 text

© primeNumber Inc. 14 統合だけ? 嬉しいの?

Slide 15

Slide 15 text

© primeNumber Inc. 15 TROCCOの価値 1 多様なデータソースの対応 DWH、RDB、ファイル、広告レポート、SaaS… 2 日々の運用 エラー通知、自動リトライ、API Update追従 3 複雑なパイプライン構築 データ基盤を構築/運用する際の辛みを丸っと引き受ける

Slide 16

Slide 16 text

© primeNumber Inc. 16 TROCCOの機能スタック 運用支援 機能 データ転送機能 (use Embulk) Transform系機能 (スクラッチ & use dbt) ワークフロー機能 (スクラッチ) 日夜動き続ける①ジョブ系の機能と、その②管理を支える機能に大別 2 1

Slide 17

Slide 17 text

© primeNumber Inc. 17 メインのデータ転送機能

Slide 18

Slide 18 text

© primeNumber Inc. 18 データ転送機能の概要 UIで転送の設定を作成 TROCCO®のUIフォーム

Slide 19

Slide 19 text

© primeNumber Inc. 19 データ転送機能の概要 転送実行時に、入力情報を元にEmbulkのYAMLを作成 TROCCO®のUIフォーム Embulkのconfig.yml

Slide 20

Slide 20 text

© primeNumber Inc. 20 データ転送機能の概要 データ転送ジョブのフロー 実行単位でコンテナが立ち上がり、終了時に破棄 TROCCO®のジョブ画面

Slide 21

Slide 21 text

© primeNumber Inc. 21 各種ジョブを Orchestrateするワークフロー機能

Slide 22

Slide 22 text

© primeNumber Inc. 22 ワークフロー機能の概要 GUIで各種ジョブの依存関係を定義し、実行順序を制御 TROCCO®のワークフロー機能画面 データ転送設定

Slide 23

Slide 23 text

© primeNumber Inc. 23 ワークフロー機能の概要 変数を切り替えながらのループや、フローのネストなど 複雑なフローも組める ループ実行機能の例

Slide 24

Slide 24 text

© primeNumber Inc. 24 PaaSとSaaSの境目で

Slide 25

Slide 25 text

© primeNumber Inc. 25 ジョブプラットフォームサービスとしての特性 200,000超 / day 1,000 1日あたりのジョブ実行数の年平均 2024年現在 1日あたり20万件以上のジョブが実行される プラットフォームへと成長

Slide 26

Slide 26 text

© primeNumber Inc. 26 ジョブプラットフォームサービスとしての特性 ● XX:00にスパイク(スケジュール設定されやすいため) ● 深夜1時にピーク ● 24/365でなにかしらのジョブが動いている 00:00(JST) 08:00 16:00 1日のジョブ実行傾向

Slide 27

Slide 27 text

© primeNumber Inc. 27 求められる信頼性 お客様がサービスに最も求めていることは 設定した時間にジョブが動き 想定した通りのデータが配置されていること 求められるジョブ基盤の強固な信頼性

Slide 28

Slide 28 text

© primeNumber Inc. 28 SaaSに期待される体験 設定の接続確認 変更時の差分確認 実行プレビュー 一方で 設定をいかにラクに行えるかも期待される価値の一つ

Slide 29

Slide 29 text

© primeNumber Inc. 29 PaaSとSaaSの境目で SaaS PaaS PaaSに求められる信頼性を第一に担保しつつ SaaSとしての体験を高める開発をいかに行っていくか TROCCO®の開発に求められるチャレンジ

Slide 30

Slide 30 text

© primeNumber Inc. 30 AGENDA 01. 本日のお話 02. TROCCO®とは 03. これまで 04. これから

Slide 31

Slide 31 text

© primeNumber Inc. 31 AGENDA 1. 本日のお話 2. TROCCO®とは 3. これまで 3.1. 黎明期のアーキテクチャ刷新 3.2. データ基盤構築/運用のサービスへ 3.3. テスト戦略の試行錯誤 3.4. SREによる信頼性向上の取り組み 4. これから

Slide 32

Slide 32 text

© primeNumber Inc. 32 まずは、誕生時まで遡る

Slide 33

Slide 33 text

© primeNumber Inc. 33 黎明期 ● プロダクトの需要があるかを探っているフェーズ ● 利用ユーザー ○ 自社利用、トライアルユーザー 2019 2018 2020 2022 2021 2023 2024 2018/11 初期リリース 2018/06 開発スタート 2019年春頃から 徐々に有償契約いただけるお客様が

Slide 34

Slide 34 text

© primeNumber Inc. 34 体制や技術背景 体制 エンジニア 1 ~ 3人名で開発 社内の技術スタック AWS RubyOnRails での開発が多い 当時の技術動向(主観) Dockerを使った開発が市民権を得てくる Kubernetesはまだエッジな技術 AWS EKSはまだ東京リージョンに来ていない (※開発スタート直後)

Slide 35

Slide 35 text

© primeNumber Inc. 35 当時のアーキテクチャ SQSをポーリングするECS TaskがそのままEmbulkを実行

Slide 36

Slide 36 text

© primeNumber Inc. 36 アーキテクチャの課題 スケールイン デプロイ ECS on EC2 スケールアウト 環境差分 実行中のジョブがノード上に存在するとスケールインできない Lambdaを使ったりと原始的な手法で試行錯誤 実行に長時間かかっているジョブがあると、そのECSタスクを ローリングアップデートできずデプロイが一向に完了しない 2018年当時、ECS on Fargateに10GB以上のボリュームを 割り当てることができず、データ転送サービスとしては致命的に ジョブ基盤側はECS on EC2を選択せざるを得ない ECS Task数 = 同時実行可能数 SQSへの流量を見てスケールアウトするなど試行錯誤 起動に時間がかかる ローカル環境では素のDocker、本番環境ではECSタスク アーキテクチャの差分がある状態での開発 トピック 具体的な課題

Slide 37

Slide 37 text

© primeNumber Inc. 37 徐々に有償契約いただけるお客様が!

Slide 38

Slide 38 text

© primeNumber Inc. 38 1日あたりのジョブ数の増加 40 300 約1,000 /day ● 有償契約いただけるお客様が増えるに従って、1日あたりのジョブ数が急増 ● 既存アーキテクチャのままでは、今後立ち行かなくなるだろうという危機感 1日あたりのジョブ実行数の月平均

Slide 39

Slide 39 text

© primeNumber Inc. 39 EKS、ap-northeast-1に上陸! 乗るしかないこの🌊🏄

Slide 40

Slide 40 text

© primeNumber Inc. 40 Kubernetes採用後のアーキテクチャ ジョブ基盤部分をEKS(Kubernetes)を使ったアーキテクチャに刷新

Slide 41

Slide 41 text

© primeNumber Inc. 41 Dispatcher層 ● Dispatcher層を新たに設ける ● SQSをポーリングし、k8sのJobを登録するまでの責務 ● k8sのDeploymentで常時稼働

Slide 42

Slide 42 text

© primeNumber Inc. 42 ジョブ管理 ● ジョブの立ち上げはk8sにおまかせ ● 転送単位でコンテナが起動し、終わったら破棄

Slide 43

Slide 43 text

© primeNumber Inc. 43 スケールアウト/イン ● スケールの課題は、Cluster Autoscalerで解決 ○ スケールアウトだけでなく、スケールインもよしなに

Slide 44

Slide 44 text

© primeNumber Inc. 44 アーキテクチャの課題解決 スケールイン デプロイ ECS on EC2 スケールアウト 環境差分 Cluster Autoscalerにより、Nodeが空いてるとスケールイン 実行中のJobがある場合にも完了を待ってくれる イメージタグを差し替えるだけでデプロイ可能に 実行中のJobがある場合にも影響を受けない EKSへの乗り換えで脱却 Cluster Autoscalerにより、 Jobを立ち上げるためのNodeリソースがないとスケールアウト ローカル環境でも、 本番同様のKubernetesアーキテクチャで開発可能に トピック Kubernetesアーキテクチャ変更後

Slide 45

Slide 45 text

© primeNumber Inc. 45 リソースの細かな制御 Kubernetes採用における更なる恩恵も k8s JobのYAMLの一部 データ転送ジョブごとに リソースを細かく調整することが可能に リソース増強オプション TROCCO®の一つのオプションとしても提供

Slide 46

Slide 46 text

© primeNumber Inc. 46 見送ったこと UI部分はKubernetes化せず、今まで通りECS(Fargate)で運用 1 画面のトラフィックが少ないサービス 安定運用できているほど画面を触らなくなることも 2 ECSの方が運用は簡単なのは確か 3 積極的な動機がない Why?

Slide 47

Slide 47 text

© primeNumber Inc. 47 200,000超 / day 1,000 1日あたりのジョブ実行数の年平均 変わっていないこと、変わったこと ● 大枠のアーキテクチャは2024年現在も変わっていない ○ 1日のジョブ数は200倍超に ○ Kubernetesは偉大 ● UI部分のECS(Fargate)も現役 ○ Kubernetesは適材適所

Slide 48

Slide 48 text

© primeNumber Inc. 48 AGENDA 1. 本日のお話 2. TROCCO®とは 3. これまで 3.1. 黎明期のアーキテクチャ刷新 3.2. データ基盤構築/運用のサービスへ 3.3. テスト戦略の試行錯誤 3.4. SREによる信頼性向上の取り組み 4. これから

Slide 49

Slide 49 text

© primeNumber Inc. 49 基盤の安定化 → 機能拡充フェーズへ

Slide 50

Slide 50 text

© primeNumber Inc. 50 大幅な機能拡充期 基盤の安定化により、機能拡充に集中できるように 2019 2018 2020 2022 2021 2023 2024 ワークフロー機能 データカタログ機能 dbt連携機能 チーム機能 データマート機能 フリープラン提供

Slide 51

Slide 51 text

© primeNumber Inc. 51 データ転送以外の ケイパビリティに着手

Slide 52

Slide 52 text

© primeNumber Inc. 52 データ転送機能以外のケイパビリティ ● データ転送後に、DWH上で変形するELT(extract load tranfrom)が主流に ● それらのジョブをOrchestrateするための機能の必要性 運用支援 機能 データ転送機能 (use Embulk) Transform系機能 (スクラッチ & use dbt) ワークフロー機能 (スクラッチ) 本日はワークフロー機能についてお話しします

Slide 53

Slide 53 text

© primeNumber Inc. 53 ワークフロー機能の技術選定 データ転送機能におけるEmbulkのように 既存のOSSを活用するか否か OSSを活用 👍 初期開発/拡充の工数削減 👎 OSSの仕様と密結合に スクラッチ 👍 柔軟性が高い 👎 工数増/枯れていない 0 → 1 OR

Slide 54

Slide 54 text

© primeNumber Inc. 54 OSSの仕様と密結合に(Embulkの例) TROCCO®のスキーマ設定画面 お客様が Embulkの世界でのデータ型を 意識する必要がある Embulkのデータ型 ● long ● double ● string ● boolean ● timestamp ● json

Slide 55

Slide 55 text

© primeNumber Inc. 55 ワークフロー機能の技術選定 OSSを活用 👍 初期開発/拡充の工数削減 👎 OSSの仕様と密結合に スクラッチ 👍 柔軟性が高い 👎 工数増/枯れていない 0 → 1 OR 様々なデータソースに対応しないといけないデータ転送機能と比較したときに 既存資産を利用することのレバレッジが効きにくいはず Embulkのマネージドサービスから データ基盤構築の総合SaaSを目指すに当たって柔軟性を重視

Slide 56

Slide 56 text

© primeNumber Inc. 56 ワークフローのアーキテクチャ(当時) コンテナ起動 タスクの リストアップ 1 ワークフローを実行すると フローを管理するためのコンテナが立ち上がる 2 タスクのリストアップ (停止位置から実行の場合は直前のstatusを取得) id status requires 1 succeeded [ ] 2 not_running [ ] 3 not_running [1, 2]

Slide 57

Slide 57 text

© primeNumber Inc. 57 実行可能な タスクを抽出 3 実行可能なタスク = 依存するタスクが全て成功しているタスク を抽出 ループ開始

Slide 58

Slide 58 text

© primeNumber Inc. 58 タスクを実行 タスクの同期 4 抽出した実行可能タスクを実行 TROCCO®内の別機能のAPIを叩くイメージ 5 タスクの同期 実際のジョブのステータスを取得 (Reconciliation) id status requires 1 succeeded [ ] 2 error [ ] 3 not_running [1, 2] データ転送ジョブ

Slide 59

Slide 59 text

© primeNumber Inc. 59 終了判定 6 到達可能なタスクが存在しない場合に ループを抜ける ループ終了 一定時間sleep ※ 当時のアーキテクチャ 現在は、ループのidle時間を効率的に使う目的で、一つのPodで複数のワークフローを管理しています

Slide 60

Slide 60 text

© primeNumber Inc. 60 ワークフローのアーキテクチャ 実際にはもっと複雑 ● キャンセル ● 停止位置からの再実行 ● 同時実行制限 ● 停止条件 ○ エラーでも先に進む設定 ● ループ機能 ● ワークフローからワークフローを呼べる ○ 上記のトピックについて、多重に入れ子になった際の考慮が必要

Slide 61

Slide 61 text

© primeNumber Inc. 61 AGENDA 1. 本日のお話 2. TROCCO®とは 3. これまで 3.1. 黎明期のアーキテクチャ刷新 3.2. データ基盤構築/運用のサービスへ 3.3. テスト戦略の試行錯誤 3.4. SREによる信頼性向上の取り組み 4. これから

Slide 62

Slide 62 text

© primeNumber Inc. 62 求められる変更失敗率の低減

Slide 63

Slide 63 text

© primeNumber Inc. 63 ● DWH、RDBMS、ストレージなど データにまつわる基本的なコネクタ ● 既に存在するOSSの Embulkプラグインを利用 データ転送機能のコネクタ数増加 2019年春頃 2022年秋頃 25 100コネクタ ● 広告、SaaSなど幅広い ユースケースに対応 ● 新たにEmbulkプラグインを開発 初期のコネクタ傾向 拡充されていくコネクタの傾向 約100種の超えるコネクタ ※ コネクタ=「データ転送機能の元/先」

Slide 64

Slide 64 text

© primeNumber Inc. 64 サービス/開発背景 基盤の安定化に伴い 常に、多数/多様なジョブが動いている状況 変更頻度が高く、利用顧客数も多いコネクタの存在 例:Google広告 ● 数ヶ月でEOL、1年で廃止になるAPIのバージョン → 変更頻度高 ● 広告データ統合のユースケース → 利用顧客数増 1デプロイ/day のルーティン デプロイ時のアプリケーションレイヤでの信頼性が求められる

Slide 65

Slide 65 text

© primeNumber Inc. 65 ジョブプラットフォームサービスとしての宿命 昨今、高頻度デプロイやソフトウェアの潜在的な複雑性から 「リリースしてから数時間もテスト期間」という考え もあるが… お客様のデータパイプラインに組み込まれるTROCCO®は その考え方が通用しないケースも多い

Slide 66

Slide 66 text

© primeNumber Inc. 66 TROCCO®のテスト戦略的特徴 外部サービスとの通信が多いサービス特性 通常、ユニットテストを書く場合は、モックを使うが… インテグレーションテスト層を一般的より厚くする必要性 外部サービスとの連携こそが、 TROCCO®のコアドメイン(価値の源泉) モックを使って済ますだけでは不十分

Slide 67

Slide 67 text

© primeNumber Inc. 67 初期のインテグレーションテスト 管理画面 ● 「[QA] 」と名のつく設定を 一括で実行でできる画面 ● ステージング環境にて 確認したい設定を各自用意しておく ● 本番リリース前などに一括実行 ● 原始的で管理が大変 ● ジョブの終了ステータスが 「成功」かどうかの判定しかできない ○ 成功したが転送されたデータが 想定通りではない、といった ケースは防げない 課題

Slide 68

Slide 68 text

© primeNumber Inc. 68 TROCCO®を使って TROCCO®をテストできるのでは🤔

Slide 69

Slide 69 text

© primeNumber Inc. 69 データチェック機能 ● ワークフローに組み込み ● 1行1列の数値を返すクエリと その条件を設定 ● 例 ● 重複件数をCOUNTし 1以上の場合にエラーとする

Slide 70

Slide 70 text

© primeNumber Inc. 70 新しいインテグレーションテスト EXPECTED_TABLE ACTUAL_TABLE 事前に用意 一致している ことを確認する クエリ 転送レイヤー 確認レイヤー テスト用のBigQueryテーブルへ転送

Slide 71

Slide 71 text

© primeNumber Inc. 71 新しいインテグレーションテスト 約100種のコネクタで同様のワークフローを作成

Slide 72

Slide 72 text

© primeNumber Inc. 72 新しいインテグレーションテスト(Pros/Cons) ローカル環境では試せない(ステージング 環境に設定を作ってるだけなので) Flakyなものがちょこちょこ発生する 元データの方に行が追加されていたりなど ワークフロー機能に不備があるとテストに ならない 構造化して書けるようになったことで設定 が肥大化。以前よりも複雑性が増した PROS コードを書けなくてもテストを作成可能 QAテスターの方の力を借りて量産 各コネクタごとに作成しネストして管理 見通しが良くなった ワークフローをキックするAPIを用い、CIで ステージングへデプロイのたびに自動実行 データが正しく転送されていることを検証 できる ワークフロー機能自体のテストにもなって いる? CONS + + + + + - - - -

Slide 73

Slide 73 text

© primeNumber Inc. 73 その他の取り組み リリース後の見守り リリースしたコネクタを利用した ジョブの失敗率が増加していないか redashで確認 インテグレーションテスト層での網羅は不可能 多重に防御する アップデート チェックツール APIアップデート時に 廃止されるフィールドがある (時に想定外のフィールドも) ↓ チェックするツールを作成 Embulkプラグインの カナリアリリース 新旧バージョンをイメージに入れ load pathを切り替え 顧客単位で徐々に適用

Slide 74

Slide 74 text

© primeNumber Inc. 74 AGENDA 1. 本日のお話 2. TROCCO®とは 3. これまで 3.1. 黎明期のアーキテクチャ刷新 3.2. データ基盤構築/運用のサービスへ 3.3. テスト戦略の試行錯誤 3.4. SREによる信頼性向上の取り組み 4. これから

Slide 75

Slide 75 text

© primeNumber Inc. 75 一人目SREの入社!

Slide 76

Slide 76 text

© primeNumber Inc. 76 一人目SREの入社 ● 一人目SRE社員を中心にSREチームが誕生 ● これまで目を瞑ってきたさまざまな箇所を ひたすらテコ入れしてくれる ● 本日はアーキテクチャに関連する改善を いくつかピックアップ ○ セキュリティ/しくみづくりなどでも活躍してくれています😌🙏

Slide 77

Slide 77 text

© primeNumber Inc. 77 Suspend Mode(課題) どうしても避けられない DBに繋がらない瞬間が発生するメンテナンス もちろん、事前にお客様にアナウンス済みだが… メンテナンス開始時に実行中のジョブはエラーになってしまう お客様側で再実行が必要に

Slide 78

Slide 78 text

© primeNumber Inc. 78 Suspend Mode(ソリューション) ● Embulkの実行中に 適宜DBにステータスなどを 書き込み ● DBに繋がらず ジョブ自体がエラーに Before

Slide 79

Slide 79 text

© primeNumber Inc. 79 Suspend Mode(ソリューション) ● Redisにsuspendフラグを設ける ● DBのアクセスが発生する箇所で suspend状態なら一定時間sleep ● 実行状況の更新が一時停止するが ジョブはエラーにならない ● UIはアクセスできなくなるが 一番守りたいジョブを落とさず に済む ○ メンテナンスが早めに終了 すれば少しの停止で済む After

Slide 80

Slide 80 text

© primeNumber Inc. 80 事前スケールアウト(課題) XX:00にジョブが一斉に登録される TROCCO®のスパイク特性 Cluster Autoscalerの限界 Nodeが立ち上がるまでに一定時間がかかる お客様が設定した時刻から ジョブの起動までに数分の遅れが発生してしまうことも

Slide 81

Slide 81 text

© primeNumber Inc. 81 事前スケールアウト(ソリューション) スケールアウト前 ● Nodeが十分に 立ち上がっていない状態 Node Node 未起動の Node

Slide 82

Slide 82 text

© primeNumber Inc. 82 事前スケールアウト(ソリューション) リソース確保用のPod(Deployment) ● Nodeまるまる一台分を占有する リソースを要求 ● デフォルトのreplica数は0 ● PriorityClassで 他のPodを追い出さず 自身は追い出されやすい preemption設定にしておく

Slide 83

Slide 83 text

© primeNumber Inc. 83 事前スケールアウト(ソリューション) スパイクの数分前 ● リソース確保Pod(Deployment)の replica数を事前に立ち上げたい ノード数に ● crontabで実行 Control Plane XX:57 リソース確保 Pod kubectl scale crontab

Slide 84

Slide 84 text

© primeNumber Inc. 84 事前スケールアウト(ソリューション) スケールアウト ● リソース確保Podにより ノードが起動 ● 既にJobが動いている ノードでは立ち上がらない ○ Jobを追い出さない Node Node 事前に起動 リソース確保 Pod リソース確保 Pod XX:57~XX:00

Slide 85

Slide 85 text

© primeNumber Inc. 85 事前スケールアウト(ソリューション) スパイク ● 確保されたノードで Jobが立ち上がる ● リソース確保Podが 追い出される Node Node Node リソース確保 Pod XX:00

Slide 86

Slide 86 text

© primeNumber Inc. 86 事前スケールアウト(ソリューション) スパイク後 ● リソース確保Pod(Deployment)の replica数を0にする Control Plane XX:00 リソース確保 Pod kubectl scale crontab

Slide 87

Slide 87 text

© primeNumber Inc. 87 事前スケールアウト(ソリューション) スケールイン ● 空いているNodeがスケールイン Node Node 空いているNode

Slide 88

Slide 88 text

© primeNumber Inc. 88 自動メンテ実行(課題) 意図せず終了してしまうPodの存在 日に数十万ジョブ動いていると、どうしても発生することがある TROCCO側で管理しているステータスは「実行中」のまま お客様からはまだ動いているように見える。エラーなら通知が来て再実行が可能だが… オンコール担当が管理画面からステータスを更新 オペレーション負荷、対応の遅れ

Slide 89

Slide 89 text

© primeNumber Inc. 89 自動メンテ実行(ソリューション) job_id status 1 executing 2 executing 3 executing job_id 1 3

Slide 90

Slide 90 text

© primeNumber Inc. 90 自動メンテ実行(ソリューション) job_id status 1 executing 2 error 3 executing job_id 1 3 TROCCO DB上のステータスとk8s側のDiffを取って自動でエラーに倒す

Slide 91

Slide 91 text

© primeNumber Inc. 91 信頼性を担保しつつ 日々の開発が行えてきた💪 これにて一件落着?😌🍵

Slide 92

Slide 92 text

© primeNumber Inc. 92 2024年期…

Slide 93

Slide 93 text

© primeNumber Inc. 93 組織の拡大! 正社員100人規模 エンジニアチームも5、6チームに分割

Slide 94

Slide 94 text

© primeNumber Inc. 94 事業の拡大! 韓国、インド市場への進出 󰏮󰏝 1日あたりのジョブ実行数は20万件を超える

Slide 95

Slide 95 text

© primeNumber Inc. 95 プロダクトの拡大! TROCCO®の「データカタログ機能」が に

Slide 96

Slide 96 text

© primeNumber Inc. 96 AGENDA 01. 本日のお話 02. TROCCO®とは 03. これまで 04. これから

Slide 97

Slide 97 text

© primeNumber Inc. 97 AGENDA 1. 本日のお話 2. TROCCO®とは 3. これまで 4. これから 4.1. 海外展開 4.2. コネクタ開発 4.3. モジュール分割

Slide 98

Slide 98 text

© primeNumber Inc. 98 海外展開 ● 韓国とインドへの事業展開 ● 自国内からデータを出したくない というニーズ

Slide 99

Slide 99 text

© primeNumber Inc. 99 海外展開 東京リージョンと同等のアーキテクチャを ソウル、ムンバイリージョンに構築

Slide 100

Slide 100 text

© primeNumber Inc. 100 Terraformのリファクタリング ● 合わせてTerraformのリファクタリング ○ 2リージョン目の構築工数の軽減に ● 詳細はこちらの記事を ○ https://zenn.dev/primenumber/articles/096db41ddfe039

Slide 101

Slide 101 text

© primeNumber Inc. 101 AGENDA 1. 本日のお話 2. TROCCO®とは 3. これまで 4. これから 4.1. 海外展開 4.2. コネクタ開発 4.3. モジュール分割

Slide 102

Slide 102 text

© primeNumber Inc. 102 コネクタの開発生産性 海外展開による 海外特有のコネクタの需要 国内でもまだまだサポート できていないコネクタが JavaでEmbulkプラグインを 実装できるエンジニアの不足 一部のエンジニアへの レビュー負荷 コネクタ開発の生産性向上が更に求められる オフショア開発のスタート 容易なオンボーディング が求められる

Slide 103

Slide 103 text

© primeNumber Inc. 103 初期のコネクタ開発 コネクタ単位でEmbulkプラグインを都度作る Embulkに読み込ませるYAML例

Slide 104

Slide 104 text

© primeNumber Inc. 104 少し前までのコネクタ開発 データを取得する部分はRubyで実装 ローカルファイルをインプットとしてEmbulkを実行という二段階方式 Embulkに読み込ませるYAML例

Slide 105

Slide 105 text

© primeNumber Inc. 105 直近のコネクタ開発(現在進行形) 汎用的なHTTPリクエストによるデータ取得のためのプラグイン embulk_input_httpを利用する Embulkに読み込ませるYAML例 更に…

Slide 106

Slide 106 text

© primeNumber Inc. 106 直近のコネクタ開発(現在進行形) Embulkに読み込ませるYAML例 設定フォーム コネクタ開発時には APIの仕様に従って YAMLを書く (宣言的) YAMLを元に 動的にフォームや Embulkのconfig.ymlを 作成するメタプロ機構

Slide 107

Slide 107 text

© primeNumber Inc. 107 APIの仕様の調査を担当 YAMLへの落とし込みを担当 変換の基盤を実装を担当 分業してコネクタを開発できる体制を 直近のコネクタ開発(現在進行形)

Slide 108

Slide 108 text

© primeNumber Inc. 108 プラグインも引き続き開発 ・ 従来方式のプラグイン開発も、必要に応じて継続 ● 新しいコネクタ開発方式の欠点 ○ 大容量のデータ転送には不向き ○ HTTPのAPIが前提 ● 直近では、Databricksのin/outに対応

Slide 109

Slide 109 text

© primeNumber Inc. 109 AGENDA 1. 本日のお話 2. TROCCO®とは 3. これまで 4. これから 4.1. 海外展開 4.2. コネクタ開発 4.3. モジュール分割

Slide 110

Slide 110 text

© primeNumber Inc. 110 チームの分割とモノリス 2019 2018 2020 2022 2021 2023 2024 チームやプロダクトの分割の一方で、Railsのモノリスのまま

Slide 111

Slide 111 text

© primeNumber Inc. 111 モジュール分割 ● 肥大モノリスあるある話 ○ 変更時の別機能への意図しない影響 ○ コードの認知負荷増 ● 確実な動機がある箇所から分割を考える ○ 事業単位 → COMETA®から考える 2019 2018 2020 2022 2021 2023 2024

Slide 112

Slide 112 text

© primeNumber Inc. 112 モジュラーモノリス(packs-rails) packs-rails ● app/models,views,controllersなどを packs//app/ 以下に移動することが可能 ● 仮想的なnamespace ○ 参照元を書き換えずに済む ● 可逆性が高い ○ 気に入らなかったら戻すことが容易

Slide 113

Slide 113 text

© primeNumber Inc. 113 実際にやってみた(packs-rails) 変更ファイル数は多いが ほとんどが ディレクトリ移動= rename

Slide 114

Slide 114 text

© primeNumber Inc. 114 モジュラーモノリス(packwerk) packwerk ● Shopify製のモジュラーモノリス のためのGem ● モジュール間の意図しない依存 などを検知してくれる ● Lint(静的解析)ツールの 位置付け ● TODOとしてやり過ごすことが 可能 package_todo.yml

Slide 115

Slide 115 text

© primeNumber Inc. 115 漸進的改善 漸進的な改善が行いやすい packs-rails packwerk 仮モジュール間の 依存関係を把握 ファイルを移動して 試行錯誤

Slide 116

Slide 116 text

© primeNumber Inc. 116 可能な限り選択を遅らせる 「Clean Architecture 達人に学ぶソフトウェアの構造と設計」 私の好みは、いざというときのために、サービス を作れそうなところまで切り離すというものであ る。ただし、コンポーネントはできるだけ長い期 間、同じアドレス空間に存在させておく。これ は、サービスの選択肢を残しているのだ。 p.164

Slide 117

Slide 117 text

© primeNumber Inc. 117 APIの拡充、Terraform Providerの提供 ローンチから6年リリース経ち 数年以上継続利用いただいているお客様も 設定の管理が課題になってくる TROCCO® Terraform Provider 以前から要望の多い 設定のコード管理に答える Public APIの拡充 エンジニアを一定の ターゲットとするSaaSとしては まだまだ不足がある課題 API 開発したAPIを利用

Slide 118

Slide 118 text

© primeNumber Inc. 118 To Be Continued…

Slide 119

Slide 119 text

© primeNumber Inc. 119 最後にいくつか宣伝をさせてください

Slide 120

Slide 120 text

© primeNumber Inc. 120 会場 開催日時 東京ミッドタウン・ホール 2024年12月10日(火) primeNumber 主催 01(zeroONE)2024

Slide 121

Slide 121 text

© primeNumber Inc. 121 We Are Hiring ! primeNumberではプロダクトづくりに携わるさまざまな職種を絶賛募集しております! まずは、お気軽にカジュアル面談からでも! 募集職種 ・ソフトウェアエンジニア ・SRE ・エンジニアリングマネージャー ・プロダクトマネージャー ・テクニカルライター ・デザイナー 採用サイト

Slide 122

Slide 122 text

© primeNumber Inc. 122 ブース出展しております ! お気軽にお立ち寄りください! ノベルティも配布しております!

Slide 123

Slide 123 text

Thank you!