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

徹底したDDD組織だからこそ実現したい Functional Data Mesh 構想

徹底したDDD組織だからこそ実現したい Functional Data Mesh 構想

TECH PLAY DataConference 2024

Kenichi SUZUKI

January 25, 2024
Tweet

More Decks by Kenichi SUZUKI

Other Decks in Technology

Transcript

  1. 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.
  2. 10 ©2024 Loglass Inc. モノリシックデータの問題 ドメイン プロダクトスケールが難しい 問題領域に適さないデータソ リューション 影響が大きく、メンテナンスが困難

    ドメイン ドメイン ドメイン • データエンジニアリングとアプリケーション開発のスピードがあわない • 影響範囲が大きく、調整コストが高くなる 仮説検証や価値創出の循環サイクルが鈍化するリスク
  3. 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
  4. 13 ©2024 Loglass Inc. LineOrder Customer Dimension Promotion Dimension Time

    Dimension Product Dimension スタースキーマの例 ファクト ディメンション ディメンション ディメンション ディメンション • ディメンションや各データが膨大になると結合コストが高くなりやすい
  5. 15 ©2024 Loglass Inc. Parser Analyzer Rewriter Planner Executor SQL

    Result Set ここで実⾏計画が作られる stats data 参考:PostgreSQLにおけるPlannerの位置付け
  6. 16 ©2024 Loglass Inc. 最低コストパス 式書き換え(前処理) リレーション情報抽出 結合 パス 動的計画法

    ベース 遺伝アルゴリズム ベース(GEQO) クエリ実⾏ 少ない 多い しらみつぶしに⾒ ていくぜ! 全部⾒てらんねぇ! パス探索 参考:PostgreSQLのクエリ最適化アルゴリズム • パス探索と枝刈りは同時に行われるため、 PlannerとOptimizerの区別はない
  7. 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/ を参考に作成
  8. 22 ©2024 Loglass Inc. Data Mesh 4つの原則 ドメイン指向 オーナーシップ セルフサービス

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

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

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

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

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

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

    横断的データガバナンス Data Meshのパラダイムを実現しやすくするにはどうしたらいいか Data Mesh 4原則 Data Meshを実現しやすくするためのなにか
  15. 32 ©2024 Loglass Inc. 関数型のスタイル • 関数を組み合わせて目的のプログラムを構成するアプローチ ◦ 関数と関数合成の性質によって モジュラリティの高い

    プログラムになる ◦ SaaSプロダクト開発等、解像度を上げながら細かく改修していく場面で非常に有用 ◦ (強力な型システムと組み合わせると安全性の高い開発がしやすくなる) • 宣言的スタイル • 純粋関数(副作用を避ける) • イミュータブル • 参照透過性
  16. 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 余域、終域
  17. 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
  18. 36 ©2024 Loglass Inc. 全域関数と部分関数 a3 (1)全域関数の例 a2 a1 b3

    b2 b1 再利用性の高いドメインモジュールは 全域関数化しましょう A B a3 (2)部分関数の例 a2 a1 b3 b2 b1 A B プログラム的には例外になる。 (クラッシュしたり、処理が終わらな かったりする場合も含まれる) ?
  19. 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
  20. 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通り
  21. 42 ©2024 Loglass Inc. データ変換を実装するうえで重要な、参照透過性 • 純粋関数 ◦ 全域性があり、副作用がない •

    決定的 ◦ 同じインプットを与えれば、常に同じアウトプットが返ってくる • 冪等性 ◦ 複数回適用しても同じ結果が得られる
  22. 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.
  23. 45 ©2024 Loglass Inc. Clean Architecture と関数型 Entities Controller G

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

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

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

    atew ay Presenter Use Cases UI W eb Devices D B External Interfaces 怪しいデータ データ 正規化 Validation サニタイズ Validなデータ 代数的データ型等 で精密に取り扱う領 域を型で表現 関数型のアプローチを使うことによって、 データ品質を担保しやすいアーキテクチャにできる
  27. 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に品質と柔軟性をもたらす
  28. 52 ©2024 Loglass Inc. 関数型と型の恩恵 ドメイン指向 オーナーシップ セルフサービス データ基盤 データ

    プロダクトマネジメント 横断的データガバナンス Data Mesh 4原則 Data Meshを実現しやすくするためのなにか → 関数型アーキテクチャ
  29. 53 ©2024 Loglass Inc. 関数型アーキテクチャ 関数型と型の恩恵 アプリケーション データ パイプライン 変更容易性

    正確性 履行容易性 (契約の権利・義務) 合成可能性 型表現力 型安全性 ドメイン指向 オーナーシップ セルフサービス データ基盤 データ プロダクトマネジメント 横断的データガバナンス 依存関係をコントロールし やすくモジュラー 型安全により契約を担保し やすい 品質をコントロールしやすいため、 改善サイクルを回しやすい Data Mesh 4原則
  30. 55 ©2024 Loglass Inc. まとめ • 関数型アプローチは 柔軟性が高く品質を作り込みやすい • このアプローチを下敷きにすると

    Data Meshの運用をコントロールしやすく 、DDDをより強 固にする • ただし、DataMeshはプロダクトの考えを持っており、 データ変換をあちこちで作りすぎると負 債化しやすい
  31. 57

  32. 59 ©2024 Loglass Inc. 参考:チーム体制の例 ドメイン チーム データ イネーブリング チーム

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