SlideShare a Scribd company logo
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
ありがとうございました

More Related Content

What's hot

オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編
sutepoi
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話
itkr
 
[GKE & Spanner 勉強会] GKE 入門
[GKE & Spanner 勉強会] GKE 入門[GKE & Spanner 勉強会] GKE 入門
[GKE & Spanner 勉強会] GKE 入門
Google Cloud Platform - Japan
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
Google Cloud Platform - Japan
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
 
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
Google Cloud Platform - Japan
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
maruyama097
 
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
Tokoroten Nakayama
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
 

What's hot (20)

オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編BigQuery Query Optimization クエリ高速化編
BigQuery Query Optimization クエリ高速化編
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話
 
[GKE & Spanner 勉強会] GKE 入門
[GKE & Spanner 勉強会] GKE 入門[GKE & Spanner 勉強会] GKE 入門
[GKE & Spanner 勉強会] GKE 入門
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
 
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 

Similar to CQRS+ES on GCP

IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
Takanori 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 feb18
Masatomo Ito
 
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
Ryuta Otaki
 
Ladder of cqrs+es
Ladder of cqrs+esLadder of cqrs+es
Ladder of cqrs+es
Masaki Toyoshima
 
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
Uehara 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 yrglm
Katsuya 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_20161201
Tomohiro 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
 
Apache geode at-s1p
Apache geode at-s1pApache geode at-s1p
Apache geode at-s1p
Masaki Yamakawa
 
Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03
Yahoo!デベロッパーネットワーク
 

Similar to 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
 

More from Masaki Toyoshima

Google cloudinside3
Google cloudinside3Google cloudinside3
Google cloudinside3
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 connector
Masaki Toyoshima
 
Scala on gae
Scala on gaeScala on gae
Scala on gae
Masaki Toyoshima
 
Scalaでもgae
ScalaでもgaeScalaでもgae
Scalaでもgae
Masaki 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 vol2
Masaki Toyoshima
 
Akka stream
Akka streamAkka stream
Akka stream
Masaki Toyoshima
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
Masaki Toyoshima
 

More from 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