身の回りの全ての世界は並列に進んでおり、非同期でイベント駆動である。最近のQCon LondonでJoe Duffy氏は基調講演を行い、並列性とクラウドは全ての開発者が将来的に取り扱う必要がある概念であると主張した。この中心にあるのは通信であり、これは並列性と分散システムの両方にとって必要不可欠なものである。
以前Microsoftでプログラミング言語とコンパイラのエンジニアリングディレクターを務めたDuffy氏によると、分散というのは実のところ並列であるということである。つまり、本質的に同時に複数の事象が発生するのである。唯一の違いは事象が互いにより離れているかどうかということである。例えば、異なるプロセスなのか、サーバやデータセンターなのかの違いである。そして、特に通信にとってはこの差異が問題となる。共有メモリを使用するのか、ms単位のレベルで遅延のあるネットワーク上でデータをやり取りするのかは制約や能力に違いを生み、システムアーキテクチャに影響を及ぼす。
並列性と分散プログラミングは、初期のコンピュータサイエンスにおいては同じ系統であった。これらの初期には、問題はしばしば非同期の観点でモデル化された。Duffy氏によると、Butler Lampson氏は分散システムの構築、特に信頼性に関して最も偉大な研究者の一人ある。 Duffy氏はLampson氏の1983年の論文であるSystem Designを強く勧めている。Duffy氏はマルチコアCPUが現れ始めた2000年代には、並列性プログラミングの分野で1つも発明を行なっていなかったと主張した。代わりに、初期のアイデアや公開された論文に立ち戻っていたのである。
将来、Duffy氏は細粒度化がますます進んだ分散システムにおける分散プログラミングに戻り、このような分散システムはより一層以前の並列システムのように見えるようになるだろうと予測している。並列システムの構築に関して多くのことを学んでおり、彼は7つの重要な教訓を強調した。
- 通信を第一に考えること。それはどんな分散アプリケーションのアーキテクチャでも検討すべき部分である。場当たり的な通信は信頼性に災いをもたらす。アクターとキューはよいパターンである。
- スキーマは支援してくれるが、盲目的に信頼しないこと。サーバは常にクライアントとは異なるタイミングで変更される。Duffy氏は良く動作している例としてインターネットを示している。
- 安全性は重要だが、達成しにくいものである。安全性の欠如により競合・デッドロックや定義しない振る舞いが発生する。Duffy氏によると、安全性の好ましい形態は隔離することである。もし隔離が可能でない場合は変更不可能とするべきである。もしそれも可能でないなら標準の同期機構に頼る必要がある。
- 失敗に対して設計すること。なぜなら事象は失敗するからである。Duffy氏は複製や再起動可能性に対して設計すべきであると考えており、エラー復旧は信頼性のある並列システムに対する要件であると述べた。
- 因果関係は構造に従う。アクションの引き金となるイベントの連続発生は、並列システムにおいて非常に複雑となりうる。そこに流れるコンテキストは発生した全ての事象の痕跡をたどることを単純化することができる。
- 並列パターンを用いて構造を記号化することによりシステムを簡単に理解することができる。Duffy氏の好む2つのパターンはFork-JoinとPipelineである。
- 簡潔に言うと、より宣言的、リアクティブにすること。宣言的にすること、リアクティブパターンを使用することは困難な問題をコンパイラやフレームワークに移譲するために有用な手段である。彼はServerlessを単一のイベントと単一のアクションおいてこのアイデアを特殊化したものであると理解している。
未来は分散にあることを強調し、分散プログラミングの分野でパイオニアから今以上に刺激を受けることを期待していると述べ 、Duffy氏は講演を締めくくった。現在のプログラミング言語は並列性に関して素晴らしいサポート機能を持っており、彼はこれらの言語が分散クラウドプログラミングに対してよりサポートする方向に進み、彼が述べた7つの重要な教訓が組み込まれるようになると予想している。
Rate this Article
- Editor Review
- Chief Editor Action