Slide 1

Slide 1 text

© UPSIDER, Inc. 1 Temporalを⽤いた Sagaの実践とプロセスモデリング 株式会社 UPSIDER Konn Temporal公式のZiggyを参考に、⾃分で描いたイラストです(以降のページも同様)。

Slide 2

Slide 2 text

© UPSIDER, Inc. 2 ⾃⼰紹介 ● Konn ○ 新卒でFintech業界を知る ● 2024/11からUPSIDERにJoin ○ 請求基盤チームの立ち上げメンバー ● Gopher歴は5年ほど ● Temporal歴1年半ほど ● 夜は温泉とマリカ配信で1日をReset

Slide 3

Slide 3 text

© UPSIDER, Inc. 3 UPSIDERはAI化された総合金融機関へ 当社はこれまで決済事業に特化し、お客様の成長をサポートしてきました。しかし今後は総合金融機関として進化していきます。 挑戦者を応援する法人カード https://up-sider.com/ https://shi-harai.com/ https://breakthrough-grid.com/ https://ai-keiri.up-sider.com/ https://www.upsidercap.com/ https://president-card.com/ 請求書カード払いサービス ビジネスリーダー向けコミュニティ 経営者のための経理丸投げサービス 経営者の挑戦を支える法人カード グロースデットファンド 与信枠の増枠&広告媒体 仕入れの後払いを実現 Adboost BUSINESS 提供サービス

Slide 4

Slide 4 text

© UPSIDER, Inc. 4 Today’s goal 請求基盤 という複雑かつデータ整合性が⼤切 なドメインで なぜTemporalを採⽤し、どう設計しているのか を知ってもらう

Slide 5

Slide 5 text

© UPSIDER, Inc. 5 1. SagaパターンとTemporal 2. プロセスモデリングとTemporal 3. まとめ ⽬次

Slide 6

Slide 6 text

© UPSIDER, Inc. 6 01.SagaパターンとTemporal

Slide 7

Slide 7 text

© UPSIDER, Inc. 7 請求書 債権 入金 消込 仕訳 サービス モジュールA モジュールB モジュールC DB データ整合性

Slide 8

Slide 8 text

© UPSIDER, Inc. 8 請求書 債権 入金 消込 仕訳 Service モジュールA モジュールB モジュールC DB DB DB データ整合性

Slide 9

Slide 9 text

© UPSIDER, Inc. 9 Transaction A Transaction B Transaction C Sagaは一連のローカルトランザクションの連鎖として実装する Success Sagaパターン

Slide 10

Slide 10 text

© UPSIDER, Inc. 10 Transaction A Transaction B Transaction C 一連のローカルトランザクションの連鎖として実装する Fail compensation B 失敗 compensation A Sagaパターン

Slide 11

Slide 11 text

© UPSIDER, Inc. 11   Activity Activity Activity Workflow Temporal Temporalがオーケストレーターとなる Saga = Workflow Transaction = Activity TemporalでSaga

Slide 12

Slide 12 text

© UPSIDER, Inc. 12   Activity Activity Activity Workflow Temporal Temporalのメリット Sagaの状態自動保存 失敗時の自動リトライ イベント履歴の記録 Sagaの再実行 状態保存、リトライなどは意識しなくて良い。 TemporalでSaga

Slide 13

Slide 13 text

© UPSIDER, Inc. 13 Temporal workflowにおいて補償処理はActivityの前に登録します 1. 補償登録 2. Activity実行 3. 補償実行 補償処理

Slide 14

Slide 14 text

© UPSIDER, Inc. 14   Activity A Workflow 補償処理自体の失敗は握りつぶして最後まで完遂することを優先する Activity B Activity C 失敗   Compensation Compensation B Compensation A fail 失敗 補償の失敗は無視 補償処理の失敗

Slide 15

Slide 15 text

© UPSIDER, Inc. 15   Workflow 実施するActivityの処理順序を工夫することで補償処理を楽に 失敗しやすい Activity 失敗しやすい Activity 決定点 リトライすれば良い Activity 補償 ワークフローは必ず最後まで 処理順序の最適化

Slide 16

Slide 16 text

© UPSIDER, Inc. 16 02.プロセスモデリングとTemporal

Slide 17

Slide 17 text

© UPSIDER, Inc. 17 💡請求基盤は長時間にわたるドメインを取り扱う 5/1 5/14 5/15 通知 5/16 … 消込 請求 督促 8/1 不良債権処理 Long Runninng Process

Slide 18

Slide 18 text

© UPSIDER, Inc. 18 Sleep処理、外部からのシグナル受け付けやタイマー処理など実装 5/1 5/14 5/15 5/16 … 8/1 Sleep Sleep Signal Long Runninng Process

Slide 19

Slide 19 text

© UPSIDER, Inc. 19 💡ワークフローをコラボレーションし、業務プロセスを実現 ※あくまでイメージです ビジネスプロセスモデリング

Slide 20

Slide 20 text

Temporalの特徴  Durable ● 実行状態を失わない ● ダウンタイム後も再開可能  Code-first ● TypeScript / Go などで記述 ● 複雑な業務ロジックを表現  Workflow Collaboration ● 役割ごとに分割 ● 他ワークフローに Signal送信 結果: 長期、複雑な業務プロセスを安全に表現できる © UPSIDER, Inc. 19

Slide 21

Slide 21 text

© UPSIDER, Inc. 21 03.まとめ

Slide 22

Slide 22 text

 データ整合性の担保 請求基盤チームでは、 Temporalを活用して複雑なドメインにおけるデータ整合性を担保し ている  業務プロセスの Workflow化 長期にわたる業務プロセスは Workflowとして表現し、状態管理と実行制御を行っている © UPSIDER, Inc. 22 まとめ

Slide 23

Slide 23 text

© UPSIDER, Inc. 23 UPSIDERでは一緒に働くエンジニアを募集しています We are hiring!