Build Predictive Machine Learning with Flink | Workshop on Dec 18 | Register Now

分散型システムとは?

分散型システムとは、異なるシステム上に配置され、単一のユニットとして動作するために通信する独立したコンポーネントとマシンの集合体を指します。

この完全入門ガイドでは、分散型システムの仕組み、実際の使用例、基本的なアーキテクチャ、利点と欠点、リアルタイム分散ストリーミングの一般的なソリューションについて学びます。

Apache Kafka を生んだ開発者チームにより設立された Confluent は、120以上のデータソースを接続するリアルタイムデータ統合、処理や分析を可能にするあらゆる機能が揃ったデータストリーミングプラットフォームです。

分散型システムの仕組み

分散型システム - 定義

分散コンピューティングや分散データベースとしても知られる分散型システムは、共通の目標達成のために相互にメッセージを共有する、異なるマシン上に配置された独立したコンポーネントの集合体を指します。

こうした性質上、分散型システムは、エンドユーザーにとっては1つのインターフェイスやコンピューターのように見えます。システムが連携して、障害を防ぎながらリソースと情報を最大化できることがこのシステムの特徴で、1つのシステムに障害が発生してもサービスの可用性に影響を与えません。

今日のデータはかつてないほど分散されており、最新のアプリケーションが単独で実行されることはありません。製品やアプリケーションの大部分は分散型システムに依存しています。

分散型システムの要素

分散コンピューティングの最も重要な機能には次のようなものがあります。

  • リソースの共有 - 共有対象がハードウェア、ソフトウェア、データのいずれか
  • オープン性 - ソフトウェアが開発・相互共有に対してどの程度オープンに設計されているか
  • 同時実行性 - 複数のマシンで同じ機能を同時処理可能
  • スケーラビリティ - 多数のマシンに拡張した場合にコンピューティングと処理能力がどう向上するか
  • フォールトトレランス - システムの一部の障害をどれだけ簡単かつ迅速に検出して回復できるか
  • 透明性 - 1つのノードがシステム内の他のノードを見つけて通信するために必要なアクセスの数

最新の分散型システムは、同じ物理マシン上で実行される可能性があるものの、メッセージを相互に交換することで相互作用する自律プロセスを取り入れて進化してきました。

分散型システムの例

ネットワーク

分散型システムの最初の例は、イーサネットが発明され LAN (ローカルエリアネットワーク) が作成された1970年代に登場しました。コンピューターが初めてローカル IP アドレスを使用して他のシステムにメッセージを送信できるようになります。ピアツーピアネットワークは進化し、電子メール、そしてご存知のとおりインターネットが、今も成長を続ける分散型システムの最大の例であり続けています。インターネットが IPv4 から IPv6 に変化するにつれて、分散型システムは「LAN」ベースから「インターネット」ベースに進化しました。

電気通信ネットワーク

固定電話・携帯電話ネットワークも分散型ネットワークの一例です。固定電話ネットワークは1世紀以上にわたって存在しており、ピアツーピアネットワークの初期の例として始まりました。携帯電話ネットワークは、セルと呼ばれるエリアに基地局が物理的に分散された分散型ネットワークです。固定電話ネットワークが VOIP (Voice over IP) へと進化する中、分散型ネットワークとしての複雑さが増し続けています。

分散型リアルタイムシステム

多くの業界でローカルおよびグローバルに分散されたリアルタイムシステムが使用されています。航空会社はフライト制御システムを使用し、Uber や Lyft は配車システムを使用し、製造工場は自動化制御システムを使用し、物流会社や電子商取引会社はリアルタイム追跡システムを使用しています。

並列処理

かつては、並列コンピューティングと分散型システムの間には区別がありました。並列コンピューティングは、同じデータとメモリにアクセスする複数のスレッドやプロセッサ上でソフトウェアを実行する方法に焦点を当てており、分散型システムとは独自のプロセッサとメモリを備えた個別のマシンを意味していました。最新のオペレーティング システム、プロセッサ、クラウドサービスの台頭により、最近では分散コンピューティングに並列処理も含まれるようになりました。

分散型人工知能

分散型人工知能は、大規模なコンピューティング能力と並列処理を使い、マルチエージェントを使用して非常に大規模なデータセットを学習・処理する方法です。

分散データベースシステム

分散データベースは、複数のサーバーや物理的な場所に配置されたデータベースで、データはシステム間で複製や複写が可能です。

最も一般的なアプリケーションは分散データベースを使用するため、分散データベースシステムにおける同種または異種といった性質を認識することが重要となります。

同種分散データベースでは、各システムが同じデータベース管理システムとデータモデルを備えており、新しいノードと場所を追加することで、パフォーマンスの管理と拡張が容易になります。

異種分散データベースでは、複数のデータモデルと異なるデータベース管理システムの確立が可能になり、ゲートウェイはノード間でデータを変換するために使用され、通常はアプリケーションとシステムを結合した結果として発生します。

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

分散型システムには、すべてのコンポーネント (マシン、ハードウェア、ソフトウェア) を相互接続し、メッセージを転送して相互通信できるネットワークが必要となります。

  • このネットワークは、IP アドレスを使用して接続することも、ケーブルを使用することも、回路基板上で接続することもできます。
  • マシン間で受け渡されるメッセージには、データベース、オブジェクト、ファイルなど、システムが共有するデータ形式が含まれます。
  • メッセージの送信、受信や確認、または失敗時のノードの再試行方法など、メッセージが確実に伝達される方法は分散型システムの重要な機能となります。
  • 分散型システムは、サービスとアプリケーションの拡張、新しいマシンの追加と管理といった必然性から生まれました。分散型システムの設計において考慮すべき主なトレードオフは、複雑さとパフォーマンスです。

これを理解するために、分散アーキテクチャの種類、長所、短所を見てみましょう。

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

分散型アプリケーションとプロセスは通常、次の4つのアーキテクチャタイプのいずれかを使用します。

__クライアントサーバー : __

初期の分散型システムアーキテクチャは、プリンター、データベース、ウェブサーバーなどの共有リソースとしての1台のサーバーで構成されていました。複数のクライアント (コンピューターを使用するユーザーなど) があり、クライアントが共有リソースを使用するタイミング、使用方法と表示方法、データの変更、サーバーへの送信方法を決定します。git などのコードリポジトリは、コードに変更をコミットする開発者がインテリジェンスを使用する良い例です。

今日、分散型システムアーキテクチャはウェブアプリケーションとともに次のような形に進化しています。

  • __3層 : __このアーキテクチャでは、クライアントにインテリジェンスは不要になり、処理と意思決定を中間層に委ねられます。初期のウェブアプリケーションの大半がこのカテゴリーに分類されます。中間層は、ステートレスなクライアントからリクエストを受信し、データを処理してサーバーに転送するエージェントと言えます。
  • __多層 : __エンタープライズウェブサービスでは、最初に n 層または多層システムアーキテクチャが作成されたため、ビジネスロジックを含み、データ層とプレゼンテーション層の両方と対話するアプリケーションサーバーが普及しました。
  • __ピアツーピア : __このアーキテクチャには、重い処理やインテリジェントな作業を行う集中型や特別なマシンは存在せず、すべての意思決定と責任が関係するマシン間で分割され、それぞれがクライアントまたはサーバーの役割を担うことができます。ブロックチェーンはその良い例です。

分散型システムの長所と短所

分散型システムの利点 :

分散型システムの最終目標は、アプリケーションのスケーラビリティ、パフォーマンス、高可用性を実現することです。

主な利点には次のようなものがあります。

  • 無制限の水平スケーリング - 必要に応じていつでもマシンを追加できます。
  • 低レイテンシ - 地理的にユーザーに近い場所にマシンを配置することで、ユーザーへのサービス提供にかかる時間が短縮されます。
  • フォールトトレランス - 1つのサーバーやデータセンターがダウンしても、他のサーバーやデータセンターが引き続きユーザーにサービスを提供できます。
  • 分散型システムの利点 :

分散型システムの欠点 :

エンジニアリング上のあらゆる意思決定にはトレードオフがありますが、分散型システムの最大の欠点はその複雑さです。マシンとメッセージが増大するうえ、より多くのデータがより多くの当事者間で渡されることから、次のような問題が発生します。

  • データの統合と一貫性 - 特にノードが常に起動および停止し、障害が発生している場合には、分散型システム内のデータやアプリケーションの状態の変更順序の同期が難しくなります。- ネットワークと通信の障害 - メッセージが正しいノードに配信されない、あるいは間違った順序で配信される可能性があり、通信と機能の障害につながります。
  • 管理負担 - 分散型システムの動作と障害を可視化するには、インテリジェンス、監視、ロギング、負荷分散機能をさらに追加する必要があります。

分散ストリーミングプラットフォームの活用方法

Confluent は、クラウド、オンプレミスやハイブリッドクラウド環境に対応する唯一のデータストリーミングプラットフォームです。120を超えるデータソースをエンタープライズグレードの拡張性、セキュリティ、統合機能で接続し、すべての分散型システム全体でリアルタイムの可視性を実現します。

30日間の無料トライアルでわずか数分で利用を開始できます。