Close

分散型システムとは

分散型システムとマイクロサービス アーキテクチャの概要

Kev Zettler の顔写真
Kev Zettler

フルスタック Web 開発者


分散型システムはコンピューター プログラムの集合体で、共通する共有の目標を達成するために複数の異なる計算ノード全体の計算リソースを利用します。このシステムは、システムからボトルネックや単一障害点を排除することを目的としています。

非常にうまく機能する単一のデプロイ可能なユニットとしてアプリケーションを構築しても、時間が経つにつれて規模と複雑さが増すとしたらどうなりますか? 多くの場合は、保守が困難になって開発ベロシティが低下し、障害のリスクが高まります。この場合は、モノリスが分散型システム (通常はマイクロサービス アーキテクチャ) へと進化する道筋を辿ることになります。

分散型システムとは


分散型システムはコンピューター プログラムの集合体で、共通する共有の目標を達成するために複数の異なる計算ノード全体の計算リソースを利用します。分散コンピューティングまたは分散データベースとも呼ばれ、共通のネットワーク上で通信して同期するために個別のノードを利用しています。通常、これらのノードは個別の物理ハードウェア デバイスを表しますが、個別のソフトウェア プロセスやその他の再帰的にカプセル化されたシステムを表す場合もあります。このシステムは、システムからボトルネックや単一障害点を排除することを目的としています。

分散コンピューティング システムには、次のような特長があります。

リソースの共有 — 分散型システムはハードウェア、ソフトウェア、またはデータを共有できます。

同時処理 — 複数のマシンが同じ機能を同時に処理できます。

拡張性 — コンピューティング能力と処理能力は追加のマシンにまで拡張された際に、必要に応じてスケール アップできます。

エラー検出 — 障害をより簡単に検出できます。

透明性 — ノードがシステム内のその他のノードにアクセスして通信できます。

アイコン: コードを保存
関連資料

Microservices vs. monolithic architecture

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

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

集中型システムと分散型システムの違いは何か?


画像: 集中型と分散型

集中型コンピューティング システムとは、すべてのコンピューティングが 1 か所で 1 台のコンピューターによって実行されるシステムです。集中型と分散型の各システムの主な違いは、システムのノード間の通信パターンです。集中型システムの状態は、クライアントが特注の方法でアクセスするセントラル ノード内に格納されます。ノードはすべてセントラル ノードにアクセスするため、ネットワークの輻輳 (ふくそう; 一箇所集中) や速度低下を招く可能性があります。集中型システムには単一障害点がある一方で、分散型システムにはありません。

分散型システムはマイクロサービスと同じか?


マイクロサービス アーキテクチャは、アプリケーションを個別のコンポーネントまたは「サービス」に分解するため分散型システムの一種です。たとえば、マイクロサービス アーキテクチャにはビジネス機能 (支払い、ユーザー、製品など) に対応するサービスがある場合があり、対応する各コンポーネントがその責任に関するビジネス ロジックを処理します。これによってシステム内にサービスの冗長コピーが複数存在するため、サービスの集中型単一障害点は発生しません。

分散追跡とは


分散追跡は、分散型システム全体で実行されるリクエストの結果をプロファイリングまたは監視するために使用される手法です。個々のノードがログと指標のストリームを個別に保持するため、分散型システムの監視は困難な可能性があります。分散型システムの正確なビューを得るには、これらの個別のノード指標を総合的なビューに集約する必要があります。

通常、分散型システムへのリクエストはシステム内のノード セット全体にアクセスするのではなく、部分的なセット、またはノードを介したパスにアクセスします。分散追跡は分散型システムを通じて一般的にアクセスされるパスを解明し、チームがこれらのパスを分析して監視できるようにします。分散追跡はシステムの各ノードにインストールされて、チームがノードの正常性とリクエストのパフォーマンスに関する情報をシステムに照会できるようにします。

分散型システムのメリット、デメリット、リスク


多くの場合、分散型システムはシステムの信頼性とパフォーマンスの向上に役立ちます。単一障害点やボトルネックを排除することで、信頼性が向上します。分散型システムのノードには冗長性があるため、いずれかのノードに障害が発生した場合でも、他のノードが障害に対応して補償する準備が整います。ノードを水平方向と垂直方向に簡単にスケーリングできるため、パフォーマンスが向上します。システムに大きな負荷がかかる場合は、負荷を吸収するためにノードを追加できます。また、個々のノードの容量を増やして、大量の負荷を処理できます。

しかし、これらのメリットとのトレードオフとして、システムが過度に複雑になって保守が困難になる「開発の無秩序な広がり」に繋がる可能性があります。システムの複雑さが増すにつれて、チームはこれらのシステムの効果的な編成、管理、改善に苦労する場合があります。課題の一部として、さまざまなコンポーネントが互いにどのように関連しているか、または特定のソフトウェア コンポーネントを誰が所有しているかを把握することが挙げられます。そのため、運用上の正常性を最大化して、依存するコンポーネントだけでなく顧客に悪影響を与えないようにコンポーネントに変更を加える方法を理解しがたくなります。システムに複数のリポジトリがある際は、分散型システムのコードを管理して整理するために Atlassian の Compass などの特殊なツールが必要になる場合があります。

分散型システムのアーキテクチャ


分散型システムにはさまざまな種類があります。最も一般的なものは次のとおりです。

クライアントサーバー

クライアント/サーバー アーキテクチャは、主に 2 つの責任に分かれています。クライアントはユーザー インターフェイスのプレゼンテーションを担当して、このプレゼンテーションはネットワーク経由でサーバーに接続します。サーバーは、ビジネス ロジックと状態管理の処理を担当します。クライアント/サーバー アーキテクチャは、サーバーが冗長化されていない場合は集中型アーキテクチャにまで容易に降格する可能性があります。真に分散されたクライアント/サーバー セットアップでは、クライアント接続を分散するために複数のサーバー ノードが存在します。最新のクライアント/サーバー アーキテクチャのほとんどは、サーバー上でカプセル化された分散型システムに接続するクライアントです。

多層

多層アーキテクチャは、クライアント/サーバー アーキテクチャを拡張したものです。多層アーキテクチャのサーバーはさらに細かいノードに分解されて、データ処理やデータ管理などのバックエンド サーバーの追加の責任を切り離します。これらの追加ノードは長時間実行されるジョブを非同期的に処理して残りのバックエンド ノードを解放し、クライアント リクエストへの応答とデータ ストアとのインターフェイスに集中できるようにするために使用されます。

ピアツーピア

ピアツーピア分散型システムでは、各ノードにアプリケーションの完全なインスタンスが含まれます。プレゼンテーションとデータ処理のノード分離はありません。ノードには、プレゼンテーション層とデータ処理層が含まれます。ピア ノードには、システム全体の状態データ全体が含まれる場合があります。

ピアツーピア システムには、極めて冗長性があるというメリットがあります。ピアツーピア ノードが初期化されてオンラインになると、その他のピアを検出して接続し、そのローカル状態を上位システムの状態と同期します。この機能によって、ピアツーピア システム上の 1 つのノードに障害が発生しても、その他のノードが中断されることはありません。これは、ピアツーピア システムが存続することも意味します。

サービス指向アーキテクチャ

サービス指向アーキテクチャ (SOA) は、マイクロサービスの先行機能です。SOA とマイクロサービスの主な違いはノード スコープで、マイクロサービス ノードのスコープは機能レベルで存在します。マイクロサービスではノードがビジネス ロジックをカプセル化して、支払い処理などの特定の機能セットを処理します。マイクロサービスには、独立したデータベース ノードとインターフェイス接続する、複数の異なるビジネス ロジック ノードが含まれています。対して、SOA ノードはアプリケーションまたはエンタープライズ部門全体をカプセル化します。通常、SOA ノードのサービス境界には、ノード内のデータベース システム全体が含まれます。

そのメリットのため、マイクロサービスは SOA に代わるより一般的な選択肢として登場しました。マイクロサービスの方が構成しやすいため、チームは小規模なサービス ノードが提供する機能を再利用できます。マイクロサービスはより堅牢で、垂直方向と水平方向のより動的なスケーリングが可能になります。

分散型システムのユース ケース

最新のアプリケーションの多くは分散型システムを利用しています。トラフィックの多い Web とモバイルの各アプリケーションは分散型システムです。ユーザーは、クライアントが Web ブラウザーまたはモバイル アプリケーションであるクライアント/サーバー方式で接続します。その場合、サーバーは独自の分散型システムになります。最新の Web サーバーは多層システム パターンに従っています。メッセージ キュー システムを介して通信する多数のサーバー ロジック ノードにリクエストを委任するために、ロード バランサーが使用されます。

Kubernetes はコンテナーの集合から分散型システムを作成できるため、分散型システムとして人気のあるツールです。コンテナーが分散型システムのノードを作成して Kubernetes がノード間のネットワーク通信を連携させるとともに、システム内のノードの動的な水平および垂直スケーリングも処理します。

分散型システムのもう 1 つの良い例は、ピアツーピア分散型システムである Bitcoin や Ethereum のような暗号通貨です。暗号通貨ネットワークにあるすべてのノードは、通貨の台帳の全履歴を自己完結型で複製したものです。通貨ノードがオンラインになると他のノードに接続してその台帳の完全なコピーをダウンロードすることで、ブートストラップが実行されます。さらに、暗号通貨には JSON RPC プロトコルを介して台帳ノードに接続するクライアントまたは「ウォレット」があります。

結論


分散型システムは、最新のソフトウェア エクスペリエンスのほとんどで広く採用されて使用されています。ソーシャル メディア アプリ、ビデオ ストリーミング サービス、e コマース サイト、その他すべてが、分散型システムによって支えられています。集中型システムは、スケーリングに対応するために分散型システムへ自然に進化します。マイクロサービスの使用は、分散型システムを構築するために広く採用されている一般的なパターンです。

分散型システムの構築と保守はより複雑になりますが、Atlassian の Compass はこの複雑さに対応しています。Compass は開発者エクスペリエンス プラットフォームであり、分散型アーキテクチャをナビゲートして、エンジニアリングの成果としてそれらを利用して共同作業しているチームに関する繋がりのない情報を一元化して、検索できる場所に取り込む際に役立ちます。

Kev Zettler
Kev Zettler

Kev はフル スタック Web 開発者のリーダーであり、10 年以上もアジャイル手法で製品やチームを構築する経験を持つシリアル アントレプレナーです。DevOps、仮想通貨、VR/AR などの新たなオープン ソース技術に熱心に貢献し、それについて著書を執筆し、教育を行っています。時間がある時には、インディーズ ゲーム開発ジャムに参加しています。


この記事を共有する
次のトピック

おすすめコンテンツ

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

DevOps のイラスト

Compass コミュニティ

イラスト: 障害の克服

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

マップのイラスト

Compass を無料で始める

DevOps ニュースレター購読

Thank you for signing up