2012年11月13日火曜日

ゆるふわScalaプログラミング(2) - 文脈の整理

11月30日に開催されるBPStudy#63のセッション「Scalaプログラミング・マニアックス」のネタ整理です。

内容は具体的なプログラミングの話ではなくて、「ゆるふわ」ということでScalaプログラミングをする中で分かってきたことの情報共有が趣旨です。その切り口として、クラウド時代のソフトウェア開発の文脈を整理してみます。

キーワード

前回はいくつかキーワードを挙げましたが、これに加えてDSLと並行/並列プログラミングといったところがScalaプログラミングの道具立てになります。改めて並べてみると以下になります。

  • トレイト
  • モナド
  • 型クラス
  • 代数的構造
  • 代数的データ構造
  • 永続データ構造
  • DSL
  • 並行/並列プログラミング

文脈

問題はこれらの機能が、クラウド時代のソフトウェア開発に対してどのような意味合いを持ってくるのかです。

ここでは文脈の変化として以下について考えます。

  • メニーコア
  • ハードウェア性能の向上
  • 分散処理
  • イベント駆動
  • Big Data / 大規模演算

メニーコア

CPUクロック数は、物理法則上の制約や発熱/電力消費量の問題から頭打ちになることは確実です。これを補うため、CPU性能の向上はコア数の増加によって行われるようになるでしょう。

例えばコア数が100のCPUが普通になった時にどのようなプログラミング・モデルが必要になるのかとイメージしてみると面白いと思います。

ハードウェア性能の向上

CPUクロック数の向上はどこかで頭打ちになるにしても、メニーコアという形でCPU性能自体は引き続き向上していきます。これに加えて、メモリ容量の増大や記憶装置のシリコン化、ネットワーク速度の向上といった要因によって、ボトルネックがI/Oからプログラムのアルゴリズム側に来るのではないかという点です。

分散処理

一般の業務アプリケーションがPaxosといったような分散アルゴリズムを直接使うようになるとは考えにくいですが、アプリケーションの処理を遂行する上で、複数の外部サービスと非同期通信しながら情報交換し、最後に複数の処理を待ち合わせて結果としてまとめる、といった処理はごく普通になるでしょう。こういった、複数の外部サービスと非同期通信しながら進める処理をここでは分散処理と呼ぶことにします。

分散処理では、複数のスレッドを駆使した並行プログラミングが必至になるのに加えて、遅延や障害への対応も重要な項目になります。

イベント駆動

従来の企業アプリケーションは、業務端末からのコマンド投入とバックエンドでのバッチ処理の組み合わせで構成されていました。これに付随する形でEDI的な連携処理を組み合わせていく形になります。これは、Webアプリケーションでも土俵がWebになっただけで、基本的には同じ枠組みになります。

しかし、スマートフォンやタブレットの普及、SNSやO2Oといったアプリケーションの興隆によってネット上を飛び交うイベント、メッセージの量は飛躍的に増えます。また、これらのイベントに対する反応の繰り返しによって事態が進行していく形のアプリケーションが増えていくことが予想されます。

つまり、アプリケーション・アーキテクチャも従来型のコマンド駆動+バッチ処理からイベント駆動に移っていくことが考えられます。

Big Data / 大規模演算

クラウド・アプリケーションの重要なポイントとなるのは、かつてのスーパーコンピューターがコモディティ化されて、一般の業務アプリケーションが日常的に使用できるようになったことです。

今まではスーパーコンピューターでのみ行われていたような大規模データ処理、大規模演算を通常業務の目的で普段使いで使うことになります。このためスーパーコンピューターで有効だった技法がどんどんコモディティ化して、業務アプリのテクニックとなっていくでしょう。

0 件のコメント:

コメントを投稿