今回と次回に分けて,グリッド上でエンタープライズ・コンピューティング,例えば,一般的な企業におけるトランザクション処理やデータウエア・ハウジングを行う場合の課題について考えてみよう。

◆課題1:並列性の問題

 グリッドの目的の1つは数多くのシステムによる並列処理により,処理能力を向上することである。しかし,当然ながら,1000台のコンピュータを使えば1000倍の処理性能が発揮できるかというと,そうことは単純ではない。第1に,一般的にプログラムの中には並列的には実行できない部分が存在するからである。

 計算の単純化のために,100秒の実行時間を要するプログラムのうちで,5%が並列実行可能ではない部分であるとしてみよう。このプログラムを100台のコンピュータで並列処理すると,(通信やタスク制御のためのオーバーヘッドがまったくないとしても)実行時間は

95÷100+5=5.95秒

となり,およそ

100÷5.95≒16倍

の性能向上しか図れないことになる。1000台並列で処理すると,

95÷1000+5=5.095秒

と,わずか

100÷5.095≒20倍

の性能向上しか図れない。いろいろと数字を変えて計算してみれば容易に分かるが,プログラム中にわずかでも並列実行不可能な部分があるだけで,並列処理による性能向上効果はすぐに頭打ちになってしまうのである。

 それゆえ,科学技術計算のプログラムでは,可能な限り並列性を追及したコーディングがなされることが通常である。しかも,物理現象のシミュレーションなどを行う場合には,物理現象そのものが並列的に動いているわけなので,問題自体に並列性が存在している場合が多く,並列化は比較的容易である。

 一方,ビジネス・アプリケーションの処理は基本的に逐次実行である。もちろんタスク・レベルでの並列性はあるが,科学技術計算ほど細かい単位の並列性は存在しないし,データベースの更新にかかわる部分は,排他制御のために完全な並列実行を行うことは難しい。

◆課題2:レイテンシ(遅延)の問題

 上記の例では,通信のオーバーヘッドがないという仮定で計算してみたが,現実のシステムでは,当然,遠隔地にデータを送るためにはある程度のレイテンシ(遅延)は常につきまとう。ネットワークの帯域幅は大幅に向上しているが,レイテンシについては大幅な向上は望めない。データ転送速度の上限は物理法則により決まってしまうからである。

 例えば,光ケーブルの中では情報は光速の6分の1程度のスピードでしか進めない。現実には,ソフトウエアのオーバーヘッドやメディア変換時のバッファ処理も必要なので,WANをまたがってデータを送る場合には,レイテンシは最低でもミリ秒単位となる。1ミリ秒はわずかな時間のように思えるかもしれないが,プロセサならば100万以上の命令を実行可能な時間であり,コンピュータの世界では決して短い時間ではない。

 であるからこそ,高性能のコンピュータでは,きょう体内の遅延を最小化するために極めて高密度な実装が行われたり,チップ間のレイテンシを回避するために1つのチップ上に複数プロセサを詰め込んだりという設計が採用されるわけである。

 分散システムにおいてレイテンシの影響を小さくするための重要なテクニックが,キャッシュである。一度使用したデータをまとめて自分の近くに置いておくことで,次回以降はネットワークを経由せずにアクセスできるようにする。

 データ処理が,読み取り中心の場合であれば,キャッシュは大きな効果を発揮するが,トランザクション処理で典型的に見られるように,更新処理,特に共用データのリアルタイム更新が中心の場合には,キャッシュの効果は半減する。複数のシステムが抱えるキャッシュ間の整合性確保のためのオーバーヘッドが必要になるからである。

 つまり,グリッドを使って処理能力を向上するためには,単に並列性を上げるだけではなく,システム間の通信を最小化できるアルゴリズムを使ったプログラミングが必要となる。この問題に対しても,科学技術計算の世界では,可能な限りシステム間のデータのやり取りを最小化し,レイテンシの問題を回避するようなアルゴリズムが研究開発されている。

 グリッドなどの新しいハードウエア・アーキテクチャが出現したときに,それに合わせてソフトウエアを書き換えることは,科学技術計算の世界では通常のことである。今までは解けなかった複雑な問題を解けるようにすることこそが至上命題だからである。

 一方,エンタープライズ・コンピューティングの世界では,既存のアプリケーション資産が膨大なため,ハードウエアに合わせてソフトウエアの設計を全面的に変更することは非現実的であることが多い。

 要は,データを分散し,並列処理すれば自動的に性能が上がるかというと,そんなことはなく,アプリケーションをそれなりに作っていかなければならないのである。エンタープライズ・コンピューティングの世界では,グリッドが出現する前にも,あまり深い考えなしにシステムを分散化したり,クラスタによる並列処理を行って,かえって性能を悪化させてしまうケースもないわけではなかった。この点はグリッドを採用しても変わることはない。

 次回は,グリッド上でのエンタープライズ・コンピューティングの課題について,さらに追求してみよう。