Slide 1

Slide 1 text

1 1 徹底したDDD組織だからこそ実現したい Functional Data Mesh構想 TECH PLAY DataConference 2024 Kenichi Suzuki Loglass Inc.

Slide 2

Slide 2 text

2 新卒でNTTデータに入社。アーキテクチャ設計や統括業務に従事した後、よ り堅牢な開発を求めてプログラム言語理論(型システム、関数型等)の研究 に踏み込む。 その後、よりセキュアな世界を目指して、Visional(BizReach)にてサイバー セキュリティ事業の立ち上げや開発をリード、ContractSにて開発部長、技 術戦略室長、VP of Developmentを経て、2023年に株式会社ログラスに ジョイン。 X: @_knih 株式会社ログラス 鈴木健一 / Kenichi SUZUKI

Slide 3

Slide 3 text

3 Finally, safely-extensible and efficient language-integrated query PEPM '16: Proceedings of the 2016 ACM SIGPLAN Workshop on Partial Evaluation and Program ManipulationJanuary 2016 Pages 37–48https://doi.org/10.1145/2847538.2847542 Multi-Stage Programming、そして脆弱性レジリエンス × Clean Architecture https://engineering.visional.inc/blog/212/scalamatsuri2020-interview-msp/ 脆弱性レジリエンスを高めるための Clean Architecture https://yamory.io/blog/architecting-for-resilience/ エンタープライズアジャイル開発における品質管理とセキュリティ対策を yamoryで考える https://yamory.connpass.com/event/198588/ Scala3でコードは爆速になるマルチステージプログラミングの考え方 https://logmi.jp/tech/articles/324146 Dotty ではじめるマルチステージプログラミング入門 https://www.youtube.com/watch?v=gpQHgcIIzFY From Tagless-Final to Typed-Final: Program Transformations in the Final Style https://speakerdeck.com/dcubeio/from-tagless-final-to-typed-final-program-transformations-in-the-final-style ContractS Tech Book Vol.1 第8章 型の力で高品質にドメインをモデリングする ー関数型DDDに向けてー. https://nextpublishing.jp/book/14565.html Publications …etc.

Slide 4

Slide 4 text

4 ©2024 Loglass Inc. ログラスについて(5秒) 企業価値を向上する
 経営管理クラウド


Slide 5

Slide 5 text

5 ©2024 Loglass Inc. 5 次世代型 経営管理クラウド

Slide 6

Slide 6 text

6 ©2024 Loglass Inc. 経営企画は「企業価値の向上」をミッションに、企業経営にまつわるあらゆる業務を担っている

Slide 7

Slide 7 text

7 ©2024 Loglass Inc. ドメインモデリング 04.開発プロセス

Slide 8

Slide 8 text

8 ところが

Slide 9

Slide 9 text

9 データが モノリシック

Slide 10

Slide 10 text

10 ©2024 Loglass Inc. モノリシックデータの問題 ドメイン プロダクトスケールが難しい 問題領域に適さないデータソ リューション 影響が大きく、メンテナンスが困難 ドメイン ドメイン ドメイン ● データエンジニアリングとアプリケーション開発のスピードがあわない ● 影響範囲が大きく、調整コストが高くなる 仮説検証や価値創出の循環サイクルが鈍化するリスク

Slide 11

Slide 11 text

11 ©2024 Loglass Inc. 企業データの 記録‧維持‧管理 SoR (System of Record) 正しい管理‧運⽤ PDCA∕ウォーターフォー ル 顧客体験の向上 アジャイル ビジネスの創造 (事業成⻑のための洞察) OODA 会計∕⼈事∕⽣産管理等々 CRM∕EC∕SNS BI/BigData 顧客や企業との関係構築 SoE (System of Engagement) SoI (System of Insight) 洞察‧発⾒ 意思決定の確認 意思決定の⾃動化 意思決定の⽀援 3つのシステム形態:SoE, SoR, SoI

Slide 12

Slide 12 text

12 ©2024 Loglass Inc. トランザクションデータと分析データ 明細B 明細A 差異分析 汎用データベース SoR SoI さまざまな角度で 分析したい

Slide 13

Slide 13 text

13 ©2024 Loglass Inc. LineOrder Customer Dimension Promotion Dimension Time Dimension Product Dimension スタースキーマの例 ファクト ディメンション ディメンション ディメンション ディメンション ● ディメンションや各データが膨大になると結合コストが高くなりやすい

Slide 14

Slide 14 text

14 ©2024 Loglass Inc. 結合は掛け算的コスト Big-O Cheat Sheet. https://www.bigocheatsheet.com/ データ量の増加で 一気に性能劣化しやすい計算構造

Slide 15

Slide 15 text

15 ©2024 Loglass Inc. Parser Analyzer Rewriter Planner Executor SQL Result Set ここで実⾏計画が作られる stats data 参考:PostgreSQLにおけるPlannerの位置付け

Slide 16

Slide 16 text

16 ©2024 Loglass Inc. 最低コストパス 式書き換え(前処理) リレーション情報抽出 結合 パス 動的計画法 ベース 遺伝アルゴリズム ベース(GEQO) クエリ実⾏ 少ない 多い しらみつぶしに⾒ ていくぜ! 全部⾒てらんねぇ! パス探索 参考:PostgreSQLのクエリ最適化アルゴリズム ● パス探索と枝刈りは同時に行われるため、 PlannerとOptimizerの区別はない

Slide 17

Slide 17 text

17 ©2024 Loglass Inc. トランザクションデータと分析データ 明細B 明細A 差異分析 トランザクション 分析 SoR SoI 問題領域にあわせた 最適なデータの持ち 方をしたい

Slide 18

Slide 18 text

18 ©2024 Loglass Inc. プロダクトごとに、ドメインごとに、独立してデータを運用できる状態がのぞましい ドメイン データ ドメイン データ ドメイン データ

Slide 19

Slide 19 text

19 ©2024 Loglass Inc. プロダクトごとに、ドメインごとに、独立してデータを運用できる状態がのぞましい ドメイン データ ドメイン データ ドメイン データ このままだと データのサイロ化になってしまう

Slide 20

Slide 20 text

20 ©2024 Loglass Inc. Data Mesh

Slide 21

Slide 21 text

21 ©2024 Loglass Inc. Data Meshとは セルフサービスプラットフォーム データガバナンス コンプライアンス・プライバシー ポリシー 相互運用ポリシー (データ標準化) ドキュメントポリシー データをプロダクトとして捉え、ドメインごとに完結したデータ基盤を持つアーキテクチおよびそれを構築するパラダイム ベストプラクティス 実装例 チームへの提案 イネーブリング セキュリティポリシー ストレージ・ クエリエンジン データカタログ データ契約管理 ポリシー自動化 モニタリング・ 分析ツール 分析 データ 契約 運用 データ データプロダクト ドメインA ドメインB ドメインC ドメインD ドメインE Jochen Christ, ,Larysa Visengeriyeva, Simon Harrer, et al. DATA MESH ARCHITECTURE https://www.datamesh-architecture.com/ を参考に作成

Slide 22

Slide 22 text

22 ©2024 Loglass Inc. Data Mesh 4つの原則 ドメイン指向 オーナーシップ セルフサービス データ基盤 データ プロダクトマネジメント 横断的データガバナンス データを所有するのはドメイン ドメインごとに自律的にデータを管理・提供する。それぞれのドメインチームがそれぞれのデータ基盤を 保守する。これにより、中央集権的な体制で出現するボトルネックを回避する。 組織的なデータ管理を促進するプラットフォーム 各ドメインが自律的にデータプロダクトを開発・運用できるように支援する機能を備え、セルフサービスで データを扱えるようにする。 データをプロダクトと同じに扱う データをプロダクトとして他のチームや組織に提供する。提供先を顧客とみなし、データの信頼性確保や 価値向上に努める。 連合型の⾃動化されたガバナンス 個人情報保護などの共通ルールやデータプロダクト開発のインセ ンティブを設計し、データエコシステム 全体の最適化を行う。 共通ルールを各データプロダ クトの中に実装しつつ、各チームの代表がガバナンスチームとなり、中央 集権的な体制を作らないことでデータが管理されていない状態になることを避ける。 1 2 3 4

Slide 23

Slide 23 text

23 ©2024 Loglass Inc. 1 ドメイン指向オーナーシップ ドメイン ドメイン ドメイン サービス データ プロダクト データ プロダクト データ プロダクト データ プロダクト サービス サービス サービス データガバナンス コンプライアンス・プライバシー ポリシー 相互運用ポリシー (データ標準化) ドキュメントポリシー セキュリティポリシー ベストプラクティス 実装例 チームへの提案 イネーブリング セルフサービスプラットフォーム ストレージ・ クエリエンジン データカタログ データ契約管理 ポリシー自動化 モニタリング・ 分析ツール ● データパイプラインを含めドメインチームでデータを所有する 対して、従来はデータ基盤 チームが一括で管理

Slide 24

Slide 24 text

24 ©2024 Loglass Inc. 2 セルフサービスデータ基盤 ー 各ドメインが利用する共通基盤 セルフサービスプラットフォーム データガバナンス コンプライアンス・プライバシー ポリシー 相互運用ポリシー (データ標準化) ドキュメントポリシー ● データカタログをつくることで、全体としてデータ重複がないかを管理したり、閲覧権限制御を通したデータの取得を可能とする ベストプラクティス 実装例 チームへの提案 イネーブリング セキュリティポリシー ストレージ・ クエリエンジン データカタログ データ契約管理 ポリシー自動化 モニタリング・ 分析ツール ドメイン ドメイン ドメイン サービス データ プロダクト データ プロダクト データ プロダクト データ プロダクト サービス サービス サービス

Slide 25

Slide 25 text

25 ©2024 Loglass Inc. 3 データプロダクトマネジメント ● データをプロダクトと同じように扱う データガバナンス コンプライアンス・プライバシー ポリシー 相互運用ポリシー (データ標準化) ドキュメントポリシー セキュリティポリシー セルフサービスプラットフォーム ストレージ・ クエリエンジン データカタログ データ契約管理 ポリシー自動化 モニタリング・ 分析ツール ドメイン ドメイン サービス データ プロダクト データ プロダクト サービス サービス ベストプラクティス 実装例 チームへの提案 イネーブリング データ 契約 データ品質、SLO 各チームがそのデータの信頼性 を保証し、価値を提供する

Slide 26

Slide 26 text

26 ©2024 Loglass Inc. 4 横断的データガバナンス セルフサービスプラットフォーム データガバナンス コンプライアンス・プライバシー ポリシー 相互運用ポリシー (データ標準化) ドキュメントポリシー 自動化されたガバナンス。共通ルールを各データプロダクトに実装する。ガバナンスチームは各チームの代表から成り、中央集権的な体制にしない。 ベストプラクティス 実装例 チームへの提案 イネーブリング セキュリティポリシー ストレージ・ クエリエンジン データカタログ データ契約管理 ポリシー自動化 モニタリング・ 分析ツール ドメイン ドメイン ドメイン サービス データ プロダクト データ プロダクト データ プロダクト データ プロダクト サービス サービス サービス

Slide 27

Slide 27 text

27 そうは言っても すべてを実装するのは大変そう

Slide 28

Slide 28 text

28 しかし、片手落ちになるとサイロ化の悪夢が…

Slide 29

Slide 29 text

29 ©2024 Loglass Inc. ドメイン指向 オーナーシップ セルフサービス データ基盤 データ プロダクトマネジメント 横断的データガバナンス Data Meshのパラダイムを実現しやすくするにはどうしたらいいか プロダクトの品質だけでも大変なのに、デー タまで見るの? Data Mesh 4原則

Slide 30

Slide 30 text

30 ©2024 Loglass Inc. ドメイン指向 オーナーシップ セルフサービス データ基盤 データ プロダクトマネジメント 横断的データガバナンス Data Meshのパラダイムを実現しやすくするにはどうしたらいいか Data Mesh 4原則 Data Meshを実現しやすくするためのなにか

Slide 31

Slide 31 text

31 ©2024 Loglass Inc. 関数型とアーキテクチャ

Slide 32

Slide 32 text

32 ©2024 Loglass Inc. 関数型のスタイル ● 関数を組み合わせて目的のプログラムを構成するアプローチ ○ 関数と関数合成の性質によって モジュラリティの高い プログラムになる ○ SaaSプロダクト開発等、解像度を上げながら細かく改修していく場面で非常に有用 ○ (強力な型システムと組み合わせると安全性の高い開発がしやすくなる) ● 宣言的スタイル ● 純粋関数(副作用を避ける) ● イミュータブル ● 参照透過性

Slide 33

Slide 33 text

33 ©2024 Loglass Inc. 関数とは ● 集合 A の各々の要素に対して、集合 B の要素に対応させる仕方 ● 写像(map, mapping)ともいう A B 入力として取りうる値の集まり 出力しうる値の集まり f: A → B と書く f fun f(a: A): B = … val f: (A) -> B = … domain 定義域、始域 codomain 余域、終域

Slide 34

Slide 34 text

34 ©2024 Loglass Inc. 関数 入力に対して結果が 一意に定まっている (決定的) 同じ入力に対して 結果が一意に定まらない a1 a2 a3 b1 b2 b3 関数の例 a1 a2 a3 b1 b2 b3 A B 関数ではない例 A B

Slide 35

Slide 35 text

35 ©2024 Loglass Inc. 関数合成 f: A → B g: B → C g○f: A → C 関数f:A→Bおよびg:B→Cがあるとき、fとgの合成 g○f:A→Cは以下に定義される 図式化すると… A B C f g g○f

Slide 36

Slide 36 text

36 ©2024 Loglass Inc. 全域関数と部分関数 a3 (1)全域関数の例 a2 a1 b3 b2 b1 再利用性の高いドメインモジュールは 全域関数化しましょう A B a3 (2)部分関数の例 a2 a1 b3 b2 b1 A B プログラム的には例外になる。 (クラッシュしたり、処理が終わらな かったりする場合も含まれる) ?

Slide 37

Slide 37 text

37 ©2024 Loglass Inc. 部分関数は割れ窓 部分関数f 全域関数g 合成関数 g.f A B? B C A C? 例外が伝播する

Slide 38

Slide 38 text

38 ©2024 Loglass Inc. 代数的データ型=直積・直和の性質を持つデータ型 直積 (direct product) 直和 (direct sum) 代数的データ型 (Algebraic Data Types; ADTs)

Slide 39

Slide 39 text

39 ©2024 Loglass Inc. 代数的データ型=直積・直和の性質を持つデータ型 ● 直積(direct production, Cartesian product, デカルト積) ● 集合Aの要素aと、集合Bの要素bから作られるペア(a,b)の全体から成る集合 ○ A = {a,b,c}、B={1,2} A×B = {(a,1),(a,2), (b,1),(b,2), (c,1),(c,2)} case class RGB( red: Int, green: Int, blue: Int) 256 × 256 × 256 16,777,216通り 例1 例2

Slide 40

Slide 40 text

40 ©2024 Loglass Inc. 代数的データ型=直積・直和の性質を持つデータ型 ● 直和(direct sum, sum) ※Aから来た要素か、Bから来た要素かを区別するために、0や1 等のタグを付与する表現もある A⊕B = { (0,a) | a ∈ A } ∪ { (1,b) | b ∈ B } A⊕B = { a | a ∈ A } ∪ { (b) | b ∈ B }   ただし A ∩ B = { 0 } A = {a,b,c}、B={1,2} A⊕B = {a,b,c,1,2} 例1 例2 enum Color: case Red, Green, Blue, Yellow, Cyan 1+1+1+1+1 5通り

Slide 41

Slide 41 text

41 ©2024 Loglass Inc. 代数的データ型=直積・直和の性質を持つデータ型 直積 直和 問題空間を適切に表現しうる 安全性の高い型表現できる 不正な値がドメインの中 に入り込みづらくなる データの質を コントロールしやすい

Slide 42

Slide 42 text

42 ©2024 Loglass Inc. データ変換を実装するうえで重要な、参照透過性 ● 純粋関数 ○ 全域性があり、副作用がない ● 決定的 ○ 同じインプットを与えれば、常に同じアウトプットが返ってくる ● 冪等性 ○ 複数回適用しても同じ結果が得られる

Slide 43

Slide 43 text

43 ©2024 Loglass Inc. 現実的なプログラムには副作用がある、いかに制御するか Core Shell 純粋関数 イミュータブル 不純関数(副作用を扱う) ミュータブル Call

Slide 44

Slide 44 text

44 ©2024 Loglass Inc. Clean Architecture と関数型 Entities Controller G atew ay Presenter Use Cases UI W eb Devices D B External Interfaces Martin, R. C. (2017). Clean Architecture: A Craftsman's Guide to Software Structure and Design. Prentice Hall.

Slide 45

Slide 45 text

45 ©2024 Loglass Inc. Clean Architecture と関数型 Entities Controller G atew ay Presenter Use Cases UI W eb Devices D B External Interfaces 依存の方向 内側は外側に依存しない (関知しない)

Slide 46

Slide 46 text

46 ©2024 Loglass Inc. Clean Architecture と関数型 Entities Controller G atew ay Presenter Use Cases UI W eb Devices D B External Interfaces 怪しいデータ データ

Slide 47

Slide 47 text

47 ©2024 Loglass Inc. Clean Architecture と関数型 Entities Controller G atew ay Presenter Use Cases UI W eb Devices D B External Interfaces 怪しいデータ データ 正規化 Validation サニタイズ Validなデータ 代数的データ型等 で精密に取り扱う領 域を型で表現

Slide 48

Slide 48 text

48 ©2024 Loglass Inc. Clean Architecture と関数型 Entities Controller G atew ay Presenter Use Cases UI W eb Devices D B External Interfaces 怪しいデータ データ 正規化 Validation サニタイズ Validなデータ 代数的データ型等 で精密に取り扱う領 域を型で表現 関数型のアプローチを使うことによって、 データ品質を担保しやすいアーキテクチャにできる

Slide 49

Slide 49 text

49 ©2024 Loglass Inc. 合成可能性によって、プログラムに柔軟性がもたらされる 関数の単位でデータ変換の 正しさが保証されている ● 品質を担保しながら、プログラムを容易に組み換えできる f: A → B g: B → C g○f: A → C A B C f g g○f

Slide 50

Slide 50 text

50 ©2024 Loglass Inc. 合成可能性によって、プログラムに柔軟性がもたらされる 関数の単位でデータ変換の 正しさが保証されている ● 品質を担保しながら、プログラムを容易に組み換えできる f: A → B h: B → D g○h: A → D A B C f g g○h D h g: B → C 組み換えが容易

Slide 51

Slide 51 text

51 ©2024 Loglass Inc. 合成可能性によって、プログラムに柔軟性がもたらされる 関数の単位でデータ変換の 正しさが保証されている ● 品質を担保しながら、プログラムを容易に組み換えできる f: A → B h: B → D g○h: A → D A B C f g g○h D h g: B → C 組み換えが容易 巨⼤なETLパイプラインを⼩さい単位で分割することで、 ETLに品質と柔軟性をもたらす

Slide 52

Slide 52 text

52 ©2024 Loglass Inc. 関数型と型の恩恵 ドメイン指向 オーナーシップ セルフサービス データ基盤 データ プロダクトマネジメント 横断的データガバナンス Data Mesh 4原則 Data Meshを実現しやすくするためのなにか → 関数型アーキテクチャ

Slide 53

Slide 53 text

53 ©2024 Loglass Inc. 関数型アーキテクチャ 関数型と型の恩恵 アプリケーション データ パイプライン 変更容易性 正確性 履行容易性 (契約の権利・義務) 合成可能性 型表現力 型安全性 ドメイン指向 オーナーシップ セルフサービス データ基盤 データ プロダクトマネジメント 横断的データガバナンス 依存関係をコントロールし やすくモジュラー 型安全により契約を担保し やすい 品質をコントロールしやすいため、 改善サイクルを回しやすい Data Mesh 4原則

Slide 54

Slide 54 text

54 ©2024 Loglass Inc. まとめ

Slide 55

Slide 55 text

55 ©2024 Loglass Inc. まとめ ● 関数型アプローチは 柔軟性が高く品質を作り込みやすい ● このアプローチを下敷きにすると Data Meshの運用をコントロールしやすく 、DDDをより強 固にする ● ただし、DataMeshはプロダクトの考えを持っており、 データ変換をあちこちで作りすぎると負 債化しやすい

Slide 56

Slide 56 text

56 ©2024 Loglass Inc. 絶賛、エンジニア・プロダクトマネージャー募集中 一緒にプロダクト開発の次元をあげていきたい、良い景気づくりにご興味のある方を絶賛 募集しています!! https://job.loglass.jp/ 気軽にやり取りしたい方は @_knih へ 興味ある方もない方も カジュアル面談Welcome です!

Slide 57

Slide 57 text

57

Slide 58

Slide 58 text

58 ©2024 Loglass Inc. Appendix

Slide 59

Slide 59 text

59 ©2024 Loglass Inc. 参考:チーム体制の例 ドメイン チーム データ イネーブリング チーム ガバナンス チーム (代表制) データ プラットフォーム チーム ドメイン チーム ドメイン チーム プロダクトオーナー デリバリ マネージャー (各種調整) メタデータ データ契約 データ品質 ・セキュリティ データ契約やSLOを中心に関連するドメインチームとの 調整機能が必要になる