14章分散プログラミング

これまでは、1台のマシンで走るプログラムに対し、複数のプロセッサをできる限り利用し並列性を活用することを考えてきました。しかし、並列性の源は他にもたくさんあります。プログラムを複数のマシンで同時に走らせるのです。これを分散プログラミングと言います。Haskellはdistributed-processというフレームワークを通じて分散プログラミングを提供しています†1

[†1] 「Cloud Haskell」とも呼ばれています。

複数のマシンを使った並列性の明白な利点以外にも、分散プログラムを書く理由があります。例えば、

  • 分散サーバは、サーバをクライアントの近くに移動することで、より効率よくネットワークリソースを利用できます。これの例は「14.7 分散チャットサーバ」で説明します。
  • 分散プログラムは特定のマシンにだけ存在する特定のリソースが利用できるような異機種環境を有効に使えます。一例を挙げるなら、ローカルディスクを持つマシンクラスタがそれでしょう。大規模データ構造がディスクをまたいで拡がっていて、ローカルディスク上にそのデータ構造の適切な部分を持っているマシン上で計算を走らせたいのです。

それではプログラマの視点からは分散プログラミングはどのように見えるのでしょうか。forkIOMVarSTMを使う並行Haskellと似ているでしょうか。実は、分散計算の扱いは共有メモリのマルチコア上での計算とはかなり異なります。以下に理由を挙げます。

  • 現実としてハードウェアの一部が故障する可能性があります。すなわち、ある計算に関与しているマシンの何台かがダウンし、他は走り続けているという状況です。実際、マシンクラスタが大きければ、ダウンしているノードがあるというのが標準的な状態になります。このような場合にプログラム全体が途中停止してまうのは受け入れがたいのです。回復についてはアプリケーション固有の問題なので、失敗がプログラマから見えるようにして、プログラマがそのアプリケーションに相応しい方法で処理するのが理にかなっています。 ...

Get Haskellによる並列・並行プログラミング now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.