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

More Related Content

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

What's hot

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

Viewers also liked

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

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


[8]ページ先頭

©2009-2025 Movatter.jp