Movatterモバイル変換


[0]ホーム

URL:


増田 亨, profile picture
Uploaded by増田 亨
PDF, PPTX44,543 views

マイクロサービス 4つの分割アプローチ

アプリケーションの分割のアプローチ●4つのアプローチ- ビジネスファンクション- 動詞/ユースケース- 名詞/リソース- 境界づけられたコンテキスト● トランザクションの分割- パイプライン化 (VETRO)- コーディネート (Saga)- 状態更新の非同期化 ( Event History - State Materialize - Domain Specific Query )

Download as PDF, PPTX
マイクロサービス4つの分割アプローチ2019年5月18日ギルドワークス 増田 亨
本日の内容について2019/5/18 2
実証されたパターンの紹介ではない2019/5/18 3
私の模索の現時点のスナップショット2019/5/18 4
参考になれば幸いです2019/5/18 5
マイクロサービスを実現する技術クラウドコンテナ設計スキル2019/5/18 6
マイクロサービスを実現する技術クラウドコンテナ設計スキル2019/5/18 7
マイクロサービス:4つの動機負荷分散リスク分散データ分散機能分散ロードバランサ/ルータ+同一サービスの複製群コーディネータ+異なるサービス群の連携排他の選択肢ではなく、組み合わせになる2019/5/18 8
マイクロサービス:4つの動機負荷分散リスク分散データ分散機能分散異なるサービス群に分解して連携する2019/5/18 9
基本のアプローチモノリスで作ってモジュール設計を改善するマイクロサービスの可能性を検討するマイクロサービスへ移行を検討する部分適用 部分適用2019/5/18 10
設計スキルの基本は同じ関心の分離高凝集・疎結合モジュール化(インタフェース定義+実装)2019/5/18 11
サービスの模式図ビジネスロジック同期非同期リクエスト/レスポンス非同期receivesubscribe同期非同期非同期リクエスト/レスポンスsendpublishデータソースローカルなデータベース他のサービスリクエスト/レスポンスモノリス/ひとつのマイクロサービスに共通の構造個々の実体は、このサブセット2019/5/18 12インバウンドアウトバウンド
マイクロサービスへの分割2019/5/18 13
どこまで小さくできるか?2019/5/18 14
「理論」的には Java APIのメソッド単位限界はクラウド/コンテナ/設計/運用の習熟度どこまで小さくできるか?2019/5/18 15
どこまで小さくするか?2019/5/18 16
どこまで小さくするか?論理的なモジュール分割物理的な配置と運用単位積極的に!大胆に!慎重に!一歩ずつ!2019/5/18 17
マイクロサービス間の通信8つの勘違いと真実2019/5/18 18
ネットワークは信頼できる → 必ず落ちるネットワークは遅延しない → メモリに比べとんでもなく遅いネットワークの帯域は無限である → 帯域は有限ネットワークは安全である → アクセスできている=穴が開いているネットワーク構成は変化しない → 誰かが前触れもなく変更する一人の管理者が集中管理してくれる → 複数人がばらばらに管理している転送コストはゼロである → データ転送はお金がかかるネットワーク全体は等質である → 性質の異なる構成要素のごった煮出典:Fallacies of Distributed Computing Explainedhttp://www.rgoarchitects.com/Files/fallacies.pdf勘違い 真実2019/5/18 19
マイクロサービス4つの分割アプローチ2019/5/18 20
ビジネスファンクション(業務機能)動詞/ユースケース名詞/リソース境界づけられたコンテキスト/ サブドメイン(ドメイン駆動設計由来の分割)2019/5/18 21実際にはこれらの組み合わせになる
ビジネスファンクション(業務の活動単位)2019/5/18 22
受注在庫確認出荷事務売上事務出荷作業請求回収購買計画発注購買納品管理支払い現品管理実地棚卸在庫評価会計連動手形外貨業績管理販売分析 購買分析21の業務機能に分割した例2019/5/18 23
ビジネスファンクションによる分割✓業務の活動単位・管理単位を、そのままシステム構造に反映✓サービス間連携が(現実世界と同じ)複雑さになりやすい✓大企業の場合➢ 業務機能ごとに部門が分かれている➢ 商品カテゴリ、担当地域などでさらに細分化が必要かも➢ 大企業病(非効率、硬直化、調整ごとの多さ、合意形成までの時間)がシステムの開発・運用に、そのまま持ち込まれる✓中小企業の場合➢ 複数の業務機能をひとつの部門が担当する➢ 業務機能をまたがった要求がでてきやすい(システム構造との不整合がおきやすい)2019/5/18 24
業務機能での分割2019/5/18 25共有データベース受注出荷事務売上事務出荷作業請求回収モノリス受注在庫確認出荷事務売上事務出荷作業請求回収分割イメージ課題:データの一貫性、修正や取消の流れ
動詞/ユースケース2019/5/18 26
受注データを入力する出荷を依頼する売上を計上する請求を依頼する営業担当者〇〇が□□を△△する2019/5/18 27
動詞/ユースケースで分割✓機能要求として分割しやすい✓開発範囲の定義がやりやすい✓トランザクション単位のマイクロサービスになる➢サービス間で、ロジックの重複、断片化が起きやすい➢サービスの肥大化 and/or 類似サービスの乱立➢バッチ処理が増えやすいロジックの重複や断片化の後始末2019/5/18 28
薄いユースケースサービス2019/5/18 29受注データを入力する価格設定サービス在庫確認サービス与信管理サービス受注データ記録サービスここに複雑なロジックを書かないロジックを、領域ごとに分割して整理・記述して、ロジックの重複や断片化をなくす
名詞/リソース2019/5/18 30
商品顧客取引先在庫受注拠点部門発注リソース指向識別番号単位で状態の更新と参照を行う社員2019/5/18 31
名詞/リソースで分割✓エンティティ+CRUD✓データ更新に責任を持つサービスを明確できる✓リソース単位をまたがった参照が複雑になりがち➢ 外部キー参照制約、JOINが使えない世界注文データが顧客番号と商品番号を持つ✓異なる関心事が混在し、肥大化しがち➢ 顧客識別情報、プロファイル、連絡先、購入履歴、プリファレンス、コミュニケーション履歴、認証・認可の設定、アクセス履歴、 …➢ 商品識別情報、説明、仕様、価格、在庫状態、物流特性、…2019/5/18 32
リソース管理単位の分割2019/5/18 33顧客系リソース 商品系リソースID-氏名プロファイル連絡先購入履歴プリファレンスコミュニケーション履歴認証認可設定アクセス履歴番号-名前商品カタログ仕様詳細価格物流特性仕入特性取り扱い状態 在庫状態モノリスのリソース管理を、こういう単位のCRUDに分割しながらマイクロサービスへの移行を検討する
境界づけられたコンテキスト/サブドメイン(ドメイン駆動設計由来の分割)2019/5/18 34
わからん!2019/5/18 35解釈も定義も説明もばらばら…原因の一つはバーノンの「実践ドメイン駆動設計」の説明が、エヴァンスの「ドメイン駆動設計」とは、だいぶ違った独自の解釈と説明だから
ドメイン2019/5/18 36モデルサブドメイン サブドメインサブドメイン境界づけられたコンテキストサブドメインサブドメインコンテキストコンテキストコンテキストエヴァンス流コンテキスト → モデル → サブドメインバーノン流ドメイン → サブドメイン → コンテキスト
エヴァンス流の定義✓Bounded Context : 境界づけられたコンテキスト➢ひとつのモデルを一貫して適用できる範囲➢境界の実体⚫ チーム(密接なコミュニケーションの範囲)⚫ ソースコードやDBスキーマの所有権(変更可能範囲)✓サブドメイン➢特定のモデルの中の、独立性の高い、凝集した塊2019/5/18 37どちらもマイクロサービスの単位になりえる実際には、サブドメインは設計の見直しで定義しなおすことが多いサブドメインでマイクロサービスに分けるのは設計改善の障害になりやすい
境界づけられたコンテキスト✓ひとつのコンテキストに一つのモデルを目指す(目標)✓現実➢一つのコンテキストに、複数のモデルが発生する➢一つであるべきモデルが、複数のコンテキストに断片化する✓やるべきこと➢一つのコンテキスト(開発単位)に一つのモデルを維持すること➢モデルが異なれば、別のコンテキスト(開発単位)に分割すること2019/5/18 38
ドメイン駆動設計の「モデル」2019/5/18 39
ドメイン駆動設計の「モデル」✓ソフトウェアの核心にある複雑さに立ち向かう✓核心にある複雑さ=ビジネスルールの複雑さ✓ビジネスルールの複雑さをシンプルに説明できる「モデル」を探す✓ビジネスルールのモデル(説明)を、そのままコードで表現することで、ソフトウェアがわかりやすく変更が楽で安全になる✓ビジネスルールの整理の構造がソフトウェア構造になる2019/5/18 40
ビジネスルールの分割パターン2019/5/18 41価格ポリシー割引ルール取引ポリシーサービス提供ポリシー特典ルールいつどこでどのレベルで与信管理取引先審査外貨換算キャンセルポリシー購買ポリシー
ビジネスルール中心の構造2019/5/18 42ビジネスルールに基づく計算サービス判断サービスリソース管理サービス問い合わせサービス登録サービスモノリスをこういう構造に分解しながらマイクロサービスへの移行を検討する
4つの分割アプローチのまとめ2019/5/18 43
2019/5/18 44ビジネスファンクション 業務の活動単位・管理単位で分割する動詞/ユースケース 機能要求一覧で分割する名詞/リソース エンティティ+CRUDビジネスルール中心境界づけられたコンテキストサブドメイン(ドメイン駆動設計由来の分割)
トランザクションの分解2019/5/18 45モノリスのトランザクション単位はもっと分解できるあるいは、もっと分解すべき(時間があれば)
トランザクション 分解パターン2019/5/18 46パイプライン化 (VETRO)コーディネータ (Saga)状態更新の非同期化 (EH-SM-DSQ)
パイプライン化 (VETRO)2019/5/18 47
パイプライン化 (VETRO)Validation妥当性検証Enrich情報付加Translate情報導出Routing分岐判定Operation通知/記録inboundメッセージトランザクションを実行するステップの分解それぞれのステップで、ビジネスルールを実行する2019/5/18 48
inboundメッセージEvent 通知、Document送付Query 問い合わせ、Command 指示Validation妥当性検証メッセージ内容の妥当性を検証するデータ形式、必須属性、値範囲、…Enrich情報付加メッセージに含まれたIDなどから、関連する情報を収集するルール(ex. 顧客ID->顧客購買履歴)Translate情報導出付加された情報を元に、新たな情報を導出するルール(ex. 購買履歴 → 顧客ランク )Routing分岐判定導出された情報を元に、適切なオペレーションに分岐させるルール ( ex. 顧客ランクごとの対応 )Operation通知/記録通知ルール:誰に何を通知すべきか?記録ルール:どこに何を記録すべき?2019/5/18 49
コーディネータ (Saga)2019/5/18 50
コーディネータ (Saga)③が不成立だった場合、①と②にキャンセル処理を実行するさまざまな状況と、その対応方法(undo)の物語を用意する①②③を、独立して、順不同で実行する三つともOKであれば完了(Happy Goal)①独立したトランザクション A②独立したトランザクション B③独立したトランザクション Cinboundメッセージコーディネータひとつの大きなトランザクション → 独立した複数の小さなトランザクションに分割2019/5/18 51
Sagaパターン✓独立したトランザクション➢個々のトランザクションを独立して確定する(できる)✓ビジネス的な undo の仕組み➢どこかで不都合な状況が発生した場合、キャンセル処理など「カウンタートランザクション」を実行する✓ビジネスレベルでの代替アクションの分析と実装➢自動的なundo以外に、人間系の代替プロセスや取消プロセスに引き継ぐパターンも選択肢➢その場合の支援機能を用意する2019/5/18 52
状態更新の非同期化(EH-SM-DSQ)2019/5/18 53
状態更新の非同期化イベント記録Event Historyイベント履歴に追記のみ状態は更新しない状態は、履歴を再生して動的に導出する状態の実体化State Materialize目的ごとに必要な状態を導出するイベント発生とは非同期に処理(publish/subscribe)目的別のクエリDomain Specific Query検索の文脈ごとのクエリサービスを提供する(なんでも検索にしない)APIがシンプルになる各クエリのパラメータは数個にとどめる2019/5/18 54
Event History - State Materialize – Domain Specific Query2019/5/18 55inboundイベントイベントハンドラ目的別状態状態の実体化問合せsubscribe目的別状態状態の実体化問合せsubscribe目的別状態状態の実体化問合せsubscribepublishイベント履歴追記①②③状態は、履歴を再生して導出 問合せを目的別に分解することで、APIとデータ構造をシンプルにできる
本日のまとめ2019/5/18 56
基本のアプローチモノリスで作ってモジュール設計を改善するマイクロサービスの可能性を検討するマイクロサービスへ移行を検討する部分適用 部分適用2019/5/18 57
マイクロサービス4つの分割アプローチ2019/5/18 58
ビジネスファンクション(業務機能)動詞/ユースケース名詞/リソース境界づけられたコンテキスト/ サブドメイン(ドメイン駆動設計由来の分割)2019/5/18 59実際にはこれらの組み合わせになる
トランザクションの分解パターン2019/5/18 60パイプライン化 (VETRO)コーディネータ (Saga)状態更新の非同期化 (EH-SM-DSQ)

Recommended

PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
Serverless時代のJavaについて
PPTX
初心者向けMongoDBのキホン!
PDF
ドメイン駆動設計 本格入門
PDF
The Twelve-Factor Appで考えるAWSのサービス開発
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
Docker Compose 徹底解説
PDF
20210526 AWS Expert Online マルチアカウント管理の基本
PDF
AWS Black Belt Online Seminar 2016 AWS CloudFormation
PDF
なぜ「マイクロサービス“化”」が必要なのか
PDF
AWSのログ管理ベストプラクティス
PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
PDF
マルチテナント化で知っておきたいデータベースのこと
PPTX
イベント・ソーシングを知る
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
PDF
マルチテナントのアプリケーション実装〜実践編〜
PPTX
Redisの特徴と活用方法について
PPTX
マイクロサービスにおける 結果整合性との戦い
 
PDF
マイクロにしすぎた結果がこれだよ!
PDF
20190911 AWS Black Belt Online Seminar AWS Batch
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
PDF
マイクロサービス化に向けて
 
PDF
マイクロサービス運用の所感 #m3dev

More Related Content

PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
Serverless時代のJavaについて
PPTX
初心者向けMongoDBのキホン!
PDF
ドメイン駆動設計 本格入門
PDF
The Twelve-Factor Appで考えるAWSのサービス開発
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
ドメイン駆動設計に15年取り組んでわかったこと
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
Serverless時代のJavaについて
初心者向けMongoDBのキホン!
ドメイン駆動設計 本格入門
The Twelve-Factor Appで考えるAWSのサービス開発
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計に15年取り組んでわかったこと

What's hot

PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
Docker Compose 徹底解説
PDF
20210526 AWS Expert Online マルチアカウント管理の基本
PDF
AWS Black Belt Online Seminar 2016 AWS CloudFormation
PDF
なぜ「マイクロサービス“化”」が必要なのか
PDF
AWSのログ管理ベストプラクティス
PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
PDF
マルチテナント化で知っておきたいデータベースのこと
PPTX
イベント・ソーシングを知る
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
PDF
マルチテナントのアプリケーション実装〜実践編〜
PPTX
Redisの特徴と活用方法について
PPTX
マイクロサービスにおける 結果整合性との戦い
 
PDF
マイクロにしすぎた結果がこれだよ!
PDF
20190911 AWS Black Belt Online Seminar AWS Batch
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
コンテナ未経験新人が学ぶコンテナ技術入門
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Docker Compose 徹底解説
20210526 AWS Expert Online マルチアカウント管理の基本
AWS Black Belt Online Seminar 2016 AWS CloudFormation
なぜ「マイクロサービス“化”」が必要なのか
AWSのログ管理ベストプラクティス
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
マルチテナント化で知っておきたいデータベースのこと
イベント・ソーシングを知る
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
Infrastructure as Code (IaC) 談義 2022
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
マルチテナントのアプリケーション実装〜実践編〜
Redisの特徴と活用方法について
マイクロサービスにおける 結果整合性との戦い
 
マイクロにしすぎた結果がこれだよ!
20190911 AWS Black Belt Online Seminar AWS Batch
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤

Similar to マイクロサービス 4つの分割アプローチ

PDF
マイクロサービス化に向けて
 
PDF
マイクロサービス運用の所感 #m3dev
PDF
今更ながらの「マイクロサービス」
PDF
マイクロサービスアーキテクチャへのモチベーション整理とその複雑性に対する落としどころ
PDF
30分でわかるマイクロサービスアーキテクチャ 第2版
PDF
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
PPTX
マイクロサービスとは.pptx
PPTX
20200610 マイクロサービス勉強会
PDF
Design Pattern MicroServices Architecture in Japanese
 
PPTX
Microservices
PPTX
Container microservices
PDF
Open Hybrid Cloudを検討すべき理由.pdf
PDF
Monolith to microservice
PDF
Monolithtomicroservices
PDF
NGINX Solution for Digital Government Architecture
PPTX
オレ流クラウドデザイン
PPTX
Servcie Fabric and Cloud Design Pattern
PPTX
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)
PPT
Microservicesのdesign patterns
PDF
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
マイクロサービス化に向けて
 
マイクロサービス運用の所感 #m3dev
今更ながらの「マイクロサービス」
マイクロサービスアーキテクチャへのモチベーション整理とその複雑性に対する落としどころ
30分でわかるマイクロサービスアーキテクチャ 第2版
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
マイクロサービスとは.pptx
20200610 マイクロサービス勉強会
Design Pattern MicroServices Architecture in Japanese
 
Microservices
Container microservices
Open Hybrid Cloudを検討すべき理由.pdf
Monolith to microservice
Monolithtomicroservices
NGINX Solution for Digital Government Architecture
オレ流クラウドデザイン
Servcie Fabric and Cloud Design Pattern
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)
Microservicesのdesign patterns
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】

More from 増田 亨

PDF
正しいものを正しく作る塾-設計コース
PDF
ソフトウェア開発のやり方の改善
PDF
事業活動モデル・システム機能モデル・ビジネスロジックの記述
PDF
ドメインオブジェクトの設計ガイドライン
PDF
オブジェクト指向プログラミングの現在・過去・未来
PDF
ドメイン駆動設計 コアドメインを語り合ってみよう
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
PDF
ドメイン駆動設計という設計スタイル
PDF
プロダクトづくりのためのソフトウェア設計スタイル
PDF
ソフトウェア設計の学び方を考える
PDF
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
PDF
ドメイン駆動設計の正しい歩き方
PDF
ビジネスルールの複雑さに立ち向かう
PDF
ソフトウェアの核心にある複雑さに立ち向かう
PDF
ドメイン駆動設計サンプルコードの徹底解説
PDF
DDD sample code explained in Java
PDF
アジャイルなソフトウェア設計を目指して
PDF
世界でいちばんわかりやすいドメイン駆動設計
PDF
ドメイン駆動設計をゲーム開発に活かす
PDF
SoR 2.0 summary
正しいものを正しく作る塾-設計コース
ソフトウェア開発のやり方の改善
事業活動モデル・システム機能モデル・ビジネスロジックの記述
ドメインオブジェクトの設計ガイドライン
オブジェクト指向プログラミングの現在・過去・未来
ドメイン駆動設計 コアドメインを語り合ってみよう
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
ドメイン駆動設計という設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
ソフトウェア設計の学び方を考える
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
ドメイン駆動設計の正しい歩き方
ビジネスルールの複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
ドメイン駆動設計サンプルコードの徹底解説
DDD sample code explained in Java
アジャイルなソフトウェア設計を目指して
世界でいちばんわかりやすいドメイン駆動設計
ドメイン駆動設計をゲーム開発に活かす
SoR 2.0 summary

マイクロサービス 4つの分割アプローチ


[8]ページ先頭

©2009-2025 Movatter.jp