Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWSにおけるマイクロサービスとNoSQLの活用 /microservice architec...
Search
Atsushi Fukui
September 21, 2023
Technology
0
270
AWSにおけるマイクロサービスとNoSQLの活用 /microservice architecture with NoSQL on AWS
AWS Loft Event
Developer x NoSQL Night
AWSにおけるマイクロサービスとNoSQLの活用
Atsushi Fukui
September 21, 2023
Tweet
Share
More Decks by Atsushi Fukui
See All by Atsushi Fukui
マイクロサービス設計に活⽤する DDDとEvent Storming / designing_microservices_with_DDD_and_EventStorming
fatsushi
1
480
AWSにおけるイベント駆動アーキテクチャ /event driven architecture on aws
fatsushi
1
740
AWSにおけるモダンアプリケーション開発のベストプラクティス /best practices for modern application development on aws
fatsushi
1
870
徹底解説マイクロサービス 〜マイクロサービスのメリット、デメリット、なぜマイクロサービスを選択するのか〜 /why do you choose microservices architecture
fatsushi
11
3.8k
実践!モノリスからマイクロサービス!Event Stormingによるドメイン駆動設計から実装まで / AWS_Dev_Day_2023_E_3
fatsushi
19
7.6k
XP入門と私 / Introduction_of_extream_programming_and_I
fatsushi
3
2.7k
コードとデモで理解する!これは便利!AWS Lambda の実装を加速するAWS Lambda Powertools を使いこなそう! / Introducing AWS Lambda Powertools for Python on DevDay
fatsushi
5
1.3k
ヘキサゴナルアーキテクチャを利用したLambda 関数のドメインモデルの実装 Live
fatsushi
6
3.1k
DDD on AWS Lambda/ How to implement your domain models on your AWS Lambda function
fatsushi
0
440
Other Decks in Technology
See All in Technology
ドメイン名の終活について - JPAAWG 7th -
mikit
32
19k
Microsoft MVPになる前、なってから/Fukuoka_Tech_Women_Community_1_baba
nina01
0
180
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
190
Platform Engineering for Software Developers and Architects
syntasso
1
450
元旅行会社の情シス部員が教えるおすすめなre:Inventへの行き方 / What is the most efficient way to re:Invent
naospon
2
310
State of Open Source Web Mapping Libraries
dayjournal
0
240
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
380
Team Dynamicsを目指すウイングアーク1stのQAチーム
sadonosake
1
300
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
350
Windows Autopilot Deployment by OSD Guy
tamaiyutaro
0
380
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
800
メールサーバ管理者のみ知る話
hinono
1
110
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Into the Great Unknown - MozCon
thekraken
32
1.5k
RailsConf 2023
tenderlove
29
900
The Invisible Side of Design
smashingmag
297
50k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Building an army of robots
kneath
302
42k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Become a Pro
speakerdeck
PRO
25
5k
Transcript
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. Atsushi Fukui Senior Solutions Architect Developer Specialist - DevAx Amazon Web Services Japan AWSにおけるマイクロサービスと NoSQLの活⽤ D E V E L O P E R X N O S Q L N I G H T
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
⾃⼰紹介 v名前 v福井 厚(ふくい あつし)twitter: afukui@ v所属 vアマゾン ウェブ サービス ジャパン合同会社 vシニアソリューションアーキテクト vDeveloperスペシャリスト - DevAx v関⼼領域 vソフトウェア アーキテクチャ、オブジェクト指向設計、アジャイル開発 v好きなAWSサービス vサーバーレステクノロジー全般、 AWS Code シリーズ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
セッションを始める前に • このセッションはマイクロサービスを推奨するものではありません • 他のすべてのアーキテクチャと同様に、マイクロサービスも選択肢 のひとつであり、メリット、デメリットがあります • マイクロサービスアーキテクチャもシステムの⽬的と要件を 踏まえた上で、ひとつの選択肢としてお考えください
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Agenda • マイクロサービスとは • なぜマイクロサービスアーキテクチャを採⽤するのか • マイクロサービスのアンチパターン • どうやってサービスを分割するのか • Amazon DynamoDBの活⽤ • まとめ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. マイクロサービスとは
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスとは • ビジネスドメインに基づいて分割された、独⽴してデプロイ可能なサービス 映画情報 サービス 料⾦サービス 通知サービス 予約サービス 発送サービス 課⾦サービス 料⾦情報の 問い合わせ 上映⽇イベント 予約情報 問い合わせ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスの重要な概念 『マイクロサービスアーキテクチャ第2班』オライリー・ジャパン、2022
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスの性質 疎結合で、独⽴性が⾼い • 独⽴してデプロイ可能 • つまり各サービスが疎結合 • ビジネスモデルの境界に沿って分割 • Web 三層 ⇔ ドメインモデル • 技術的な境界に沿って分割しない • 変更要求に対し、複数のサービスを横断して デプロイすることになる • 各サービスが⾃⾝でデータを所有する • データベースを共有しない • データはWeb APIやイベントなどで受け渡す 『マイクロサービスアーキテクチャ第2班』オライリー・ジャパン、2022
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. なぜマイクロサービスアーキテクチャ を採⽤するのか
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
『 』 “…innovation is now recognized as the single most important ingredient in any modern economy…” イノベーション こそが近代経済において最 も重要な要素と考えられている。 競合よりも早く、新しい波を 創っていくことが重要
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
イノベーションがビジネスを進化させる 新たなマーケット 新たな顧客価値 New economics 新たなデジタル製品とサービス
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Listen Idea Experiment Innovation Flywheel 実験がイノベーションを加速する
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスに変更する理由 アジリティ 各機能を他の機能のリリースを調整せずにリリースできるようになる チームの⾃律性 チームの規模が⼩さくなることでコミュニケーションコストが減る ⾃⾝のサービスを完全にコントロールでき、⾃律的⾃発的な機能改善に繋がる スケーリング 負荷が⾼い機能のみをスケーリングすることができる 堅牢性 負荷が⾼まったとき、リリースによる障害などの影響が単⼀のサービスにとどまり、アプリケー ション全体としての堅牢性が⾼まる 採⽤技術の柔軟性 各サービス毎に異なる⾔語やアーキテクチャ(VM/コンテナ/サーバーレス/etc)を採⽤できる
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. マイクロサービスのトレードオフ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスのトレードオフ 分散システムに伴う複雑性 ネットワーク呼出による連携となり、モノリシックシステムでメ ソッドを呼び出すときには発⽣しなかった考慮点が発⽣する ネットワークのエラーや遅延、呼出先のダウン、障害発⽣時のトラ ブルシューティングなど 整合性の担保 モノリシックなシステムではトランザクションで容易に強⼒な整合 性を担保できる マイクロサービスで同様の整合性は担保できない マイクロサービスの統廃合やリファクタリングが困難 モノリスではIDEの機能で⾃動的にインターフェースやクラスの分割、 抽出、統合が可能で、データスキーマも整理可能 マイクロサービスでは、そのような統廃合は複数のサービスチーム の調整やデータの移管が必要
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
トレードオフの対策 分散システムに伴う複雑性 ⾮同期なイベント駆動で連携したり、同期API呼出の場合はサー ビスメッシュを利⽤する 整合性の担保 整合性が必要な単位でマイクロサービスを分割しない どこで整合性が必要なのか、ビジネスのモデリングが必要 サーガパターンなど、結果整合性を担保するデザインパターンを 利⽤する マイクロサービスの統廃合やリファクタリングが困難 統廃合がなるべく発⽣しないよう、ビジネスのモデリングが必要
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. マイクロサービスのアンチパターン
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
チーム内に意思決定する権限がない • ビジネス的な価値を提供するために、どの機能を優先的にリリース するかをチームで決定できない • ユーザーからのフィードバックを受けて何をどのように改善するか を決定できない • チームが⾃律的に⾏動できる組織になっていない
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
開発メンバーの数がサービスより少ない • 開発者3⼈で20以上のマイクロサービスを開発しているなど • 開発者がボトルネックとなってリリースや改善の頻度が低下
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
バックエンドのデータベースを各サービスで共有 • マイクロサービスではない • 密結合になっておりマイクロサービスのメリットが活かせない
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
サービス単位ではなく機能単位のチーム構成している • UI、アプリケーション、データベース など機能単位にチームが分かれている 「マイクロサービスアーキテクチャ 第2版」オライリージャパン 2022
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
ドメインをまたがって密結合になっている • ビジネスドメインの境界に従ってサービスが分割されていない • 境界づけられたコンテキスト間はドメインイベントで疎結合にする • 分散システムでは、⾮同期、結果整合を許容する必要がある
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
明確な⽬的もなくマイクロサービスを選択している • 銀の弾丸ではない • 「流⾏っているから」「新しい⼿法だから」という理由でマイクロ サービスアーキテクチャを選択しない • マイクロサービスのもたらす価値と複雑性のトレードオフを考慮
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. どうやってサービスを分割するのか
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
ドメイン駆動設計 (DDD) とは • ⾼品質なソフトウェアモデルを設計 するためのソフトウェア開発⼿法 • ユビキタス⾔語 ー ビジネスドメイン エキスパートと開発者の間の意思疎通と して利⽤される⽤語によってモデリング と設計を⾏う • 戦略的な設計のためのガイドライン ー 境界づけられたコンテキスト、 蒸留、⼤規模な構造の考察 • 戦術的な設計 – 集約、エンティティ、 値オブジェクト、ドメインサービス 「エリック・エヴァンスのドメイン駆動設計」:エリック・エバンス著 2011/4/9 翔泳社 「実践ドメイン駆動設計」:ヴォーン・ヴァーノン著 2015/3/16 翔泳社
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
戦略的設計 • 境界づけられたコンテキスト • コンテキストマップ • ⼤規模な構造 26
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
境界づけられたコンテキスト • 境界づけられたコンテキストは特定の • モデルを適⽤できる限定された範囲。 • コンテキストの境界を定めることで、 • チームメンバーは何を⼀致させるべきで 何を独⽴して開発できるのかについての 理解を明確化し、共有できる。 https://www.martinfowler.com/bliki/BoundedContext.html Customer Ticket Product Product version Customer Product Territory Opportunity Pipeline Salesperson Defect Sales context Support context
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
コンテキストマップ Sales context Support context Marketing context 境界つけられたコンテキストだけでは、ドメインの 全体像を⽰すことはできない。 コンテキストマップは、境界づけられたコンテキスト を統合することにより、異なるが関連するユビキタス ⾔語のマッピングを処理する。 DDDでは境界づけられたコンテキストを統合するため の7つのパターンを説明 • 共有カーネル (Shared Kernel) • 顧客/供給者の開発チーム (Customer/Supplier Development Teams) • 順応者 (Conformist) • 腐敗防⽌層 (Anticorruption layer) • 別々の道 (Separate ways) • 公開ホストサービス (Open/Host service) • 公表された⾔語 (Published language)
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
戦術的設計 • 集約、値オブジェクト、エンティティー • ドメインイベント 29
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
モデル駆動設計を構成する⾔語のナビゲーションマップ モデル駆動 設計 サービス エンティティ 値オブジェクト ファクトリ 集約 リポジトリ 利⼝なUI モデルを表現するのに使⽤する モデルを表現するのに使⽤する モデルを表現するのに使⽤する 排他的な選択 アクセスするのに使⽤する 整合性を保つのに 使⽤する アクセスするのに使⽤する ルートとして機能する カプセル化するのに使⽤する カプセル化するのに 使⽤する カプセル化するのに使⽤する カプセル化するのに使⽤する レイヤ化 アーキテクチャ ドメインを隔離する のに使⽤する
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
例 – オークションの集約 31 オークション 競売参加者 オークション品 1 * 1 ⽀払い⽅法 配送⽅法 * 1 1 1 集約ルート 在庫 1 1 競売⼈ 1 1 *
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
境界づけられたコンテキストとドメインモデル 在庫 オークション 支払い 台車 ピッカー 配送サービス 倉庫 商品 棚位置 サイズ 重さ 配送顧客 配送先 入札 落札 商品 SKU 画像 価格 入札顧客 ID 検索サービス 落札顧客 クレジットカード 支払い
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
データソースをサービスの所有ごとに分割 ⽀払い オークション 在庫 共有されている モノリシック データベース モノリシックシステム ⽀払い オークション 在庫 商品や顧客などもサービスによって利⽤する属性が 異なるので、それぞれのサービスの所有するデータ へ移⾏する。 データソースの移⾏計画も検討。 顧客マスタ 配送顧客 ⼊札顧客 ⽀払顧客
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. マイクロサービスで データソースに 対して考慮すべき点
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスで データソースに対して考慮すべき点 • サービスごとにデータソースを所有するコスト • ⼀部のサービスにリクエストが集中した場合のデータソースへの 負荷 • サービスの特性に応じたデータソースの選択 § ポリグロットパーシスタンス
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Amazon SQS メッセージ 2000件 Amazon RDS MySQL (max_conn = 100) AWS Lambda 従来の RDB コネクション
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
︙ 従来の RDB コネクション Amazon SQS メッセージ 2000件 Amazon RDS MySQL (max_conn = 100) AWS Lambda
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
︙ 従来の RDB コネクション Amazon SQS メッセージ 2000件 AWS Lambda Amazon RDS MySQL (max_conn = 100)
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Amazon RDS Proxy セキュリティの向上 シームレスな フェイルオーバー コネクションプール
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
︙ RDS Proxy RDS Proxy を使った DB コネクション Amazon SQS メッセージ 2000件 AWS Lambda Amazon RDS MySQL (max_conn = 100)
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
︙ Amazon DynamoDBを使⽤ Amazon SQS メッセージ 2000件 AWS Lambda
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. さまざまなデータストアと ポリグロットパーシスタンス
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
⼀般的なデータモデルとユースケース リレーショナル 参照整合性、 ACID トランザ クション、 スキーマオン ライト リフト・アンド・ シフト、ERP、 CRM、ファイナン ス キーバリュー ⾼スループット、 低レイテンシーの 読み取り/書き込み、 スケーラビリティ リアルタイム⼊ 札、ショッピン グカート、ソー シャル、製品カ タログ、お気に ⼊り ドキュメント ドキュメントを 保存し、あらゆ る属性のクエリ にすばやく アクセス コンテンツ管理、 パーソナライズ、 モバイル インメモリ ミリ秒の レイテンシでの キーによる クエリ リーダーボード、 リアルタイム分析、 キャッシング グラフ 各データの関連 性の素早く簡単 な⽣成とその間 の移動 不正検出、ソー シャルネット ワーキング、レ コメンデーショ ンエンジン 時系列 時間的に連続し たデータの収集、 保存、処理 IoT アプリ、 イベント追跡 元帳 アプリケーション データに対するす べての変更の完全 で不変で 検証可能な履歴 システム 記録、サプライ チェーン、 ヘルスケア、 登録、 ファイナンス ⼀般的な 使⽤事例 データ モデル ワイドカラム スケーラブル、⾼可 ⽤性、マネージド Apache Cassandra ̶ 互換サービス 低レイテンシーの アプリを構築し、 オープンソースを 活⽤し、 Cassandra をク ラウドに移⾏する Amazon Aurora Amazon RDS Amazon DynamoDB Amazon documentDB Amazon Timestream Amazon Neptune Amazon ElastiCach e Amazon QLDB Amazon キース ペース (Apache カサンドラ⽤) Redis ⽤ Amazon MemoryD B
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. Amazon DynamoDBの活⽤
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Amazon DynamoDB SQL-ストレージに最適化 NoSQL-コンピューティングに最適化 正規化/リレーショナル ⾮正規化/階層 アドホッククエリ インスタンス化されたビュー 垂直⽅向にスケール ⽔平⽅向にスケール OLAPに適している ⼤規模な OLTP* 向けに構築 (*) DynamoDBについて。分析ワークロード⽤の NoSQL データベースも⼀部ある
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. Amazon DynamoDBの詳細については 「Amazon DynamoDB Deep Dive」 セッションで詳しく。
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. Amazon DynamoDBの データモデリング
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
本⽇は時間の関係で割愛。以下のセッションを参照 https://www.youtube.com/watch?v=DIQVJqiSUkE Alex DeBrieさんの re:Invent 2019のセッションが とても分かりやすいので ぜひこちらをご覧ください。
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. ポイント︓ リレーショナルデータベースに ついて知っていることは 忘れてください︕
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
DynamoDB ̶ 追加機能 • Auto Scaling ̶ 予想によるプロビジョニングが不要に • オンデマンドキャパシティ ̶ リクエストに合わせてDDBの料⾦を ⽀払うことができ、事前のキャパシティ計画が不要 • TTL ̶ 有効期限による⾃動削除 • アダプティブキャパシティ ̶ 不均質なアクセスに⾃動的に対応 • DAX ̶ DynamoDB アクセラレータ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
DynamoDB ローカル ̶ 開発者向け • ネットワーク接続や AWS へのアクセスは不要 • 完全な DynamoDB API をサポートする クライアント側データベース • 実⾏可能な Java アーカイブ (JAR) ファイルとして利⽤可能 • Windows、Mac、および Linux システムのサポート AWS.config.dynamodb ={ endpoint: config.debug.dynamoDBLocalEndpoint, region: config.region };
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. デザインパターン: DynamoDB Streams によるイベントトリガー
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Lambda 関数から 変更したレコードへアクセス DynamoDB Streamsと AWS Lambda Invocation role ユーザー アプリ テーブル データ ストリーム Execution role DynamoDB
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Lambda 関数 他のシステムへの 変更通知 テーブルの更新 Amazon OpenSearch Service Amazon ElastiCache DynamoDB Streams トリガー
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. デザインパターン: 書き込み量の多い パーティションキーを シャーディングする
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
パーティション 1 1000 WCU ⼈気のある 候補 A ⼈気のある 候補 B 50,000/ 秒 200,000 WCU のプロビジョニング キーは「ホット」になり、 パーティションで使⽤可能な WCU を使い切る 70,000/ 秒 「Votes」テーブル リアルタイム投票の例 パーティション K 1000 WCU パーティション M 1000 WCU パーティション N 1000 WCU 有権者 200⼈の候補に投票する
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Adaptive Capacityの利⽤
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Candidate A_2 Candidate B_1 Candidate B_2 Candidate B_3 Candidate B_5 Candidate B_4 Candidate B_7 Candidate B_6 Candidate A_1 Candidate A_3 Candidate A_4 Candidate A_7 Candidate B_8 Candidate A_6 Candidate A_8 Candidate A_5 任意の ID (ただし決定論的) をパーティション キーに追加して、 書き込みをシャード UpdateItem:「CandidateA_」+rand(0, 10) 投票に 1 を追加 書き込みシャーディング 有権者 「Votes」テーブル
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
Candidate A_2 Candidate B_1 Candidate B_2 Candidate B_3 Candidate B_5 Candidate B_4 Candidate B_7 Candidate B_6 Candidate A_1 Candidate A_3 Candidate A_4 Candidate A_5 Candidate A_6 Candidate A_8 Candidate A_7 Candidate B_8 定期的 なプロ セス 候補 A 合計 :2,500M 1.Sum 2.保存 集計結果を読み取る「Scatter&Gather」 有権者 「Votes」テーブル
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. デザインパターン: 読み取りの多い パーティションキーの スケーリング
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
製品 A 製品 B 70,000/ 秒 ⼈気商品による不均等な アクセスパターン 製品カタログ - ⼈気商品 Shoppers ProductCatalog テーブル パーティ ション 1 2000 WCU パーティ ション K 2000 WCU パーティ ション M 2000 WCU パーティ ション N 2000 WCU
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
人気商品による不均等な アクセスパターン
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
フルマネージド、⾼可⽤性、 インメモリキャッシュ Java, .NET, Python, Go & Javascript をサポート クラスターベース、 マルチ AZ クエリとアイテムの キャッシュを分離 DynamoDB Accelerator (DAX)
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
従来のサイドキャッシュとの⽐較 キャッシュ アプリ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
従来のサイドキャッシュとの⽐較 DynamoDB Accelerator (DAX) アプリ キャッシュ アプリ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
⾼いキャッシュヒット率
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. まとめ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
まとめ • マイクロサービスは変化に素早く対応し、フィードバックを得て 改善を重ねるビジネスにマッチしている • マイクロサービスにはトレードオフがあり、マイクロサービスに 適した組織にする必要がある • マイクロサービスは機能や技術スタックによる分割ではなく ドメインによる分割を⾏う • マイクロサービスではデータソースの選択もポイントのひとつ • Amazon DynamoDBを活⽤するためにはRDBMSの概念を捨てる ことも必要
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. Appendix
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. マイクロサービスに適した組織
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスの組織とチームビルディング • ⾃律的で意思決定する権限と責任を持つチーム • 開発したチームが運⽤も⾏う(You build it, you run it) • Two Pizza Team • すべてを所有
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
参考︓チームトポロジー ストリームアラインドチーム ストリームアラインドチーム ストリームアラインドチーム 共有サービスプラットフォームチーム 内部プラットフォームチーム ][ セキュリティ コミュニティ・オブ・ プラクティス(CoP) プラットフォーム + ツール )( )( フィールドチーム (サポート、ソリューションアーキテクト、営業) O 製品機能のリクエスト ストリームアラインドチーム ビジネスに沿った⽬標を持つチーム イネーブリングチーム ストリームアラインドチームが 障害を克服するのを⽀援。 コンプリケイテッド・ サブシステムチーム 専⾨性が必要な機能を担当する 専⾨スキルを持つチーム コラボレーション ファシリテーション O )( フェデレーションサービス (X-as-a-Service) ][ データ サイエン スチーム サービスとしてのプラットフォーム キー: )( )( ][ * マシュー・スケルトン,マニュエル・パイス. チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計 (Japanese Edition). Kindle Edition.
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
1994-2001 2002+ モノリシックアーキテクチャ + 階層化組織 サービスの分割 + Two-pizzaチーム 1000+マイクロサービス 100+ purpose-built databases Amazonにおけるデプロイメント変遷︓2001-2002
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
コンポーネントの分割 • 原則 • 可能な限り⼩さなユニットにする(プリミティブ) • データドメインの作成 • 関数単位ではなくスケールファクタによる分割 • 個々のサービスは独⽴して運⽤ 組織間の連携による待ち時間の発⽣を抑える • サービス間はAPI(契約)で連携 これにより組織の変更が導かれました
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
組織の再編成の開始 “Two-pizza” teams • サービスを所有 • 制約を最⼩化 (コンウェイの法則) • 意思決定のための⾃⽴した組織
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
組織の再編成の開始 ひとつのチームでどうやって実⾏するのか? すべてを所有 • 計画 • セキュリティ • パフォーマンス • スケーラビリティ • デプロイメント • 運⽤ • バグ • ⽂書化 • テスト…
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
77 専任のシングルスレッド化されたチームでフローを最適化 専任の商品担当チーム 商品開発 商品化 商品マネージャー プロジェクトマネージャー 開発者 テスト担当者 インフラ担当者 運営とサポート 商品チーム B 商品チーム A 商品チーム C バックログ A • ストーリー 1 • ストーリー 2 • ストーリー 3 • ストーリー 4 バックログ A • ストーリー 1 • ストーリー 2 • ストーリー 3 • ストーリー 4 バックログ A • ストーリー 1 • ストーリー 2 • ストーリー 3 • ストーリー 4
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
スクラムロール例 スクラムマスター、開発者、プロダクトオーナー チームにアジャイルな⽅法論を適⽤ スクラムボード例
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
組織内の “サイロ” 化が勢いを無くす要因 オペレーション データベース チーム 品質保証 アプリケーション セキュリティ ソフトウェア 開発チーム “開発環境のセットアップを 待機するため作業を中断" “新しいテーブルや SQL スクリプトを 待機するため作業を中断" “パフォーマンステストを 待機するために作業を中断" “ ソースコードの⼿動検査を 待機するため作業を中断 " “データベースセキュリティの承認待機するため作業を中断" “セキュリティテストの完了を 待機するため作業を中断" “セキュリティ証明書の作成を 待機するため作業を中断" “データベースホストのセットアップを 待機するため作業を中断" “新しいテストのホストを待機するために作業を中断 ”
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
マイクロサービスはDevOpsのスタイルで運⽤すべき オペレーション データベー ス管理者 品質保証 (テスト担当者) アプリケーション セキュリティ ソフトウェア開発 チーム “共働"
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
© 2023, Amazon Web Services, Inc. or its affiliates. ドメインモデルとインフラ コードの分離
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
作成したモデルをコードに反映 • 戦術的DDD § ドメインモデルを実装に反映する § モデルと実装は繰り返し改善する § ドメインモデルがビジネスロジックに対する責務を持つ § ドメインモデルとインフラストラクチャを分離する – 依存関係逆転の原則により、ドメイン層をシステム的な関⼼ごとから分離 – ヘキサゴナル/オニオン/クリーンアーキテクチャ
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
参考︓ヘキサゴナルアーキテクチャ Domain Model Ports Adapters Primary Actor Secondary Actor HTTP Request Event Message Queue … File Storage Database Queue …
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
参考︓ヘキサゴナルアーキテクチャ Domain Model Ports Adapters Primary Actor Secondary Actor HTTP Request Event Message Queue … File Storage Database Queue … アプリケーションはポートによって接続される アダプタは外界との糊の役⽬を果たす ドメインモデルはビジネスロジックを実⾏し、モデルの外側 についての知識を持たない
AWSにおけるマイクロサービスとNOSQLの活⽤ © 2023, Amazon Web Services, Inc. or its affiliates.
参考︓ヘキサゴナルアーキテクチャのサンプルコード • ヘキサゴナルアーキテクチャを利⽤したLambda関数のドメインモ デルの実装Live § 動画︓ https://www.youtube.com/watch?v=whQ-P05QeDQ § 資料︓ https://pages.awscloud.com/rs/112-TZM-766/images/DEV- 09_LiveCoding_with_hexagonal_architecture.pdf • ヘキサゴナルアーキテクチャを利⽤した AWS Lambda のドメイン モデルオブジェクトサンプルコード https://github.com/aws-samples/aws-lambda-domain- model-sample