Close

Microservices: understanding what it is and its benefits

つい最近まで、ソフトウェア アプリケーションを構築するために好まれていた手法は、1 つの自律的なユニットとしてのモノリシック アーキテクチャでした。この手法は、アプリケーションが複雑化するまでは多くの開発者にとってうまく機能していました。モノリシック システムではコードのほんの一部を変更しただけで、システム全体を再構築し、システム全体でテストを実行し、まったく新しいバージョンのアプリケーションをデプロイする必要があります。

そこで登場したのが、マイクロサービスです。これは、ソフトウェア システムを小さなユニットに分割して、自律的に開発してデプロイできるようにするアプローチです。マイクロサービス アーキテクチャは、新機能、バグ修正、セキュリティ改善などの更新を継続的に提供しようとする DevOps 運動によって後押しされました。また、企業が最新のプログラミング言語やテクノロジー スタックによってレガシー アプリケーションを書き直す多くの動きにもつながりました。

マイクロサービスは小さなユニットの集まりで、大規模で複雑なアプリケーションを継続的に提供してデプロイします。

マイクロサービスとは?


単に「マイクロサービス」とも呼ばれるマイクロサービス アーキテクチャは、分散して自律的に開発される、独立してデプロイ可能な一連のサービスとしてアプリケーションを構築する手法です。これらのサービスはゆるく結合しており、個別にデプロイ可能で保守も容易です。モノリシック アプリケーションが分割できない単一のユニットである一方、マイクロサービス アーキテクチャではそのユニットを複数の独立したユニットの集合体に分割して、それらを連携させて全体を構成します。マイクロサービスはユーザー要件への迅速な対応を可能にする継続的なデリバリーの基盤となるため、DevOps に欠かせない要素です。

イラスト: マイクロサービス

マイクロサービスは、1 つのドメイン ロジックを担当する Web サービスです。複数のマイクロサービスが組み合わされてアプリケーションとなり、各マイクロサービスが 1 つのドメイン機能を提供します。マイクロサービスは REST や gRPC などの API によって相互にやり取りしますが、他のサービスの内部動作については関知しません。マイクロサービス間で行われるこのような調和のとれたやり取りが、マイクロサービス アーキテクチャです。

マイクロサービス アーキテクチャを採用すると、異なるスタックと切り離されたデプロイによって、開発者は各種サービスに特化した小規模なチームを編成できます。たとえば、Jira には複数のマイクロサービスがあり、それぞれが課題の検索、課題の詳細の表示、コメント、課題のトランジションなどの特定の機能を提供しています。

マイクロサービスの特徴


マイクロサービス アーキテクチャに正式な定義はないものの、知っておくべき一般的なパターンや特徴がいくつかあります。

マイクロサービス アーキテクチャでは、他のサービスの機能とアプリケーションの整合性を損なうことなく、各コンポーネントを開発、デプロイ、運用、変更、再デプロイできます。

マイクロサービスのメリット


Microservices provide many advantages. They simplify development and project management. Sometimes, they may eliminate the need for separate operations teams since developers can handle operations for the microservices they build. 

Some other benefits of microservices include:

イラスト: 天秤

柔軟なスケーリング

マイクロサービスは設計別に分散されてクラスターにデプロイできるため、サービスの境界を越えて動的かつ水平に拡張できます。マイクロサービスの負荷容量が最大に達した場合は、そのサービスの新しいインスタンスを付随するクラスターに迅速にデプロイして負担を軽減できます。

アジャイルのイラスト

Agility

通常は、小規模で独立したチームがマイクロサービス内のサービスを構築するため、アジャイル プラクティスの採用が促進されます。チームが独立して作業し、迅速に行動できるようになり、開発サイクル タイムが短縮されます。

ツールボックスのイラスト

柔軟なテクノロジー

マイクロサービス アーキテクチャでは、1 つのツールチェーンを使用する固定的なアプローチに従う必要がなく、希望のツールを自由に選択できます。

イラスト: 積み上げたブロック

頻繁なリリース

マイクロサービスの主なメリットの 1 つは、頻繁かつ迅速なリリース サイクルです。継続的なインテグレーションとデリバリー (CI/CD) の重要な要素であるマイクロサービスによって、チームは新機能を試してうまくいかなければ元に戻せます。これによってコードの更新が容易になり、新機能の市場投入までの時間が短縮されます。

マイクロサービスの課題


Microservices-based architecture has many benefits, but it also comes with challenges. 

One challenge of microservices is that the independent services generate their logs. This is a disadvantage compared to monoliths' centralized logs, which provide a single source of truth for developers and operations teams. Monitoring and infrastructure management are also more complicated since many moving pieces exist. Testing and debugging are challenging because, unlike monoliths, no integrated development environment (IDE) exists.

Atlassian's Compass can help with all these challenges. Compass facilitates collaboration and allows companies to manage the complexities of distributed architectures as they scale. It does this by bringing the disconnected information together in a central, searchable location.

開発の無秩序化

モノリスからマイクロサービスへの移行は、より複雑になることを意味します。複数のチームが作成したより多くのサービスがより多くの場所で提供されます。さまざまなコンポーネントが互いにどのように関係しているか、特定のソフトウェア コンポーネントを所有しているのは誰か、依存するコンポーネントに悪影響を与えないようにするにはどうすればよいかを判断するのは、困難を極めます。無秩序を放置したままにすると、開発速度が遅くなって運用パフォーマンスが低下します。システムが大きくなるため、経験豊富な運用チームが継続的な再デプロイとアーキテクチャの頻繁な変更を管理する必要があります。

明確なオーナーシップの欠如

マイクロサービス アーキテクチャでは、誰が何を所有しているのかがさらにわかりにくくなります。DevOps チームでは、アプリケーションをデプロイするために、API、コンポーネント ライブラリ、監視ツール、Docker イメージを組み合わせて実行します。所有者、リソース、他のコンポーネント間の進化する関係など、コンポーネントに関する情報を把握することが重要です。製品を理解するために必要な情報を関係者全員が簡単に見つけられるようにするには、多数のチーム間で正確なコミュニケーションと調整を行えることが必要です。

インフラストラクチャ コストの急上昇

新しいマイクロサービスを本番環境に追加するたびに、テスト スイート、デプロイ ガイド、ホスティング インフラストラクチャ、監視ツールなどのコストが発生します。

組織への負担増大

マイクロサービス アーキテクチャ チーム間で更新とインターフェイスを調整するには、さらなるレベルのコミュニケーションとコラボレーションが必要です。

デバッグ

それぞれ独自のログ セットを持つ複数のマイクロサービスが含まれるアプリケーションをデバッグするのは、困難を極めます。1 つのビジネス プロセスが複数のマシン全体で実行されることもあるため、デバッグがさらに複雑になります。

インシデント対応

マイクロサービスを使用している人物、マイクロサービスのデプロイ場所、マイクロサービスのデプロイ方法、問題が発生した際の連絡先などの情報を含む、マイクロサービスのインシデント対応インテリジェンスが必要です。

マイクロサービスと DevOps: 相互に補完しあうテクノロジー


マイクロサービスの複雑さが増してマイクロサービスへの依存性が高まる中、デプロイ、監視、そしてライフサイクルの自動化という各 DevOps プラクティスは、マイクロサービス アーキテクチャに不可欠であると考えられています。そのため、多くの場合、マイクロサービスは DevOps カルチャーを採用するための第一歩と見なされています。これによって、次のことが可能になります。

  • 自動化
  • 拡張性の向上
  • 管理性
  • Agility
  • デリバリーとデプロイの迅速化

マイクロサービス アーキテクチャの主要テクノロジーとツール


コンテナーはアプリケーションとそのすべての依存関係をパッケージ化することで、アプリケーションを簡単に一貫してデプロイできるようにしたものです。コンテナーには独自のオペレーティング システムのオーバーヘッドがないため、従来の仮想マシンよりも小型で軽量です。より迅速にスピン アップ/ダウンできるため、マイクロサービス アーキテクチャ内に見られる小規模なサービスに最適です。

サービスやコンテナーの急増に伴い、大規模なコンテナー グループの連携と管理が不可欠になってきています。Docker は、コンテナーの構築、デプロイ、実行をサポートする、人気のコンテナー化プラットフォームおよびランタイムです。しかし、コンテナーを大規模に実行して管理することは、Docker だけでは困難です。大規模なコンテナー化をサポートするには、Kubernetes や Docker Swarm、Mesos、HashiCorp Nomad などの他のソリューションを使用できます。

コンテナー化とコンテナーのデプロイは、新しいパターンの分散インフラストラクチャです。Docker と Kubernetes は、サービスを完全なコンテナーにパッケージ化して、迅速にデプロイおよび破棄できるようにします。これらの新しいインフラストラクチャ ツールは、マイクロサービス アーキテクチャを補完します。コンテナー管理システムによって、マイクロサービスがコンテナー化されてデプロイが容易になり、簡単に管理できるようになります。

マイクロサービスとは?


単に「マイクロサービス」とも呼ばれるマイクロサービス アーキテクチャは、分散して自律的に開発される、独立してデプロイ可能な一連のサービスとしてアプリケーションを構築する手法です。これらのサービスはゆるく結合しており、個別にデプロイ可能で保守も容易です。モノリシック アプリケーションが分割できない単一のユニットである一方、マイクロサービス アーキテクチャではそのユニットを複数の独立したユニットの集合体に分割して、それらを連携させて全体を構成します。マイクロサービスはユーザー要件への迅速な対応を可能にする継続的なデリバリーの基盤となるため、DevOps に欠かせない要素です。

イラスト: マイクロサービス

マイクロサービスは、1 つのドメイン ロジックを担当する Web サービスです。複数のマイクロサービスが組み合わされてアプリケーションとなり、各マイクロサービスが 1 つのドメイン機能を提供します。マイクロサービスは REST や gRPC などの API によって相互にやり取りしますが、他のサービスの内部動作については関知しません。マイクロサービス間で行われるこのような調和のとれたやり取りが、マイクロサービス アーキテクチャです。

マイクロサービス アーキテクチャを採用すると、異なるスタックと切り離されたデプロイによって、開発者は各種サービスに特化した小規模なチームを編成できます。たとえば、Jira には複数のマイクロサービスがあり、それぞれが課題の検索、課題の詳細の表示、コメント、課題のトランジションなどの特定の機能を提供しています。

マイクロサービスの未来


What tools do people commonly use in microservices?

Businesses often use containerization tools such as Kubernetes and Docker. They also frequently use API gateways between microservices and their clients. These gateways perform API traffic functions such as authentication, access control, and load balancing.

How do microservices differ from monolithic architecture?

Monoliths are large codebases that function as one system. They require system downtime for updates and debugging. Microservices architectures are distributed applications with smaller, independent chunks of functionality. Developers can upgrade, improve, and debug these modules without taking the entire application offline. This simplifies scaling and aids development velocity.

How do microservices impact DevOps?

Those who understand DevOps know that continuous integration and continuous delivery (the DevOps CI/CD pipeline) are the mainstays of DevOps methodologies. The modular nature of microservices aligns perfectly with this approach. Microservices empower developers to swiftly create, test, and deploy small, frequent releases.

Join the Atlassian Community for more microservices articles and discussions.

Compass によって マイクロサービスをナビゲートする

マイクロサービス アーキテクチャで作業する際は、アトラシアンの Compass によって拡張する分散アーキテクチャの複雑さを管理できます。Compass は拡張可能な開発者エクスペリエンス プラットフォームで、エンジニアリング成果とチーム コラボレーションに関する分断された情報を一元化された検索可能な場所にまとめます。Compass はコンポーネント カタログによってマイクロサービスの無秩序な増加を抑える上で役に立つだけでなく、スコアカードによってベスト プラクティスを確立してソフトウェアの正常性を測定する上でも役に立ちます。また、Atlassian Forge プラットフォーム上で構築された拡張機能によって、DevOps ツールチェーン全体のデータとインサイトを提供します。

イラスト: Compass マイクロサービス