SlideShare uma empresa Scribd logo
1 de 78
Baixar para ler offline
copyright Fringe81 Co.,Ltd.
CQRS+ES on GCP
2018.3.27
GCPを活用した戦略的な新サービス開発の裏側@Fringe81
copyright Fringe81 Co.,Ltd.
About me (@mtoyoshi)
・サーバーサイドエンジニア
・ScalaとGolang書いてます
共に働く仲間と送り合う
ピアボーナスを実現するサービス
〜サイレントヒーローの発見〜
- -copyright Fringe81 Co.,Ltd.
事業化判
断
2. Fringe81の新規事業の開発フェーズ
事業企画
以下のフェーズを意識して、
実現性検証
プロトタイピン
グ
ローンチ
にむけた
開発
ローンチ
直後の
サポート
フェーズ1 フェーズ2 フェーズ3 フェーズ4 フェーズ5
copyright Fringe81 Co.,Ltd.
今回の戦を略す話:
1. アプリケーション開発以外との戦い
2. 美しさ vs 速さの二項対立との戦い
3. 障害やバグの原因究明の時間との戦い
copyright Fringe81 Co.,Ltd.
少ないエンジニアリソースでのスタート
アプリケーション開発に集中したい
Google App Engine (PaaS) を採用
copyright Fringe81 Co.,Ltd.
GAE選定で悩んだ話はこちらの資料に
copyright Fringe81 Co.,Ltd.
理想
ドメイン世界の表現
モデル的/コード的妥当性・美しさ
(メンテナンス性)
パフォーマンス
現実はトレードオフの
関係になりやすい
copyright Fringe81 Co.,Ltd.
It is not possible to create an optimal solution
for searching,reporting,and processing transactions
utilizing a single model.
-CQRS documents by Greg Young-
copyright Fringe81 Co.,Ltd.
It is not possible to create an optimal solution
for searching,reporting,and processing transactions
utilizing a single model.
-CQRS documents by Greg Young-
2軸を包括するモデルの定義はかなり難しい
copyright Fringe81 Co.,Ltd.
ドメイン世界の表現
モデル的/コード的妥当性・美しさ
(メンテナンス性)
パフォーマンス
2軸を
操作(CRUD)レベルに
落とし込むと
copyright Fringe81 Co.,Ltd.
ドメイン世界の表現
モデル的/コード的妥当性・美しさ
(メンテナンス性)
パフォーマンス
更新系(CUD)の処理
copyright Fringe81 Co.,Ltd.
ドメイン世界の表現
モデル的/コード的妥当性・美しさ
(メンテナンス性)
パフォーマンス
検索系(R)の処理
copyright Fringe81 Co.,Ltd.
更新系 検索系
アクセス量に
占める割合
少 多
スケール性 △ ◎
複雑さの傾向 ビジネスロジック
データ量と応答速度
複数切り口での見せ方
(R)DB傾向 正規化 非正規化(速さ重視)
特性の違い
copyright Fringe81 Co.,Ltd.
2軸の違いを素直に受け止め
別々に管理・開発していこう
Command
Query
Responsibility
Segregation
コマンド
クエリ
責務
分離
copyright Fringe81 Co.,Ltd.
Command
Adapters
DB
UseCases
Entities(Domains) Repository
RepositoryImpl
Controller
UseCase
Presenter
DDD x CleanArchitecture
copyright Fringe81 Co.,Ltd.
Command (GAE flexible)
Adapters
DB
UseCases
Entities(Domains) Repository
RepositoryImpl
Controller
UseCase
Presenter
DDD x CleanArchitecture
GAE flexible x Scala
※ScalaはFringe81のメイン言語で最も使い慣れている
copyright Fringe81 Co.,Ltd.
Query
Controller
DAO
DB
copyright Fringe81 Co.,Ltd.
Query (GAE standard)
Controller
DAO
DB
GAE standard x Go
※GAE standard x Goの組み合わせは
スケール性能抜群でQ要件にとてもマッチしている
copyright Fringe81 Co.,Ltd.
内部のソフトウェアアーキテクチャも
プログラミング言語も
GAEの種類も異なるものとなった
2軸の違いを素直に受け止め
別々に管理・開発していこう
copyright Fringe81 Co.,Ltd.
Command
App Engine Flexible
Query
App Engine Standard
Cloud
Pub/Sub
microservice1
microservice2
マイクロサービス群の連携は
ドメインイベントのPublishとSubscribeで実現
Event
copyright Fringe81 Co.,Ltd.
Command
App Engine Flexible
Query
App Engine Standard
Cloud
Pub/Sub
microservice1
microservice2
Cloud Datastore
より複雑なクエリへの対応にも
(C側に影響を及ぼすことなく:疎結合)
Cloud SQL
Event
Event
Event
copyright Fringe81 Co.,Ltd.
ここでEventについて
もう少し理解しておきたい
copyright Fringe81 Co.,Ltd.
Message-driven
vs
Event-driven
The Reactieve ManifestoのGlossary集より
(https://www.reactivemanifesto.org/glossary#Message-Driven)
copyright Fringe81 Co.,Ltd.
■定義
Message: 特定の送り先に送られたデータ
Event: ある状態になったコンポーネントが送出するシ
グナル(過去に起きた事象をあらわす: fact)
copyright Fringe81 Co.,Ltd.
メッセージ駆動では
受信者はメッセージの到着を待って
メッセージに反応しそれ以外は休眠状態
誰に送るのかに関心
copyright Fringe81 Co.,Ltd.
イベント駆動では
イベント発生時に実行できるよう
通知リスナはイベントをアタッチする
   何が起きたのかに関心
copyright Fringe81 Co.,Ltd.
MessageやEventが伝わる伝送路のことを
一般化してChannel※と呼ぶとすると
※Enterprise Integration Patternsより
copyright Fringe81 Co.,Ltd.
EventのChannelがCloudPubSub
(イベントに関心があるものは複数ある)
copyright Fringe81 Co.,Ltd.
MessageのChannelがCloudTasks※
(誰に送るのかに関心)
※現在はα版です。TaskQueue
copyright Fringe81 Co.,Ltd.
Command
App Engine Flexible
Query
App Engine Standard
Cloud
Pub/Sub
microservice1
microservice2
Cloud Datastore
改めてこの図
Cloud SQL
Event
Event
Event
copyright Fringe81 Co.,Ltd.
Command
App Engine Flexible
Query
App Engine Standard
Cloud
Pub/Sub
microservice1
microservice2
Cloud Datastore
Eventは揮発性だと気付く
Cloud SQL
Event
Event
Event
copyright Fringe81 Co.,Ltd.
Command
App Engine Flexible
Query
App Engine Standard
Cloud
Pub/Sub
microservice1
microservice2
Cloud Datastore
「後から追加できる」という特徴との
コンフリクトが少なからず存在する
Cloud SQL
Event
Event
Event
copyright Fringe81 Co.,Ltd.
どういうことか?
copyright Fringe81 Co.,Ltd.
microservice1
Cloud Datastore
Cloud SQL投入時点で過去のデータをもとに
加工したデータを入れておく必要あり
(さも最初からあったかのように振る舞うために)
Cloud SQL
copyright Fringe81 Co.,Ltd.
microservice1
Cloud Datastore
出来ないこともある
Cloud SQL
copyright Fringe81 Co.,Ltd.
INPUT
Cloud SQL
OUTPUT
Cloud SQLのデータを作るのはSubscriber
OUTPUTを作るにはEventを入れないと
copyright Fringe81 Co.,Ltd.
過去に発行されたEvent群がなければ
さも最初からあったかのように振る舞うための
データを満足に作ることは出来ない
Cloud SQL
INPUT
OUTPUT
※もちろん要件によっては必ずしもイベントを INPUTにしなくても
datastoreの現在の状態をもとにしても作れる
copyright Fringe81 Co.,Ltd.
Eventに永続性を
copyright Fringe81 Co.,Ltd.
Command
App Engine Flexible
Query
App Engine Standard
Cloud
Pub/Sub
microservice1
microservice2
Cloud Datastore
publish対象のEventと同じものを永続化
Event
Event
copyright Fringe81 Co.,Ltd.
Got: 3
Got: 6
Lost: 1
①イベント追加
②イベント追加
③イベント追加
イベントが発生するたびに永続化
(ここでは何らかの値を得たり失ったりするイベントが発生)
copyright Fringe81 Co.,Ltd.
“Eventは過去の出来事をあらわす”
過去の積み重ねが現在の状態をあらわす
copyright Fringe81 Co.,Ltd.
Got: 3
Got: 6
Lost: 1
value = 8
<DB世界> <プログラム世界>
イベント群から状態を復元する
(+3 + 6 -1)
copyright Fringe81 Co.,Ltd.
このようにEventを永続化してEventをもとに
アプリケーション状態を表現する方法を
Event Sourcingと呼ぶ
copyright Fringe81 Co.,Ltd.
value: 3
value = 8
<DB世界>
<プログラム世界>
① 最初の状態は3
② 9に更新
③ 8に更新
一方、お馴染みのこちらはState Sourcing
value: 9
value: 8
copyright Fringe81 Co.,Ltd.
Eventは過去の出来事、事実
Immutable
Stateは変わり続ける
Mutable
copyright Fringe81 Co.,Ltd.
Event Sourcingにはどういうメリットが?
参考:CQRS Jornery (https://msdn.microsoft.com/ja-jp/library/jj554200.aspx)
copyright Fringe81 Co.,Ltd.
メリット 要約
Performance ESにおいては永続化はイベントの append-only。
更新処理のパフォーマンス改善が望める。
Simplification factとしてのイベントを保存するだけ。
O-R間のインピーダンスミスマッチが起きない。
Audit trail システムで何が起きてその状態なのかの追跡が可能となり、監査ログとして使える
Integration with
other subsystems
疎結合を促す。
また、他のサブシステムへ publishした全てのイベントは eventStoreに保存されている。
Deriving additional
business value
from the event
history
将来起こるビジネス要件を予想することは困難だが全てのイベント履歴を持っていることで対処
可能性が高まる。
例:ある時点での状態がどうであったかにこたえられるなど
Production
troubleshooting
本番環境のデータをテスト環境にコピーするなどして状態の再現を簡単にできるためトラブル
シューティングに役立つ
Fixing Errors ESの場合factとしてイベントが保存されているだけなので、コーディングエラーを修正するだけ
でDB値を手動メンテせずにすむ場合がある
Testing テスト容易性が高まる
Flexibility イベント群があればいかなる構造のデータにも変換可能
copyright Fringe81 Co.,Ltd.
メリット 要約
Performance ESにおいては永続化はイベントの append-only。
更新処理のパフォーマンス改善が望める。
Simplification factとしてのイベントを保存するだけ。
O-R間のインピーダンスミスマッチが起きない。
Audit trail システムで何が起きてその状態なのかの追跡が可能となり、監査ログとして使える
Integration with
other subsystems
疎結合を促す。
また、他のサブシステムへ publishした全てのイベントは eventStoreに保存されている。
Deriving additional
business value
from the event
history
将来起こるビジネス要件を予想することは困難だが全てのイベント履歴を持っていることで対処
可能性が高まる。
例:ある時点での状態がどうであったかにこたえられるなど
Production
troubleshooting
本番環境のデータをテスト環境にコピーするなどして状態の再現を簡単にできるためトラブル
シューティングに役立つ
Fixing Errors ESの場合factとしてイベントが保存されているだけなので、コーディングエラーを修正するだけ
でDB値を手動メンテせずにすむ場合がある
Testing テスト容易性が高まる
Flexibility イベント群があればいかなる構造のデータにも変換可能
イベント群があれば
いかなる構造のデータにも変換可能
(さきほど紹介したもの)
copyright Fringe81 Co.,Ltd.
メリット 要約
Performance ESにおいては永続化はイベントの append-only。
更新処理のパフォーマンス改善が望める。
Simplification factとしてのイベントを保存するだけ。
O-R間のインピーダンスミスマッチが起きない。
Audit trail システムで何が起きてその状態なのかの追跡が可能となり、監査ログとして使える
Integration with
other subsystems
疎結合を促す。
また、他のサブシステムへ publishした全てのイベントは eventStoreに保存されている。
Deriving additional
business value
from the event
history
将来起こるビジネス要件を予想することは困難だが全てのイベント履歴を持っていることで対処
可能性が高まる。
例:ある時点での状態がどうであったかにこたえられるなど
Production
troubleshooting
本番環境のデータをテスト環境にコピーするなどして状態の再現を簡単にできるためトラブル
シューティングに役立つ
Fixing Errors ESの場合factとしてイベントが保存されているだけなので、コーディングエラーを修正するだけ
でDB値を手動メンテせずにすむ場合がある
Testing テスト容易性が高まる
Flexibility イベント群があればいかなる構造のデータにも変換可能
ESにおいては永続化はイベントのappend-only
更新処理のパフォーマンス改善が望める
copyright Fringe81 Co.,Ltd.
copyright Fringe81 Co.,Ltd.
メリット 要約
Performance ESにおいては永続化はイベントの append-only。
更新処理のパフォーマンス改善が望める。
Simplification factとしてのイベントを保存するだけ。
O-R間のインピーダンスミスマッチが起きない。
Audit trail システムで何が起きてその状態なのかの追跡が可能となり、監査ログとして使える
Integration with
other subsystems
疎結合を促す。
また、他のサブシステムへ publishした全てのイベントは eventStoreに保存されている。
Deriving additional
business value
from the event
history
将来起こるビジネス要件を予想することは困難だが全てのイベント履歴を持っていることで対処
可能性が高まる。
例:ある時点での状態がどうであったかにこたえられるなど
Production
troubleshooting
本番環境のデータをテスト環境にコピーするなどして状態の再現を簡単にできるためトラブル
シューティングに役立つ
Fixing Errors ESの場合factとしてイベントが保存されているだけなので、コーディングエラーを修正するだけ
でDB値を手動メンテせずにすむ場合がある
Testing テスト容易性が高まる
Flexibility イベント群があればいかなる構造のデータにも変換可能
システムで何が起きてその状態なのかの
追跡が可能となり監査ログとして使える
copyright Fringe81 Co.,Ltd.
DB内のイベント群と
アプリケーションログ
ミスが疑われた場合
突き合わせができるので
ミスの発見だけでなく
どこがおかしいのか
あたりをつけることもできる
Got: 3
Got: 6
Lost: 1
・
・
・
・
・
・
・
・
・
・・
・
copyright Fringe81 Co.,Ltd.
以上が主なEvent Sourcingのメリット
copyright Fringe81 Co.,Ltd.
よーし、俺たちも次のプロジェクトから
StateSourcingやめてEventSourcingだ!
...とは多分ならない
copyright Fringe81 Co.,Ltd.
頭では分かっても
慣れ親しんできたやり方を捨てる
のは厳しいし新しすぎて不安
私達も同じでした
copyright Fringe81 Co.,Ltd.
自分たちの場合はここぞ!
というところからはじめた
ピアボーナスシステムで絶対にミス
してはいけない獲得ボーナス額
copyright Fringe81 Co.,Ltd.
DB内のイベント群と
アプリケーションログ
ミスが疑われた場合
突き合わせができるので
ミスの発見だけでなく
どこがおかしいのかあたりをつけ
ることもできる
Got: 3
Got: 6
Lost: 1
・
・
・
・
・
・
・
・
・
・・
・
copyright Fringe81 Co.,Ltd.
ちなみに新しい概念と思っていたものの
実は意外と古くからありました
copyright Fringe81 Co.,Ltd.
最後にEvent Sourcingの
弱点とその克服を2つほど紹介
copyright Fringe81 Co.,Ltd.
Event Sourcingの
弱点その1
copyright Fringe81 Co.,Ltd.
Got: 3
Got: 6
Lost: 1
クエリに弱い
Got: 2
ex.値が7以上のもの一覧を取得
select * from table where value >= 7
のようにはいかない厳しさ
copyright Fringe81 Co.,Ltd.
value: 8
クエリに対応するためのQ用DBが必要
※CQRSとESが一緒に語られる理由はこれだと思う
value: 2
Q
Got: 3
Got: 6
Lost: 1
Got: 2
C
copyright Fringe81 Co.,Ltd.
Event Sourcingの
弱点その2
copyright Fringe81 Co.,Ltd.
イベントが積み上がってくると
状態復元のパフォーマンスが悪くなる
copyright Fringe81 Co.,Ltd.
イベントが積み上がってくると
状態復元のパフォーマンスが悪くなる
加えてDatastoreの場合は
オペレーション数課金なのでコスト面でも懸念
copyright Fringe81 Co.,Ltd.
100Events:約60ms
500Events:約160ms
1,500Events:約420ms
3,000Events:約940ms
やってみた
copyright Fringe81 Co.,Ltd.
大量イベントのロードは
StackdriverTrace上で
見ても大変なことに
copyright Fringe81 Co.,Ltd.
〜 Snapshot機能 〜
任意のタイミングで
Eventレコードをまとめあげた地点をつくり
ロードするレコード数を減らす
copyright Fringe81 Co.,Ltd.
Got: 3
Got: 6
Lost: 1
value:8
Snapshotテーブル
copyright Fringe81 Co.,Ltd.
value:8
Snapshotテーブル
Got: 3
Got: 6
Lost: 1
Got: 10
Lost: 2
copyright Fringe81 Co.,Ltd.
value:8
Snapshotテーブル
プログラム
③ value = 16
Got: 3
Got: 6
Lost: 1
Got: 10
Lost: 2
①
②
copyright Fringe81 Co.,Ltd.
まとめ
copyright Fringe81 Co.,Ltd.
今回の戦を略す話:
1. アプリケーション開発以外との戦い
2. 美しさ vs 速さの二項対立との戦い
3. 障害やバグの原因究明の時間との戦い
copyright Fringe81 Co.,Ltd.
今回の戦を略す話:
1. アプリケーション開発以外との戦い
2. 美しさ vs 速さの二項対立との戦い
3. 障害やバグの原因究明の時間との戦い
1. GAEいいよ!
copyright Fringe81 Co.,Ltd.
今回の戦を略す話:
1. アプリケーション開発以外との戦い
2. 美しさ vs 速さの二項対立との戦い
3. 障害やバグの原因究明の時間との戦い
2. CQRSいいよ!
copyright Fringe81 Co.,Ltd.
今回の戦を略す話:
1. アプリケーション開発以外との戦い
2. 美しさ vs 速さの二項対立との戦い
3. 障害やバグの原因究明の時間との戦い
3. Event Sourcingいいよ!
(EventとアプリログのWチェック)
copyright Fringe81 Co.,Ltd.
CQRS+ES on GCP
ありがとうございました

Mais conteúdo relacionado

Mais procurados

外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話ichirin2501
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所Toru Makabe
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka心 谷本
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersSeiya Mizuno
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 
DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 

Mais procurados (20)

外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
はじめてのPRD
はじめてのPRDはじめてのPRD
はじめてのPRD
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
DX実践!~ビジネスアジリティ向上とマイクロサービス技術GraphQLの活用~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 

Semelhante a CQRS+ES on GCP

IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkTakanori Suzuki
 
2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介CASAREAL, Inc.
 
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?Takuya Ogawa
 
Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18Masatomo Ito
 
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話Ryuta Otaki
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...Masaya Aoyama
 
アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版ESM SEC
 
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようGoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようHidemasa Togashi
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)JPCERT Coordination Center
 
Realize tokyo2019 yrglm
Realize tokyo2019 yrglmRealize tokyo2019 yrglm
Realize tokyo2019 yrglmKatsuya Uehara
 
Amazon EKSによるスケーラブルなCTR予測システム
Amazon EKSによるスケーラブルなCTR予測システムAmazon EKSによるスケーラブルなCTR予測システム
Amazon EKSによるスケーラブルなCTR予測システム駿哉 吉田
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
[Cloud on air] #02 GCP のアプリランタイムについて学ぼう
[Cloud on air] #02  GCP のアプリランタイムについて学ぼう[Cloud on air] #02  GCP のアプリランタイムについて学ぼう
[Cloud on air] #02 GCP のアプリランタイムについて学ぼうGoogle Cloud Platform - Japan
 
Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Tomohiro Ichimura
 
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!natsumo
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏Daisuke Ikeda
 

Semelhante a CQRS+ES on GCP (20)

IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介
 
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?
 
Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18
 
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
 
Ladder of cqrs+es
Ladder of cqrs+esLadder of cqrs+es
Ladder of cqrs+es
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
 
アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版
 
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようGoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
 
Realize tokyo2019 yrglm
Realize tokyo2019 yrglmRealize tokyo2019 yrglm
Realize tokyo2019 yrglm
 
Amazon EKSによるスケーラブルなCTR予測システム
Amazon EKSによるスケーラブルなCTR予測システムAmazon EKSによるスケーラブルなCTR予測システム
Amazon EKSによるスケーラブルなCTR予測システム
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
[Cloud on air] #02 GCP のアプリランタイムについて学ぼう
[Cloud on air] #02  GCP のアプリランタイムについて学ぼう[Cloud on air] #02  GCP のアプリランタイムについて学ぼう
[Cloud on air] #02 GCP のアプリランタイムについて学ぼう
 
Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201
 
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
 
Apache geode at-s1p
Apache geode at-s1pApache geode at-s1p
Apache geode at-s1p
 
Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03
 

Mais de Masaki Toyoshima

Stream processing using alpakka cloud pub sub connector
Stream processing using alpakka cloud pub sub connectorStream processing using alpakka cloud pub sub connector
Stream processing using alpakka cloud pub sub connectorMasaki Toyoshima
 
仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいこと仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいことMasaki Toyoshima
 
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2Masaki Toyoshima
 

Mais de Masaki Toyoshima (8)

Google cloudinside3
Google cloudinside3Google cloudinside3
Google cloudinside3
 
Stream processing using alpakka cloud pub sub connector
Stream processing using alpakka cloud pub sub connectorStream processing using alpakka cloud pub sub connector
Stream processing using alpakka cloud pub sub connector
 
Scala on gae
Scala on gaeScala on gae
Scala on gae
 
Scalaでもgae
ScalaでもgaeScalaでもgae
Scalaでもgae
 
仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいこと仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいこと
 
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
 
Akka stream
Akka streamAkka stream
Akka stream
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
 

CQRS+ES on GCP