Movatterモバイル変換


[0]ホーム

URL:


Shuhei Fujita, profile picture
Uploaded byShuhei Fujita
PPTX, PDF31,704 views

イベント・ソーシングを知る

Embed presentation

Downloaded 48 times
イベント・ソーシングを知る より価値の高いソフトウェア開発      のために
なんのはなし?• ソフトウェアの設計的な話• ソフトウェアの情報をどのように永続化  して扱うか(ソーシング, Sourcing)• いつもと少し違うアプローチを紹介しま  す
例: 本のレンタルサービス1.   ユーザが本を登録する2.   本はユーザなら誰でも借りられる3.   本を借りた人が本を返す4.   本がまた借りられるようになる(2に戻る)
「フツーに」考える
たぶんこうなる                      本テーブル的なものタイトル           貸し出しONE PIECENARUTO
たぶんこうなる1. スタンが「HUNTER×HUNTER」を登録   タイトル            貸し出し   ONE PIECE   NARUTO   HUNTER×HUNTER
たぶんこうなる1. スタンが「HUNTER×HUNTER」を登録2. カイルが「HUNTER×HUNTER」を借りる  タイトル            貸し出し  ONE PIECE  NARUTO  HUNTER×HUNTER   カイルが借り出し中
たぶんこうなる1. スタンが「HUNTER×HUNTER」を登録2. カイルが「HUNTER×HUNTER」を借りる3. カイルが「HUNTER×HUNTER」を返す  タイトル            貸し出し  ONE PIECE  NARUTO  HUNTER×HUNTER
たぶんこうなる1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる      タイトル            貸し出し      ONE PIECE      NARUTO      HUNTER×HUNTER   ケニーが借り出し中
状態を中心に考えるステート・ソーシング
ステート・ソーシング•   従来の一般的な考え方•   ステート=状態•   状態中心のソフトウェア設計•   あらゆる情報は状態が永続化される• 最新の状態を常に記憶しておくのが一般  的
フツーですね
見落とされがちな問題• 現在の状態はわかるが…• 状態が変化した理由や経緯が全て失われ  る• ソフトウェアにとって非常に価値の高い  情報• 履歴やログで記録をとるのは限界がある
ステート・ソーシングの問題を解決するためにイベント・ソーシングとは
イベント中心に捉える• 様々な出来事(イベント)の結果、状態が変  化する• 「状態」はイベントの結果に過ぎず、本  質ではないのではないか(という考え方)
イベントを記録する• ソフトウェアで起こる全てのイベントを  記録する• 記録されたイベントは変更や削除をしな  い• 「状態」は記録しません!• 何が起きたかだけを淡々と記録します
ほんとにそのまま記録します1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる                             このままです      タイトル            貸し出し      ONE PIECE      NARUTO      HUNTER×HUNTER   ケニーが借り出し中
いやいや、でも状態は必要で     しょ?
イベントを再生する• 記録されたイベントを順に再生すること  で、現在の状態を導出できる• 1つずつイベントを辿れば必ず今の状態に  たどり着きます
イベントを再生する順番に辿ります1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる                     記録されているイベン      タイトル        貸し出し    ト      ONE PIECE      NARUTO
イベントを再生する1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる      タイトル            貸し出し      ONE PIECE      NARUTO      HUNTER×HUNTER
イベントを再生する1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる      タイトル            貸し出し      ONE PIECE      NARUTO      HUNTER×HUNTER   カイルが借り出し中
イベントを再生する1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる      タイトル            貸し出し      ONE PIECE      NARUTO      HUNTER×HUNTER
イベントを再生する1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる      タイトル            貸し出し      ONE PIECE      NARUTO      HUNTER×HUNTER   ケニーが借り出し中
イベントを再生する1.   スタンが「HUNTER×HUNTER」を登録2.   カイルが「HUNTER×HUNTER」を借りる3.   カイルが「HUNTER×HUNTER」を返す4.   ケニーが「HUNTER×HUNTER」を借りる                             最新の状態が再現      タイトル            貸し出し      ONE PIECE      NARUTO      HUNTER×HUNTER   ケニーが借り出し中
イベント・ソーシングのすごいと      ころ• ソフトウェアの完全な履歴が手に入る• ソフトウェアの任意の部分あるいは全体  を「ある時点」に簡単に再現できる• 有用な設計と相性が良い – ドメイン駆動設計(DDD) – コマンドクエリ責務分離(CQRS)
イベント・ソーシングすごい!
残念ながら問題点も
パフォーマンス• 「最新の状態」を得るために、毎回膨大  な量のイベントをリプレイしていたら大  変• 大量のイベントを捌かなければならない• ストレージ容量を多く使用する可能性
バージョニング• 仕様変更が起こったら、過去のイベント  をどう処理するか• 最新の状態のみ影響を考えればよいス  テート・ソーシングと違って、大量の過  去のイベントにも影響が出る
実装が複雑• イベントを記録してリプレイする機構を  実装しないといけない• 様々な問題に対処するために、様々な仕  組みを導入する必要があり、さらに複雑  さに輪をかける – キャッシング – イベントのアップデータ – 参照系の処理への対処
最後に• ステート・ソーシングの問題を認識する – 当たり前すぎて気づかなかったり• イベント・ソーシングの可能性 – いろいろ問題はありますが、ステート・ソー   シングでは成し得ない価値の提供ができるの   では?
参考• Greg Young流CQRS - Mark Nijhof• Why Event Sourcing?• Event Sourcing and CQRS, Let's use it.• state ソーシング、 event ソーシング 【ス  タイルの選択肢】• event とメッセージング 【きっと、良い  パターン】

Recommended

PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PDF
マイクロサービス 4つの分割アプローチ
PDF
ドメイン駆動設計 本格入門
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
イミュータブルデータモデル(世代編)
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
SQL大量発行処理をいかにして高速化するか
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
PDF
オブジェクト指向できていますか?
PDF
テスト文字列に「うんこ」と入れるな
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
イミュータブルデータモデルの極意
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PPTX
Redisの特徴と活用方法について
PDF
怖くないSpring Bootのオートコンフィグレーション
PPTX
Apache Avro vs Protocol Buffers
PDF
オブジェクト指向エクササイズのススメ
PPTX
本当は恐ろしい分散システムの話
PPT
Glibc malloc internal
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
マイクロにしすぎた結果がこれだよ!

More Related Content

PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PDF
マイクロサービス 4つの分割アプローチ
PDF
ドメイン駆動設計 本格入門
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
イミュータブルデータモデル(世代編)
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
マイクロサービス 4つの分割アプローチ
ドメイン駆動設計 本格入門
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
イミュータブルデータモデル(世代編)
コンテナ未経験新人が学ぶコンテナ技術入門

What's hot

PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
SQL大量発行処理をいかにして高速化するか
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
PDF
オブジェクト指向できていますか?
PDF
テスト文字列に「うんこ」と入れるな
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
イミュータブルデータモデルの極意
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PPTX
Redisの特徴と活用方法について
PDF
怖くないSpring Bootのオートコンフィグレーション
PPTX
Apache Avro vs Protocol Buffers
PDF
オブジェクト指向エクササイズのススメ
PPTX
本当は恐ろしい分散システムの話
PPT
Glibc malloc internal
ドメイン駆動設計 ( DDD ) をやってみよう
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
SQL大量発行処理をいかにして高速化するか
Cognitive Complexity でコードの複雑さを定量的に計測しよう
オブジェクト指向できていますか?
テスト文字列に「うんこ」と入れるな
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
分散トレーシングAWS:X-Rayとの上手い付き合い方
イミュータブルデータモデルの極意
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
分散トレーシング技術について(Open tracingやjaeger)
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Redisの特徴と活用方法について
怖くないSpring Bootのオートコンフィグレーション
Apache Avro vs Protocol Buffers
オブジェクト指向エクササイズのススメ
本当は恐ろしい分散システムの話
Glibc malloc internal

Viewers also liked

PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
マイクロにしすぎた結果がこれだよ!
PDF
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
PDF
マイクロサービスアーキテクチャ とは何か
PDF
[AC05] マイクロサービスは分割がキモ!基幹システムのためのドメイン駆動設計
PPTX
CQRS+ESをAkka Persistenceを使って実装してみる。
PDF
SharePoint Online Communication Sites お手軽サイト作成
PDF
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
PDF
From ActiveRecord to EventSourcing
PDF
Scala with DDD
PDF
Jaws festa 2015 <40歳の開発のpmが未経験でインフラエンジニアになってみて>
PPTX
AWS活用のいままでとこれから -東急ハンズの事例-
PPTX
S3をDB利用 ショッピングセンター向けポイントシステム概要
PPTX
当たり前を当たり前に:Agile2017レポート
PPTX
JAWS FESTA Kyusyu LT_ハンズラボ青木由佳
PDF
JAWSFESTAKyusyu_JAWSで学べることってなぁに_ゆかりんあゆゆ_20151103
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
マイクロにしすぎた結果がこれだよ!
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
マイクロサービスアーキテクチャ とは何か
[AC05] マイクロサービスは分割がキモ!基幹システムのためのドメイン駆動設計
CQRS+ESをAkka Persistenceを使って実装してみる。
SharePoint Online Communication Sites お手軽サイト作成
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
From ActiveRecord to EventSourcing
Scala with DDD
Jaws festa 2015 <40歳の開発のpmが未経験でインフラエンジニアになってみて>
AWS活用のいままでとこれから -東急ハンズの事例-
S3をDB利用 ショッピングセンター向けポイントシステム概要
当たり前を当たり前に:Agile2017レポート
JAWS FESTA Kyusyu LT_ハンズラボ青木由佳
JAWSFESTAKyusyu_JAWSで学べることってなぁに_ゆかりんあゆゆ_20151103

イベント・ソーシングを知る


[8]ページ先頭

©2009-2025 Movatter.jp