Slide 1

Slide 1 text

マイクロサービス化と組織の重要性 LLM 活用したイベントストーミングの紹介 KOITABASHI Yoshitaka 2023/6/26 yoshii0110 1

Slide 2

Slide 2 text

2023/6/26 yoshii0110 2 KOITABASHI Yoshitaka yoshii0110 Community Advocate, Momento Software Engineer, KDDI アジャイル開発センター Amazon EC2, AWS Fargate, AWS App Runner 🥷 🏢 💕

Slide 3

Slide 3 text

マイクロサービス 書籍の成功事例を 夢見るJTC

Slide 4

Slide 4 text

崩壊したマイクロサービス 2023/6/26 yoshii0110 4 DB DB DB DB APP APP APP APP ユーザ ビジネス要件 ビジネス要件 ビジネス要件 ビジネス要件 開発チーム A 開発チーム B

Slide 5

Slide 5 text

マイクロサービス ビジネスドメイン(ビジネス機能)に基づいて分割された、 単独でデプロイができるサービス 2023/6/26 yoshii0110 5 https://martinfowler.com/articles/microservices.html モノリス マイクロサービス

Slide 6

Slide 6 text

理想的なマイクロサービス 2023/6/26 yoshii0110 6 DB DB DB DB APP APP APP APP ユーザ ビジネス要件 ビジネス要件 ビジネス要件 ビジネス要件 開発チーム A 開発チーム C 開発チーム B 開発チーム D

Slide 7

Slide 7 text

まあ当たり前ですが、こうはならない訳で 2023/6/26 yoshii0110 7

Slide 8

Slide 8 text

2023/6/26 yoshii0110 8 こんなシチュエーションが あるんじゃないですか??

Slide 9

Slide 9 text

よく聞きそうな言葉たち5選 • なんかマイクロサービスって流行ってるらしいね、やってよ! • k8s使うといいらしいよ、EKS使ってサービス作成よろ • ドメインモデル?いいよいいよ、いつか他で汎用的に使いたい API 持ってるからそこでサービス分割しようぜ • こんな要件なんだけど、複数のマイクロサービスで 改修が入って時間がかかる?じゃあエンジニア追加するね! • 分散トランザクション?実装の問題でしょ。頑張れ。 2023/6/26 yoshii0110 9

Slide 10

Slide 10 text

2023/6/26 yoshii0110 10 おいいいいいいい ちょっと待てよおおおおおおおお

Slide 11

Slide 11 text

本当にいいんですかその進め方 • マイクロサービスを選定する理由はなんですか? • ゼロからマイクロサービスで作って大丈夫ですか? > I feel that you shouldn't start with microservices unless you have reasonable experience of building a microservices system in the team. • なぜk8sを使う必要があるんですか? • チームは自立し権限を持つことができますか? • ドメインモデルは存在しますか? • クラウドネイティブにアーキテクチャを考えられる人がいますか? • etc... 2023/6/26 yoshii0110 11 https://martinfowler.com/bliki/MonolithFirst.html

Slide 12

Slide 12 text

マイクロサービスのメリット • 疎結合 -> サービス単位(単独)でデプロイ/スケーリングができる -> 各サービスが自身のデータを所有し、データベースを共有しない -> 障害が起きた時などに影響が単一のサービスにとどまり、 アプリケーション全体としての堅牢性が担保 • 技術選定 -> 各サービスごとに好きな技術を選定できる -> ただ、実際には技術を統一しないと例えば、言語やフレームワークなどの それぞれの技術要素が異なりすぎて、チーム間での知見を共有できない • ビジネス要求 -> ビジネス要求に対して、チーム単独で実装を進めることができる 2023/6/26 yoshii0110 12

Slide 13

Slide 13 text

理想的なチーム • Two-Pizza Teams >私たちはピザ2枚で養える規模以下のチームを作るよう努めている • 各チームが権限を持ち、特定のサービスを所有 2023/6/26 yoshii0110 13 https://docs.aws.amazon.com/ja_jp/whitepapers/latest/introduction-devops-aws/two-pizza-teams.html

Slide 14

Slide 14 text

AWSにおけるサービス選定 2023/6/26 yoshii0110 14 なるべくサーバレスにする。 以上。

Slide 15

Slide 15 text

AWSにおけるコンピューティング部分での サービス選定順 2023/6/26 yoshii0110 15 • AWS Lambda • ECS + Fargate • ECS + EC2 • EC2 • EKS + Fargate • EKS + EC2

Slide 16

Slide 16 text

崩壊したマイクロサービス 2023/6/26 yoshii0110 16 DB DB DB DB APP APP APP APP ユーザ ビジネス要件 ビジネス要件 ビジネス要件 ビジネス要件 開発チーム A 開発チーム B

Slide 17

Slide 17 text

ドメイン駆動設計(DDD)を用いてサービスを分割 2023/6/26 yoshii0110 17 設計におけるドメイン設計の基となる 技術的な用語の整理と ソフトウェアモデルの整理をするための フレームワークを提供

Slide 18

Slide 18 text

イベントストーミングをやろう イベントストーミングとは => Alberto Brandolini さんが提唱したシステムをモデリングするためのワークショップ • ワークショップ形式でドメイン知識を有識者から引き出す • ステークホルダへドメイン知識を共有する • ドメインモデルを設計する 2023/6/26 yoshii0110 18 https://www.eventstorming.com/

Slide 19

Slide 19 text

2023/6/26 yoshii0110 19 と言ってもやり方が 分からない?? OK。

Slide 20

Slide 20 text

どうワークショップをやるのか 下記の3フェーズを順に進めていく 1.Big Picture • ドメインイベントの収集 • ドメインイベントを絞り込む 2.Process Modeling • イベントトリガーを探す 3.Software Design • アグリゲートを調査 • コンテキストを調査 2023/6/26 yoshii0110 20 日本語版のテンプレートを作成しました。 https://miro.com/app/board/uXjVM7mn5tY=/?share_link_id=668749412281 オリジナルのテンプレート: Judith Birmoser's Event Storming template | Miroverse

Slide 21

Slide 21 text

Big Picture 2023/6/26 yoshii0110 21 • ドメインイベント の洗い出しを行い、時系列ごとにまとめていきます • ブレインストーミングしながらドメインイベントをオレンジ色の付箋に書いていきます。 例:「メールが行われた」 • 各ドメインイベントについて意見を出した人に説明してもらい、 重複したものを削除したり、理解が正しいかドメインエキスパートに確認し、時系列順に並びなおします 時系列

Slide 22

Slide 22 text

Process Modeling 2023/6/26 yoshii0110 22 時系列 • 次に、ドメインイベント間のプロセスをモデリングしていきます • ユーザを黄色の付箋で追加し、 誰が、または何がコマンドを実行するのかを考えます • ドメインイベントの原因となるコマンドを青色の付箋で追加します • View model ができるならばを緑色の付箋で追加します • コマンドの条件みたいなものとしてPolicyを紫色の付箋で追加します • なにか疑問やリスクになりうる事項があれば、赤色の付箋に追加します

Slide 23

Slide 23 text

Software Design 2023/6/26 yoshii0110 23 時系列 • まとめた内容をさらに解像度を上げ、コーディングに進められる状態にしていきます • ビジネスドメインとしてデータの整合性が保てる範囲としてまとめられそうな箇所を Aggrigateとしてまとめていきます • ドメインとしてひとつにまとめられそうな箇所を区切っていきます => DDDにおける境界づけられたコンテキストが見つかる

Slide 24

Slide 24 text

境界づけられたコンテキストとは? 2023/6/26 yoshii0110 24 https://martinfowler.com/bliki/BoundedContext.html • 特定のモデルを定義・適用する境界を明示的に示したもの • コンテキストの境界を定めることで、 チームメンバーは何を独立して開発できるのかを 理解/共有していく

Slide 25

Slide 25 text

ワークショップ開催にあたり • 参加者 • ファシリテータ ※ ここが難しい。。ここを自動化できないか検討してみた • チームメンバー(エンジニア/ PO / SM / UIUXデザイナー) • ドメインエキスパート => 既存のシステムやその分野のビジネスに詳しい人 • 開催場所 • なるべくオフライン • ホワイトボードや付箋 • ビール(オプション) • オンラインでやるなら • ビデオ会議ツール • Miroなどのサービス 2023/6/26 yoshii0110 25 https://miro.com/miroverse/event-storming/

Slide 26

Slide 26 text

ChatGPTにファシリテーションをお願いしてみた 2023/6/26 yoshii0110 26

Slide 27

Slide 27 text

作成しているSlack Botのアーキテクチャ 2023/6/26 yoshii0110 27

Slide 28

Slide 28 text

Momento を使うことでのメリット • チャットメッセージの履歴を残しておきたい場合、どうします? 何かしらのキャッシュもしくはストレージに入れていきたいですよね • 完全なサーバレスキャッシュサービス Momento と LangChain の Integration が使える ユーザはキャッシュについては何も意識する必要なく、 2~3行の実装をするだけで履歴のキャッシュ管理をしてくれる 2023/6/26 yoshii0110 28 https://python.langchain.com/docs/modules/memory/integrations/momento_chat_message_history

Slide 29

Slide 29 text

2023/6/26 yoshii0110 29 Thank you :) ちょっと興味ある程度でも大歓迎!! ぜひぜひ、お待ちしております!