処理はサーバで行う?クライアントで行う?

投稿日:2008年01月29日 作成者:yasunaka

昔のホストコンピュータ全盛時代はすべての処理はサーバ(ホストコンピュータ)で行われていましたが、それがPCの時代になり、一時は逆にほとんどの処理がクライアント側で実行されるようになりました。それがWebの時代に入り、またサーバ側に集められたかと思いきや、またAjaxが出てきて、画面周りの処理はクライアントに戻され、と、行ったり来たり。処理をサーバ/クライアントのどちらで行うべきか、というのは永遠のテーマのようです。

基本的にはビジネス・ロジックはサーバで、といわれます。ビジネス・ロジックを処理するためにはデータが必要ですが、データはサーバ側で一元的に扱うべきものだから、という側面があると思います。昔はそれが極端に走ってビジネス・ロジックをDB上のストアド・プロシジャで書くのが流行った時期がありましたが、メンテナンス性や移植性(特定のプラットフォームにロックインされてしまうこと)の観点で問題が多いように思えます。確かにストアド・プロシジャのデバッグはあまりやりたくないですよね。

最近SOA(サービス指向アーキテクチャ)が取り上げられることが多くなっていますが、これは処理すべき単位(サービス)をできるだけPureに、Simpleに設計することで「どこで処理をする」という部分にできるだけ自由度を与えるやり方だと思います。このどこで、というのは通常はサーバを指すと思うのですが、SOAの考え方を広げれば、極端に言えば別にサーバでなくてもいいわけです。

SOAで作りました、でもすべての処理は1つのサーバで集中処理しています、ということであれば、実は昔のホストの一極集中型処理と本質的には変わらないことになります。いろいろなところのサービスを「利用して」新しいサービスを創造する、というのがSOAの真髄です。「処理」を行うための束縛からできるだけ自由でありたい、そういうインフラを徐々に整備していくべきなのでしょう。

最後に。とはいえ、これらの自由を保ったまま適切なパフォーマンスを実現するためには設計上の工夫が必要です。これって昔の分散オブジェクト(CORBAとか)の設計と同じなんですね。心して設計しましょう。