分散処理について
分散処理
分散処理とは、処理速度の向上とサーバー負荷軽減のために、1つの処理を分散して行う方式のことです。
分散処理では次の2つに大別することができます。
多数のCPUを搭載した1つのサーバで処理を分散する方法
システム構築が簡単
冗長性の確保が難しいく信頼性が低くなる
リソースの上限が物理的制約に依存する
ネットワークに接続された複数のサーバーで処理を分散する方法
リソースの上限は物理的制約を超えることができる
リソースの上限はコスト的な制約に依存する
冗長性の確保は比較的容易で信頼性が向上する
システム構築が複雑になる
ネットワーク遅延やコンフリクトなどを意識する必要がある
ここでは、後者の意味で分散処理を説明してゆきまう。
スケールアップとスケールアウト
分散処理の利点のひとつにスケーリング(Scaling)が容易というものがあります。
これは、処理のために必要なリソースが不足した場合、シングルノードではサーバーの物理的な限界を超えるリソースを追加することができませんが(スケールアップ)、分散処理では処理するためのサーバーを追加することで、リソースを追加することができます(スケールアウト)。
https://gyazo.com/ad7ed33f5626ace367ddca1d0a32d113
分散処理のためのプラットフォーム
分散処理を行うためのプラットフォームでは、
物理的な視点ではネットワークに接続された多数のサーバーですが、アプリケーション側からの視点ではフレームワークが存在する場合もあります。
分散処理のためのプラットフォームでは、共有リソースが比較的少ないため、高いスケーラビリティを提供しますが、プログラミング方法は初心者の開発者にとってはやや異質に見える場合があるかもしれません。
分散処理に関連するフレームワークやキーワードは多数存在しますが、ここでは「Pythonから利用するという」という前提で列挙してみます。
MPI:
高速ネットワークを利用するMPIの実行環境をもつHPCクラスタ
オプションで並列ファイルシステムやGPU
ジョブ管理システム
Ray - 並列分散プロセスベースの実行フレームワーク。
動的タスクグラフとアクターに基づく軽量APIを使用して、アプリケーションを柔軟に表現する、
共有メモリとゼロコピーのシリアル化を使用して、単一のマシン内で効率的なデータ処理を行います。
プロセスおよびマシンの障害からの回復を提供します。
ボトムアップの階層型スケジューリング方式を使用して、低遅延で高スループットのタスクスケジューリングをサポートします。
機械学習とAIアプリケーション用の高レベルのライブラリが含まれています
Dask: Pythonでの並列コンピューティングのための柔軟なライブラリ
distributed と連携して実行環境も提供される
Pandasプロジェクトで開発
SCOOP: PEP-3148に基づく分散タスクモジュール
異種グリッドからスーパーコンピューターまで、さまざまな環境での分散プログラミングを可能にします。