マイクロサービスガイド

簡単に言うと、マイクロサービスアーキテクチャスタイルとは、単一のアプリケーションを、それぞれが独自のプロセスで実行され、軽量なメカニズム(多くの場合、HTTPリソースAPI)で通信する小さなサービスのスイートとして開発するアプローチです。これらのサービスは、ビジネス機能を中心に構築され、完全に自動化されたデプロイメント機構によって独立してデプロイできます。異なるプログラミング言語で記述され、異なるデータストレージテクノロジーを使用する可能性のあるこれらのサービスの集中管理は最小限です。

-- James Lewis and Martin Fowler (2014)

martinfowler.comにあるマイクロサービスに関する資料へのガイドです。

2013年後半、マイクロサービスに関する議論が私の周りのいたるところで行われているのを耳にして、マイクロサービスの明確な定義がないことを懸念しました(SOAに多くの問題を引き起こした運命です)。そこで、このスタイルの経験豊富な実践者の一人である同僚のJames Lewis(ジェームズ・ルイス)と話し合いました。私たちは一緒に

私たちは、現場で見てきたマイクロサービスアーキテクチャの共通の特徴を挙げることで、マイクロサービススタイルの明確な定義を提供するために記事を書きました。

  • サービスによるコンポーネント化
  • ビジネス機能を中心とした組織化
  • プロジェクトではなく製品
  • スマートエンドポイントとダムパイプ
  • 分散ガバナンス
  • 分散データ管理
  • インフラストラクチャの自動化
  • 障害を想定した設計
  • 進化型設計

また、「マイクロサービスの規模はどのくらいか」や「マイクロサービスとサービス指向アーキテクチャの違いは何か」といったよくある質問にも目を向けました。この記事はマイクロサービスへの関心を高めました。

「使うべきか、使わざるべきか?」

「…そもそも一体何なのか?」

私の短い紹介トーク(約25分)では、最も重要な定義上の特徴を取り上げ、マイクロサービスとモノリスを比較し、最初のマイクロサービスシステムを本番環境に導入する前にやるべき重要なことを概説しています。


マイクロサービスはいつ使うべきか?

どのアーキテクチャスタイルにもトレードオフがあります。使用するコンテキストに応じて評価しなければならない長所と短所です。これは確かにマイクロサービスにも当てはまります。マイクロサービスは有用なアーキテクチャですが、多くの、実際にはほとんどの状況では、モノリスの方がうまくいくでしょう。

マイクロサービスは利点をもたらします…

  • 強力なモジュール境界:マイクロサービスはモジュール構造を強化します。これは大規模チームにとって特に重要です。
  • 独立したデプロイ:単純なサービスはデプロイが容易であり、自律的であるため、問題が発生した場合にシステム障害を引き起こす可能性が低くなります。
  • テクノロジーの多様性:マイクロサービスを使用すると、複数の言語、開発フレームワーク、データストレージテクノロジーを組み合わせることができます。

…しかし、コストがかかります

  • 分散:リモートコールは低速で常に障害のリスクがあるため、分散システムのプログラミングはより困難です。
  • 結果整合性:分散システムで強い整合性を維持することは非常に難しいため、誰もが結果整合性を管理する必要があります。
  • 運用上の複雑さ:定期的に再デプロイされる多数のサービスを管理するには、成熟した運用チームが必要です。

(マイクロサービストレードオフより)

マイクロサービスプレミアム

マイクロサービスアーキテクチャスタイルは、昨年話題になったトピックです。最近のO'Reillyソフトウェアアーキテクチャカンファレンスでは、すべてのセッションでマイクロサービスについて話されているようでした。皆の過剰な誇大広告検知器を点滅させるのに十分です。この結果の1つとして、チームがマイクロサービスを採用することに熱心になりすぎて、マイクロサービス自体が複雑さを導入するということに気づいていないことがわかりました。これは、プロジェクトのコストとリスクにプレミアムを追加します。多くの場合、プロジェクトを深刻な問題に陥らせるプレミアムです。

マーティン・ファウラー著

2015年5月13日

続きを読む…

bliki(ブリキ)

マイクロサービス

モノリスファースト

マイクロサービスアーキテクチャを使用しているチームの話を聞くと、共通のパターンに気づきました。

  1. 成功したマイクロサービスストーリーのほとんどすべては、大きくなりすぎて分割されたモノリスから始まっています
  2. 最初からマイクロサービスシステムとして構築されたシステムについて聞いたことがあるほとんどすべての場合、深刻な問題に陥っています。

このパターンにより、私の同僚の多くは、アプリケーションが大きくなって価値があることがわかっていても、新しいプロジェクトをマイクロサービスで開始すべきではないと主張しています。

マーティン・ファウラー著

2015年6月3日

続きを読む…

bliki(ブリキ)

進化型設計 マイクロサービス

モノリスから始めないでください

ここ数か月で、成功するマイクロサービスアーキテクチャに到達する唯一の方法は、最初にモノリスから始めることだという話を繰り返し聞いてきました。Simon Brownの言葉を言い換えると、適切に構築されたモノリスを構築できない場合、適切に構築されたマイクロサービスのセットを構築できると考えるのはなぜでしょうか。この議論の最新の、そしていつものように非常に説得力のあるレンダリングは、このサイトのMartin Fowlerからのものです。以前の草案にコメントする機会があったので、これについて考える時間がありました。そして、私はそうしました。特に、私は通常彼に同意していることに気づき、私の見解を通常共有している他の人々も彼に同意しているように見えたからです。

モノリスから始めることは、通常、まさに間違ったことだと確信しています。

Stefan Tilkov(ステファン・ティルコフ)著

2015年6月9日

続きを読む…

記事

マイクロサービス

マイクロサービスの前提条件

マイクロサービスアーキテクチャスタイルの使用について人々と話すと、多くの楽観主義が聞こえてきます。開発者は、より小さなユニットで作業することを楽しんでおり、モノリスよりも優れたモジュール性を期待しています。しかし、どのアーキテクチャ上の決定と同様に、トレードオフがあります。特にマイクロサービスでは、運用に深刻な影響があります。運用は、単一の明確に定義されたモノリスではなく、小さなサービスのエコシステムを処理する必要があります。したがって、特定の基本的な能力がない場合は、マイクロサービススタイルの使用を検討しないでください。

マーティン・ファウラー著

2014年8月28日

続きを読む…

bliki(ブリキ)

マイクロサービス

マイクロサービスと分散オブジェクトの第一法則

EAAのPで、「オブジェクトを分散しないでください」と言いました。このアドバイスは、マイクロサービスへの私の関心と矛盾していますか?

マーティン・ファウラー著

2014年8月13日

続きを読む…

記事

API設計 マイクロサービス

マイクロサービスに関するSam Newmanへのインタビュー

gotoカンファレンスは、Sam Newmanの著書「Monoliths to Microservices」についてインタビューするように依頼してきました。これは、マイクロサービスとそれらをいつ使用するかについての一般的な会話になりました。サムは、それらの主な理由は、独立したデプロイ可能性、データの分離、組織構造の反映であると考えています。私は最初のものについては懐疑的ですが、データと人々はソフトウェア開発の複雑な部分であると考えています。

マーティン・ファウラー著

2020年9月4日

もっと見る…

ビデオ

インタビュー マイクロサービス


マイクロサービスの構築

マイクロサービスアーキテクチャはかなり新しいものですが、Thoughtworksでは初期の頃からマイクロサービスに取り組んできたため、幸運でした。マイクロサービスを扱うための最良の方法をまとめた説明として、Sam Newmanの著書Building Microservices(マイクロサービスの構築)が最適な入門書です。彼は私たちの経験や他の出版物を基にこの本を書きました。

マイクロサービスアーキテクチャにおけるテスト戦略

ここ数年、サービスベースのアーキテクチャは、より小さく、より焦点を絞った「マイクロ」サービスへと移行しています。このアプローチには、各コンポーネントを個別にデプロイ、スケーリング、および保守できること、複数のチームで開発を並列化できることなど、多くの利点があります。ただし、これらの追加のネットワークパーティションが導入されると、モノリシックなインプロセスアプリケーションに適用されたテスト戦略を再検討する必要があります。ここでは、複数の独立してデプロイ可能なコンポーネントの追加のテストの複雑さを管理するためのいくつかのアプローチと、異なるサービスの保護者として行動する複数のチームがいるにもかかわらず、テストとアプリケーションを正しく保つ方法について説明します。

Toby Clemson(トビー・クレムソン)著

2014年11月18日

続きを読む…

infodeck(インフォデック)

人気 テスト インフォデック マイクロサービス

モノリスをマイクロサービスに分割する方法

モノリシックシステムが大きすぎて扱えなくなると、多くの企業はそれらをマイクロサービスアーキテクチャスタイルに分解することを検討します。それは価値のある旅ですが、簡単なものではありません。私たちは、これをうまく行うには、単純なサービスから始める必要があるが、その後、ビジネスにとって重要であり、頻繁に変更される垂直方向の機能に基づいたサービスを引き出す必要があることを学びました。これらのサービスは、最初は大きく、できれば残りのモノリスに依存しないようにする必要があります。移行の各ステップが、アーキテクチャ全体のアトミックな改善を表すようにする必要があります。

Zhamak Dehghani(ザマック・デガニ)著

2018年4月24日

続きを読む…

記事

マイクロサービス レガシーシステム改修

マイクロフロントエンド

優れたフロントエンド開発は困難です。多くのチームが大規模で複雑な製品を同時に処理できるようにフロントエンド開発を拡張することはさらに困難です。この記事では、フロントエンドモノリスをより小さく、より管理しやすい多くの部分に分割するという最近の傾向と、このアーキテクチャがフロントエンドコードに取り組むチームの有効性と効率を高める方法について説明します。さまざまな利点とコストについて説明するだけでなく、利用可能な実装オプションのいくつかについても説明し、この手法を実証する完全なサンプルアプリケーションを深く掘り下げます。

Cam Jackson(キャム・ジャクソン)著

2019年6月19日

続きを読む…

記事

アプリケーションアーキテクチャ フロントエンド マイクロサービス

モノリスからデータリッチサービスを抽出する方法

モノリスをより小さなサービスに分割する場合、最も難しい部分は、実際にはモノリスのデータベースに存在するデータを分割することです。データリッチサービスを抽出するには、常にデータの単一の書き込みコピーを保持する一連のステップに従うと便利です。ステップは、既存のモノリスで論理的な分離を行うことから始まります。サービスの動作を個別のモジュールに分割し、次にデータを個別のテーブルに分割します。これらの要素は、個別に新しい自律サービスに移動できます。

Praful Todkar(プラフル・トッドカー)著

2018年8月30日

続きを読む…

記事

マイクロサービス レガシーシステム改修

Infrastructure As Code(コードとしてのインフラストラクチャ)

コードとしてのインフラストラクチャとは、ソースコードを通じてコンピューティングおよびネットワークインフラストラクチャを定義し、それを他のソフトウェアシステムと同様に扱うことができるアプローチです。このようなコードは、ソース管理に保存して、監査可能性と再現可能なビルドを可能にし、テストプラクティスと継続的デリバリーの完全な規律の対象とすることができます。これは、過去10年間、成長するクラウドコンピューティングプラットフォームに対処するために使用されてきたアプローチであり、今後、コンピューティングインフラストラクチャを処理するための支配的な方法になるでしょう。

マーティン・ファウラー著

2016年3月1日

続きを読む…

bliki(ブリキ)

継続的デリバリー マイクロサービス

DevOps文化

アジャイルソフトウェア開発は、要件分析、テスト、開発の間のサイロをいくつか打破しました。デプロイメント、運用、保守は、ソフトウェア開発プロセスの他の部分から同様に切り離されてきた活動です。DevOpsムーブメントは、これらのサイロを取り除き、開発と運用の間の協調を促進することを目的としています。

サーキットブレーカー

ソフトウェアシステムが、異なるプロセスで実行されている、おそらくネットワークを介した異なるマシン上にあるソフトウェアにリモートコールを行うことは一般的です。インメモリコールとリモートコールの大きな違いの1つは、リモートコールは失敗するか、タイムアウト制限に達するまで応答なしでハングする可能性があることです。さらに悪いことに、応答のないサプライヤに多数の呼び出し元がいる場合、重要なリソースが不足し、複数のシステムにわたるカスケード障害が発生する可能性があります。Michael Nygard氏は、彼の優れた著書であるRelease Itの中で、この種の壊滅的なカスケードを防ぐためにサーキットブレーカーパターンを普及させました。

サーキットブレーカーの背後にある基本的な考え方は非常にシンプルです。保護された関数呼び出しをサーキットブレーカーオブジェクトでラップし、障害を監視します。障害が特定のしきい値に達すると、サーキットブレーカーがトリップし、サーキットブレーカーへのそれ以降のすべての呼び出しは、保護された呼び出しがまったく行われずにエラーで返されます。通常、サーキットブレーカーがトリップした場合、何らかのモニターアラートも必要になります。

マーティン・ファウラー著

2014年3月6日

続きを読む…

bliki(ブリキ)

継続的デリバリー アプリケーションアーキテクチャ