Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マイクロサービス化と組織の重要性 LLM 活用したイベントストーミングの紹介

マイクロサービス化と組織の重要性 LLM 活用したイベントストーミングの紹介

yoshitaka KOITABASHI

June 26, 2023
Tweet

More Decks by yoshitaka KOITABASHI

Other Decks in Technology

Transcript

  1. 2023/6/26 yoshii0110 2 KOITABASHI Yoshitaka yoshii0110 Community Advocate, Momento Software

    Engineer, KDDI アジャイル開発センター Amazon EC2, AWS Fargate, AWS App Runner 🥷 🏢 💕
  2. 崩壊したマイクロサービス 2023/6/26 yoshii0110 4 DB DB DB DB APP APP

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

    APP APP ユーザ ビジネス要件 ビジネス要件 ビジネス要件 ビジネス要件 開発チーム A 開発チーム C 開発チーム B 開発チーム D
  4. よく聞きそうな言葉たち5選 • なんかマイクロサービスって流行ってるらしいね、やってよ! • k8s使うといいらしいよ、EKS使ってサービス作成よろ • ドメインモデル?いいよいいよ、いつか他で汎用的に使いたい API 持ってるからそこでサービス分割しようぜ •

    こんな要件なんだけど、複数のマイクロサービスで 改修が入って時間がかかる?じゃあエンジニア追加するね! • 分散トランザクション?実装の問題でしょ。頑張れ。 2023/6/26 yoshii0110 9
  5. 本当にいいんですかその進め方 • マイクロサービスを選定する理由はなんですか? • ゼロからマイクロサービスで作って大丈夫ですか? > 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
  6. マイクロサービスのメリット • 疎結合 -> サービス単位(単独)でデプロイ/スケーリングができる -> 各サービスが自身のデータを所有し、データベースを共有しない -> 障害が起きた時などに影響が単一のサービスにとどまり、 アプリケーション全体としての堅牢性が担保

    • 技術選定 -> 各サービスごとに好きな技術を選定できる -> ただ、実際には技術を統一しないと例えば、言語やフレームワークなどの それぞれの技術要素が異なりすぎて、チーム間での知見を共有できない • ビジネス要求 -> ビジネス要求に対して、チーム単独で実装を進めることができる 2023/6/26 yoshii0110 12
  7. 崩壊したマイクロサービス 2023/6/26 yoshii0110 16 DB DB DB DB APP APP

    APP APP ユーザ ビジネス要件 ビジネス要件 ビジネス要件 ビジネス要件 開発チーム A 開発チーム B
  8. どうワークショップをやるのか 下記の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
  9. Big Picture 2023/6/26 yoshii0110 21 • ドメインイベント の洗い出しを行い、時系列ごとにまとめていきます • ブレインストーミングしながらドメインイベントをオレンジ色の付箋に書いていきます。

    例:「メールが行われた」 • 各ドメインイベントについて意見を出した人に説明してもらい、 重複したものを削除したり、理解が正しいかドメインエキスパートに確認し、時系列順に並びなおします 時系列
  10. Process Modeling 2023/6/26 yoshii0110 22 時系列 • 次に、ドメインイベント間のプロセスをモデリングしていきます • ユーザを黄色の付箋で追加し、

    誰が、または何がコマンドを実行するのかを考えます • ドメインイベントの原因となるコマンドを青色の付箋で追加します • View model ができるならばを緑色の付箋で追加します • コマンドの条件みたいなものとしてPolicyを紫色の付箋で追加します • なにか疑問やリスクになりうる事項があれば、赤色の付箋に追加します
  11. Software Design 2023/6/26 yoshii0110 23 時系列 • まとめた内容をさらに解像度を上げ、コーディングに進められる状態にしていきます • ビジネスドメインとしてデータの整合性が保てる範囲としてまとめられそうな箇所を

    Aggrigateとしてまとめていきます • ドメインとしてひとつにまとめられそうな箇所を区切っていきます => DDDにおける境界づけられたコンテキストが見つかる
  12. ワークショップ開催にあたり • 参加者 • ファシリテータ ※ ここが難しい。。ここを自動化できないか検討してみた • チームメンバー(エンジニア/ PO

    / SM / UIUXデザイナー) • ドメインエキスパート => 既存のシステムやその分野のビジネスに詳しい人 • 開催場所 • なるべくオフライン • ホワイトボードや付箋 • ビール(オプション) • オンラインでやるなら • ビデオ会議ツール • Miroなどのサービス 2023/6/26 yoshii0110 25 https://miro.com/miroverse/event-storming/
  13. Momento を使うことでのメリット • チャットメッセージの履歴を残しておきたい場合、どうします? 何かしらのキャッシュもしくはストレージに入れていきたいですよね • 完全なサーバレスキャッシュサービス Momento と LangChain

    の Integration が使える ユーザはキャッシュについては何も意識する必要なく、 2~3行の実装をするだけで履歴のキャッシュ管理をしてくれる 2023/6/26 yoshii0110 28 https://python.langchain.com/docs/modules/memory/integrations/momento_chat_message_history