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

貴重なデータ、捨ててませんか?~ OSSで始めるイベントソーシングのススメ

貴重なデータ、捨ててませんか?~ OSSで始めるイベントソーシングのススメ

通常、システムはその処理結果を RDB に対して読み書きします。しかし別の選択肢もあります。処理の結果ではなく、その過程をデータとして保存するイベントソーシングなら、これまでの方法では失われていたかもしれない貴重なデータを永続化することが可能です。このセッションでは、イベントソーシングと、簡単にイベントソーシングを始めるための開発フレームワーク Sekiban をご紹介します。

Sekiban は、アプリケーションがイベントソーシングと CQRS パターンに基づいてデータを扱えるようにするための C# フレームワークです。イベントソーシングと CQRS はとても有用なソフトウェアパターンですが、実際に使用する際には多くの実装上の複雑さを伴います。Sekiban は、開発者がそうした複雑さをできるだけ意識せずイベントソーシングを用いられるようにすることを目指しています。Sekiban は、コマンド・イベントデータの自動永続化、イベントデータの再生、および自由なクエリの定義と実行を可能とします。現在のバージョンでは、データストアとして Azure Cosmos DB と Amazon Dynamo DB を選択できます。将来的には PostgreSQL にも対応する計画です。Sekiban は完全なオープンソースソフトウェアです。

Tomohisa Takaoka

February 29, 2024
Tweet

More Decks by Tomohisa Takaoka

Other Decks in Technology

Transcript

  1. 株式会社ジェイテックジャパンの紹介 • 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 • New York 所在

    J-Tech Creations, Inc. の 東京拠点。 • B2C / B2B アプリケーションを 開発‧運⽤する Sler。 • .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。
  2. DB ステートソーシング Front-End Web Server Application データ処理の流れ 1. 現在の状態を読み出す。 2.

    状態を変更する。 3. 変更後の状態を DB に保存する。 (古い状態は削除される) ステートソーシングの特徴 • データを処理した結果を保存する。 • 参照と更新に同じモデルを使える。 (CRUD) 1 2 3 買い物カート コーヒー 紅茶 買い物カート コーヒー
  3. イベントソーシング データ処理の流れ 1. イベントを再⽣し、 現在の状態を再現する。 2. コマンドを⽣成し、 どう変更するかを伝える。 3. コマンドを実⾏し、それによって発⽣する

    イベントを履歴に追加する。 イベントソーシングの特徴 • データを処理する過程を保存する。 • 参照と更新のモデルが異なる。 (クエリとコマンド) DB Front-End Web Server Application 買い物カート コーヒー コマンド カートに 紅茶を追加 1 2 3 イベント履歴 コーヒーが 追加された
  4. ステートソーシングでは失われるデータ - コーヒー コーヒーを追加する - コーヒー - ジュース - コーヒー

    - ジュース - 紅茶 - コーヒー - 紅茶 ジュースを追加する 紅茶を追加する ジュースを削除する 1. 購⼊しなかったものの興味を持ったアイテムの情報が保存されない 2. 全ての状態の保存は可能、しかしどのような変更があったかを知るには 状態を⽐較して差分を取る必要がある(状態変化の理由が保存されない)
  5. イベントソーシングではどうなる? コーヒーを追加する ジュースを追加する 紅茶を追加する ジュースを削除する コーヒーが追加された コーヒーが追加された ジュースが追加された コーヒーが追加された ジュースが追加された

    紅茶が追加された コーヒーが追加された ジュースが追加された 紅茶が追加された ジュースが削除された 1. カートに⼊れた履歴に基づいてサジェストが可能 ー データの利活⽤に有利 2. 状態変化の理由を容易に追跡可能 ー 監査やデバッグに有利
  6. ステートソーシングのメリット‧デメリット メリット • 概念が分かりやすい。 • データの参照やメンテナンスが 容易。 • 多くのライブラリや フレームワークを活⽤できる。

    デメリット • 状態変化の履歴が記録されない。 • 過去の状態の復元が困難。 • データストアの分割と、 スケーリングがしづらい。
  7. イベントソーシングのメリット‧デメリット メリット • すべての変更が記録される。 • 過去の状態を再現可能。 • データの改ざんがしづらい。 • データストアの分割と、

    スケーリングがしやすい。 デメリット • クエリにイベント再⽣が必要。 (パフォーマンスが悪い) • 実装が複雑になりやすい。 • データ量が増⼤しやすい。 • データメンテナンスがしづらい。
  8. Event Sourcing CQRS イベントソーシングとCQRS Client Command Event Event History Projection

    Query CQRS とは? • コマンド‧クエリ責任分離 • データの参照系と更新系を分離する イベントソーシングと組み合わせる理由 • コマンド実⾏ → 概念上イベントが発⽣ • コマンド実⾏時に状態を変更するのでは なく、イベントをそのまま記録する • イベント再⽣ → クエリ実⾏可能 Materialized View
  9. Sekiban の紹介 • イベントソーシング / CQRS ⽤のアプリケーション開発フレームワーク • ⾔語は C#

    • データストアに Microsoft Azure Cosmos DB / Amazon DynamoDB、 PostgreSQL にも対応済み。 • 2023年12⽉にオープンソースソフトウェアとして公開 (Apache 2.0)、 有料プランはない。 • 名称 Sekiban (⽯板) は、古代の多くの⽂明で耐久性に優れた記録媒体として ⽯の板が使われていたことに由来。⽇本発の OSS として敢えて⽇本語名に。
  10. Sekiban でできること • イベントソーシング / CQRS の構成要素の宣⾔的記述。 ◦ Command ◦

    Event ◦ Aggregate ◦ Projection ◦ Query • コマンド‧イベントのデータストアへの⾃動保存。 • データストアへの接続情報だけで実⾏可能なシンプル設計。 • コマンド‧クエリの⾃動テストを Given-When-Then パターンで書ける テスト⽤フレームワーク。 • ASP.NET Core による Web API の⾃動⽣成機能。
  11. Sekiban の現状と今後 現状 • 5つ以上のプロジェクトで 使⽤‧運⽤中 • ⽐較的⼩規模なアプリケーション 開発に有⽤(開発効率の向上) 今後

    • 採⽤事例の増加 • 対応 DB の拡⼤ ◦ MySQL, MongoDB • ⼤規模システム対応 ◦ マテリアライズドビュー ◦ 分散システム