2008年5月23日金曜日

CGIによる排他制御

CGIで排他制御する方法のことではない。排他制御するためにCGIを使う方法を考える。
1つのサーバの中でもCGIは並行処理だ。ましてや複数のサーバの間では排他制御が必要になる。ただし、排他制御すべき資源は共有資源に限られる。通常は、1つのサーバに資源が集約される。よって1つのサーバのCGI同士で排他制御できれば十分であることが多い。そのためにはflockなどが使われる。
しかし、Webアプリケーションの連携が進むと、1つのサーバに資源を集中する単純な配備が困難な場合も出てくる。また、複数のWebアプリケーションが同期したいこともある。そのような場合、1つのサーバのCGI同士で排他制御しても意味がない。そこで、排他制御するためにCGIを使う方法を考える。
原理は簡単だ。資源IDをパラメータとしてCGIを呼び出し、獲得できればOKを返し、そうでなければ失敗するか、あるいは待つ。これはComet型のPush配信ともいえる。Cometとは、簡単にいえばクライアントを長く待たせるということだ。
実際にCGIが排他制御するには資源IDに相当するロックファイルをflockする。これが一番簡単だろう。

0 件のコメント: