Close

マイクロサービスとモノリシック アーキテクチャの比較

モノリスが大きくなりすぎたら、マイクロサービスに移行すべきタイミングかもしれません。

顔写真: Chandler Harris
Chandler Harris

マーケティング戦略家兼ライター


モノリシック アプリケーションは単一の統合ユニットとして構築される一方で、マイクロサービス アーキテクチャは独立してデプロイ可能な小規模なサービスの集合体です。ご利用の環境にはどちらが最適でしょうか? これは、いくつかの要因に左右されます。

2009 年、Netflix は成長に伴う痛みに直面しました。同社のインフラストラクチャは、急速に拡大するビデオ ストリーミング サービスの需要に対応できませんでした。同社は IT インフラストラクチャをプライベート データ センターからパブリック クラウドに移行して、モノリシック アーキテクチャをマイクロサービス アーキテクチャに置き換えることを決定しました。唯一の問題は、「マイクロサービス」という用語が存在せず、その構造がよく知られていなかったことです。

Netflix は、モノリスからクラウドベースのマイクロサービス アーキテクチャへの移行に成功した、最初の有名企業の 1 つになりました。DevOps を内部化したこの新しいインフラストラクチャを理由の 1 つとして、2015 年の JAX Special Jury を受賞しました。現在、Netflix にはプラットフォームの個別の部分を管理およびサポートする 1,000 を超えるマイクロサービスがあり、エンジニアはコードを頻繁にデプロイしており、その数は時には 1 日に何千回にも及びます。

Netflix は、モノリス アーキテクチャからマイクロサービス アーキテクチャへの移行という、今日ますます一般的になってきているトレンドの初期のパイオニアでした。

モノリシック アーキテクチャとは


モノリシック アーキテクチャはソフトウェア プログラムの従来のモデルであり、自己完結型で他のアプリケーションから独立した統合ユニットとして構築されています。多くの場合、「モノリス」という言葉は大きくて氷河の動きのように極めて遅いことに由来しています。これは、ソフトウェア設計におけるモノリス アーキテクチャの真の姿からかけ離れてはいません。モノリシック アーキテクチャは単一の大規模コンピューティング ネットワークで、ビジネス上の考慮事項をすべて組み合わせた 1 つのコード ベースを持ちます。この種のアプリケーションに変更を加えるには、コード ベースにアクセスしてサービス側インターフェイスの更新バージョンをビルドしてデプロイすることで、スタック全体を更新する必要があります。そのため、更新には制限も時間もかかります。

モノリスはコード管理、認知コスト、デプロイを容易にするために、プロジェクト期間の早期段階で重宝する可能性があります。これによって、モノリスのすべてを一度にリリースできます。

画像: モノリシック アーキテクチャ
アイコン: コードのビルド
関連資料

マイクロサービスの構築方法

アイコン: 3 つの輪
ソリューションを見る

Compass によってコンポーネントを管理

モノリシック アーキテクチャのメリット


組織は多数のさまざまな要因に応じて、モノリシックとマイクロサービスの各アーキテクチャのどちらからでもメリットを得られます。モノリシック アーキテクチャによって開発する際は、1 つのコード ベースに基づくアプリケーションの作成が簡単なために開発速度が速いことが第一のメリットとなります。

モノリシック アーキテクチャには、次のようなメリットがあります。

デプロイが簡単 – 実行可能ファイルまたはディレクトリが 1 つであるため、デプロイが簡単です。

開発 – アプリケーションを 1 つのコード ベースで構築すると、開発が容易になります。

パフォーマンス – 多くの場合、一元化されたコード ベースとリポジトリでは、多数の API がマイクロサービスによって実行するのと同じ機能を 1 つの API で実行できます。

簡素化されたテスト – モノリシック アプリケーションは一元化された単一のユニットであるため、分散アプリケーションを使用するよりも高速にエンドツーエンドのテストを実行できます。

デバッグが簡単 – すべてのコードが 1 か所に配置されているため、リクエストに従いやすく問題を見つけやすくなります。

モノリシック アーキテクチャのデメリット


Netflix の場合と同様に、モノリシック アプリケーションは非常に効果的である可能性がありますが、それは大きくなりすぎてスケーリングが困難になるまでの話です。1 つの機能に小さな変更を加えるために、プラットフォーム全体をコンパイルしてテストする必要があります。これは、今日の開発者が好むアジャイル アプローチに反しています。

モノリスのデメリットは次のとおりです。

開発速度の遅さ – 大規模なモノリシック アプリケーションでは、開発がより複雑になって速度が低下します。

スケーラビリティ – 個々のコンポーネントはスケーリングできません。

信頼性 – いずれかのモジュールにエラーがあると、アプリケーション全体の可用性に影響する可能性があります。

テクノロジー導入の障壁 – フレームワークや言語の変更はアプリケーション全体に影響し、変更にはコストと時間がかかることがよくあります。

柔軟性の欠如 – モノリスは、モノリスですでに使用されているテクノロジーによる制約を受けます。

デプロイ – モノリシック アプリケーションを少し変更するために、モノリス全体を再デプロイする必要があります。

マイクロサービスとは?


単にマイクロサービスとも呼ばれるマイクロサービス アーキテクチャは、独立してデプロイ可能な一連のサービスに依存するアーキテクチャ手法です。これらのサービスには、特定の目標を持つ独自のビジネス ロジックとデータベースがあります。更新、テスト、デプロイ、スケーリングは各サービス内で行われます。マイクロサービスはドメイン固有の考慮事項である主要なビジネスを、別々の独立したコード ベースに分離します。マイクロサービスは複雑さを軽減するものではありませんが、タスクを互いに独立して機能し全体に貢献する小さなプロセスに分けることで、複雑さを可視化して管理しやすくします。

マイクロサービスはチームがユーザーの要件に迅速に適応できるようにする継続的なデリバリーを実践する基盤であるため、多くの場合、マイクロサービスの採用は DevOps と密接に関係しています。

画像: マイクロサービス アーキテクチャ

アトラシアンのマイクロサービスへの道のり


アトラシアンは、Jira と Confluence で拡大と拡張の課題に直面した後、2018 年にマイクロサービスへの道をたどりました。オンプレミスで稼働しているシングルテナントのモノリシック アーキテクチャでは、将来のニーズに合わせて拡張できないことがわかりました。

Jira と Confluence を再構築して、ステートフルなシングルテナントのモノリシック システムから、Amazon Web Services (AWS) がホストするマルチテナントのステートレス クラウド アプリケーションに移行することを決定しました。その後、時間をかけてこれらをマイクロサービスに分解しました。このプロジェクトは、ある上級エンジニアが「このアイデアは本当に気に入っているが、めまい (vertigo) がする」と言ったことにちなんで、「Vertigo」と名付けられました。これは、これまでで最大のインフラストラクチャ プロジェクトであり、AWS への移行には 2 年かかり、わずか 10 か月余りで 10 万人を超えるお客様をサービスの中断なく移行しました。また、サービスをマイクロサービスに分解することにも取り組みました。

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


マイクロサービスは決して特効薬ではありませんが、成長するソフトウェアや企業の多くの問題を解決します。マイクロサービス アーキテクチャは独立して実行されるユニットで構成されているため、他のサービスに影響を与えずに各サービスを開発、更新、デプロイ、スケーリングできます。ソフトウェアの更新をより頻繁に実行しながら、信頼性、アップタイム、パフォーマンスを向上させられます。アトラシアンは週に 1 回のアップデートのプッシュから、1 日に 2 - 3 回のプッシュへと改善できました。

アトラシアンが成長するに伴い、マイクロサービスによってチームや地理的な場所をサービスの所有権に沿って分割することで、より確実にスケーリングできるようになります。Vertigo を始める前、アトラシアンには世界中に 5 つの異なる開発センターがありました。このような分散したチームは一元化されたモノリスに制約されていたため、自律的な方法でチームをサポートする必要がありました。マイクロサービスによってこれが実現します。

Vertigo のメリットには、デプロイ速度の向上、ディザスター リカバリ、コストの削減、パフォーマンスの向上などがあります。これによって目標をより早く達成しながら、その過程で顧客により大きな価値を提供できます。

さらに、より一般的には、マイクロサービスによってチームは継続的なインテグレーションと継続的なデリバリー (CI/CD) で、コードを更新したりリリース サイクルを加速したりしやすくなります。チームはコードを試して、何か問題が起きた場合はロールバックできます。

要するに、マイクロサービスのメリットは次のとおりです。

アジリティ — 頻繁にデプロイする小規模なチームでアジャイルな作業方法を促進します。

柔軟なスケーリング – マイクロサービスの負荷容量が最大に達した場合は、そのサービスの新しいインスタンスを付随するクラスターに迅速にデプロイして、負担を軽減できます。現在、アトラシアンはマルチテナントでステートレスであり、お客様は複数のインスタンスにまたがっています。今では、さらに大きなインスタンス サイズをサポートできるようになりました。

継続的なデプロイ – リリース サイクルが頻繁かつ迅速になりました。以前は 1 週間に 1 回アップデートをプッシュしていましたが、現在は 1 日に 2 - 3 回程度プッシュできます。

高い保守性とテスト性 – チームは新機能を試すことができるうえに、何かがうまくいかない場合はロールバックできます。これによって、コードの更新が容易になり、新機能の市場投入までの時間が短縮されます。さらに、個々のサービスの障害やバグを簡単に特定して修正できます。

独立したデプロイが可能 – マイクロサービスは個別のユニットであるため、個々の機能を迅速かつ簡単に独立してデプロイできます。

テクノロジーの柔軟性 –マイクロサービス アーキテクチャによって、チームは希望するツールを自由に選択できます。

高い信頼性 – アプリケーション全体が停止する恐れなしに、特定のサービスに対する変更をデプロイできます。

チーム満足度の向上 – マイクロサービスを扱うアトラシアン チームは自律性が高まり、プル リクエストが承認されるまで数週間待たずに自らビルドしてデプロイできるため、満足度が向上します。

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


少数のモノリシック コードベースから製品を支える多くの分散型システムやサービスに移行すると、意図しない複雑性が生じました。当初、以前と同じベロシティと自信を持って新機能を追加するのに苦労していました。マイクロサービスによって複雑さが増して、それが開発の無秩序な増加や急速で管理不能な成長につながる可能性があります。異なるコンポーネントが互いにどのように関係しているか、特定のソフトウェア コンポーネントを所有しているのは誰か、依存するコンポーネントに干渉しないようにするにはどうすればよいかを判断するのは、難しい可能性があります。

このため、アトラシアンは Vertigo によって、既存の製品と購入して構築する将来の製品を強化する共通の機能を構築しました。単一の製品を扱う会社であれば、マイクロサービスは不要かもしれません。

マイクロサービスのデメリットには、次のようなものがあります。

開発の無秩序な増加 – マイクロサービスの方がモノリス アーキテクチャより複雑になります。なぜなら、複数のチームによってより多くの場所でより多くのサービスが作成されるからです。開発の無秩序な増加を適切に管理しないと、開発速度が遅くなって運用パフォーマンスが低下します。

指数関数的なインフラストラクチャ コスト – 新しいマイクロサービスごとに、テスト スイート、デプロイ ガイド、ホスティング インフラストラクチャ、監視ツール、その他に関する独自のコストがかかる可能性があります。

組織的なオーバーヘッドの増加 – チームはアップデートとインターフェイスを調整するために、コミュニケーションとコラボレーションのレベルをさらに高める必要があります。

デバッグの課題 — 各マイクロサービスには独自のログ セットがあるため、デバッグがより複雑になります。さらに、1 つのビジネス プロセスを複数のマシン全体で実行できるため、デバッグがさらに複雑になります。

標準化の欠如 – 共通のプラットフォームがない場合は、言語、ロギング標準、監視が急増する可能性があります。

明確な所有権の欠如 – 導入されるサービスの数が増えるにつれて、それらのサービスを実行するチームの数も増加します。時間が経つにつれて、チームが利用できるサービスやサポートの問い合わせ先を把握することが難しくなります。

画像: モノリスとマイクロサービスの比較

モノリス アーキテクチャからマイクロサービス アーキテクチャへの移行に関するアトラシアンのヒント


多くのプロジェクトは最初はモノリスとして始まり、その後マイクロサービス アーキテクチャに進化します。モノリスに新機能が追加されると、多くの開発者を特異なコードベースに取り組ませるのは面倒になってくるかもしれません。コードの競合がより頻繁になって、ある機能を更新することで無関係な機能にバグが入るリスクが増加します。このような望ましくないパターンが発生した際は、マイクロサービスへの移行をご検討ください。

移行から学んだベスト プラクティスを次に紹介します。

移行戦略を策定する

アトラシアンはお客様にどのような順序で移行していただくかを決定するために、多大な時間を費やしました。移行後に多くのお客様においてプロファイルや利用動態が異なることがわかっていたため、事前に計画を立てました。

ツールを導入する

マイクロサービスの移行を進める際は、適切なツールが不可欠です。移行はスプリントではなくマラソンであることを知っていたため、お客様にすぐに移行していただくのではなく、最初に移行用のツールに投資してこれを作成しました。私たちが構築した最も重要なツールは、すべてのマイクロサービスを追跡する社内サービス カタログであるマイクロスコープでした。アトラシアンの全開発者はマイクロスコープによって、社内のあらゆるマイクロサービスに関する情報をすべて参照できます。

また、マイクロスコープで ServiceQuest と呼ばれるツールも構築しました。このツールは品質、サービス設計、プライバシー、セキュリティ、信頼性のチェックなどのコードのチェックを、本番前に自動で検出します。

さらに、アトラシアンの技術スタックを中心とするツールを構築しました。社内には、特定のスタックで新しいサービスをスピン アップできるサービスがあり、これはロギング、監視、キャッシュより優先されます。最後に、移行プロセス自体を含めて、できる限り多くの作業を自動化しました。また、すべての移行をリアルタイムで効果的に表示するために、独自のダッシュボードを作成しました。

期待を管理する

会社の変革には、必要なトレードオフを実施する意思のある結果に責任を持つエグゼクティブ スポンサーが必要です。アトラシアンの CTO、Sri Viswanath は述べています。この担当者は組織が新しいツール、システム、プロセスに投資することで、永続的に改善できるようにする必要があります。

多くのスタッフが関与する大規模なインフラストラクチャの移行に伴って、企業は投資収益率を知りたいと考えています。アトラシアンのプラットフォーム責任者である Mike Tria は述べています。エグゼクティブ チーム、関係者、顧客、パートナー、R & D チームの残りのメンバーとのコミュニケーションを維持することは、非常に重要です。期待されるメリットを含め、自分が何をしているのかを確実に伝えてください。そして、必ず成功を祝いましょう。

文化的なシフトを受け入れる

「このような大規模なプロジェクトでは、文化が非常に重要です」と Viswanath は述べています。「問題があるときに、その問題が次第に浸透していることを確認する必要があります」移行を行う、それは単なる技術的な移行ではなく人と組織が変化することを意味します。2015 年にアトラシアンが行っていたことは、「コードを作成して、壁の向こう側にいる運用チームにこのコードを放り投げ」、受け取った運用チームがこれを実行してデプロイすることでした。私たちは、2017 年末までに「構築した者が運用する」という DevOps 文化を採用しました。その結果、アトラシアンの開発者全員が独自のサービスを実行できるようになりました。

「私は、プロジェクト中に行った他のほとんどすべての作業よりも、SRE チームがこのプロジェクトで確実に成功できるようにすることに多くの時間を費やしました。なぜなら、Vertigo の結果としての文化の変化が、アトラシアンに長期的にもたらされる最大の変化であったからです」と Tria は述べています。

スピードと信頼のバランスを取る

Vertigo はもっと早く完了できたかもしれません。最初の 4 か月が経ったとき、移行の 80% が完了していました。私たちが望む信頼性とパフォーマンスをユーザーに保証できなかったとしても、ユーザーの最後の部分を移行できたかもしれません。しかし、私たちはアトラシアンのコア バリューの 1 つである「顧客をないがしろにしない」というモットーに従って行動しました。

高い信頼性を維持するために、エンジニアと協力してチェックしてバランスを取るシステムを確立し、達成するべき高い目標として定めた基準を満たしました。なぜなら、最初に正しく構築すれば、長期的には時間を節約して頭痛の種を減らせるからです。

最後に残った、移行が最も困難な 500 顧客については、Jira と Trello の連携を使用して、お客様ごとにアトラシアンのエンジニアを 1 人割り当てました。

まとめ


2016 年 1 月には、合計で約 15 のマイクロサービスがありました。現在、この数は 1300 を超えています。10 万のお客様をクラウドに移行させてその過程で新しいプラットフォームを構築し、私たちの文化を変革して最後に新しいツールを導入しました。私たちには、より満足度が高い自律的なチームとより優れた DevOps 文化があります。

マイクロサービスは万人向けではないかもしれません。従来のモノリスが完璧に機能するかもしれませんし、これを分解しても苦労に見合わないかもしれません。しかし、組織が成長してアプリケーションに対する要求が高まるにつれ、マイクロサービス アーキテクチャは価値あるものになり得ます。

多くの組織にとってのトレンドは分散型アーキテクチャを備えたマイクロサービスであるため、アトラシアンは Compass を開発して、企業が分散型アーキテクチャの複雑さを拡張に合わせて管理できるようにしました。Compass は拡張可能な開発者エクスペリエンス プラットフォームで、すべてのエンジニアリング成果とチーム コラボレーションに関する分断された情報を一元化された検索可能な場所にまとめます。

Chandler Harris
Chandler Harris

Chandler Harris は、アトラシアンでマーケティング戦略、ライターを担当しています。彼は技術、科学、ビジネス、金融、教育の分野で、40 を超える出版物を執筆しています。


この記事を共有する

おすすめコンテンツ

次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。

DevOps のイラスト

Compass コミュニティ

イラスト: 障害の克服

チュートリアル: コンポーネントを作成する

マップのイラスト

Compass を無料で始める

DevOps ニュースレター購読

Thank you for signing up