Slide 1

Slide 1 text

第2回 雲勉LT⼤会 クラウド時代は CRUD ではなく CQRS で考えよう

Slide 2

Slide 2 text

⾃⼰紹介 2 井上 迪也(いのうえみちや) • あだ名︓みちのすけ • 所属︓アジャイル事業部 • アイレット歴︓2022年度 新卒⼊社(3年⽬) • 趣味︓バイク(予定) • 社内活動︓もくもく会(ブログリレーなど) IPA : 応⽤情報、データベース

Slide 3

Slide 3 text

⽬次 3 ・CRUD ・CQRS ・AWS で実装 ・メリット / デメリット ・CQRS とクラウドの相性

Slide 4

Slide 4 text

4 「API のデータベース 何を使う︖」 安くてスケールするのは DynamoDB だけど、 フィルタとか JOIN とか考えると RDS がいいな あ るある な 話題

Slide 5

Slide 5 text

CRUD 5

Slide 6

Slide 6 text

6 $ SFBUF 3 FBE 6 % QEBUF FMFUF

Slide 7

Slide 7 text

RESTful API 7 $ 3 6 % 1045 QPTU (&5 QPTU (&5 QPTUJE 1"5$) QPTUJE %&-&5& QPTUJE

Slide 8

Slide 8 text

8 $ SFBUF 3 FBE 6 % QEBUF FMFUF ← 特性が違う

Slide 9

Slide 9 text

9 R CUD キャッシュ可能 トランザクション・整合性 たくさん叩かれる レスポンスは最⼩限でいい 複雑なフィルターやクエリ 複雑なドメインロジック

Slide 10

Slide 10 text

10 全く違うことをごちゃ混ぜに考えると、 「パフォーマンスの低下」や「ロジックの複雑化」が発⽣する

Slide 11

Slide 11 text

CQRS 11

Slide 12

Slide 12 text

12 $ SFBUF 3 FBE 6 % QEBUF FMFUF $PNNBOE 2VFSZ (更新系) (取得系)

Slide 13

Slide 13 text

13 $234 ʢ$PNNBOE2VFSZ3FTQPOTJCJMJUZ4FHSFHBUJPOʣ コマンド・クエリ責務分離 更新系と取得系を別々に考えるパターン

Slide 14

Slide 14 text

AWS で CQRS を使って実装してみる 14

Slide 15

Slide 15 text

15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17 イベントソーシング

Slide 18

Slide 18 text

18 Insert をトリガー RDS に書き込む

Slide 19

Slide 19 text

19 DynamoDB の積み重なったイベントをもとに、 現在の状態を導出

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

CQRS の メリット 22

Slide 23

Slide 23 text

CQRS の メリット 23 ・取得系と更新系のパフォーマンスを別々に最適化できる ・ロジックが簡潔になる ・更新系の変更が、取得系に影響を与えない

Slide 24

Slide 24 text

24

Slide 25

Slide 25 text

CQRS(というかイベントソーシング) の メリット 25 ・全てのイベントが保存され、デバッグや監査が簡単 ・過去のイベントから現在の状態を導出できるため、 取得系の DB の変更も可能

Slide 26

Slide 26 text

26

Slide 27

Slide 27 text

CQRS の デメリット 27

Slide 28

Slide 28 text

CQRS の デメリット 28 ・データは結果整合性 ・Query と Command を個別にマイクロサービス化するようなもの ・構成要素が増える ・デプロイが増える ・トランザクションの複雑化

Slide 29

Slide 29 text

CQRS とクラウドは相性がいい 29

Slide 30

Slide 30 text

CQRS とクラウドは相性がいい 30 ・イベントドリブン ・ユースケースに適したサービスを使うことで、 コストやパフォーマンスを最適化できる → RDS のリードレプリカなどは、AWS が提供してくれている CQRS なソリューションの⼀つ

Slide 31

Slide 31 text

31 アーキテクチャとして採⽤しなくても 更新系・取得系で切り分けて考えるのは重要 アーキテクチャとして、 CRUD ではなく CQRS という選択肢もある

Slide 32

Slide 32 text

32 iret.media の「もくもく会ブログリレー」でも公開予定︕ 7 / 14 (⽇)

Slide 33

Slide 33 text

33 ご清聴ありがとうございました 🙇