ちょっとタイトルの意味は矛盾しているが、こんな表現がもっともしっくりくるとおもいましたのであえてそうしました。
つまり、もっと技術的に言えば、バッファ付きFirstInFristOutの仕組みを作るというものですが、例えば、こんな用途です。
アクセスログを分析するシステム。

このシステムで求められるのが、
1)結果ができるだけすぐにわかること。
2)アクセスログをとること自体が、アクセスの妨げにならないこと。

です。
従って、2)を満たした上で、1)を満たそうとすると、
定期時間における(cronによる)バッチ処理でもなく、アクセスがくるたびになんらかの計算やDBへの書込が動くようなオンライン処理でもない。

という訳です。
意外とこれらのノウハウって公開されていません。
そして、たいていはcronによるXX分間隔などで計算とか、
それほどアクセスがないから結局、アクセスがくるたびにDBにデータを即時で書き込んでしまってるのをよく見ます。

この解決として私が、よく使う方法は、「名前付きパイプ」を利用したアクセスログの書込と、読込を利用したデータの計算です。

「名前付きパイプ」を使って、「書込処理」と「読込処理」を分離すると

A)書込処理は、単なるファイルの書き出しと同じ手段をとれる。
B)読込処理は、単なるファイルの読み込みと同じ手段がとれる。

と当たり前ですが、これが分かれると、実装がしやすいのはもちろんですが、テストがしやすくなります。
そして、それぞれで分離できることは、その中間にいろいろな機能を後でつけることができるし、
それぞれを2つの処理として完全に分離すれば、cronによるスケジュールですし、
完全に同期して動くようにすればリアルタイム処理です。
また、中間である程度のバッファなり遅延が許可できるように作れば、
「遅延する即時処理」
のできあがりです。
つまり、
中間をどうつなげるか=バッチかリアルタイムなどを決める
ことになるのです。

そして、書込の際にDBへの接続が常に1つでいいし、同時に同じテーブルへの書込を作らなくすることもできます。
また、複数サーバからの出力を1カ所にあつめて、1つの読込処理にもすることができるのです。

私は、この設計方法を汎用機時代のJCLから学びました。

さらに私の定番の技が、syslog(syslog-ng等)を使って、データを複製することや、間にトリガーを登録することなどなど・・

syslog-ngには出力バッファの機能がありますから、処理が集中しているときにはある程度バッファしてくれますし、
読込処理が落ちていても、バッファ機能で、読込処理が準備された段階で書込を開始してくれる機能もあります。

これらは、syslogというUnix/Linuxでもっとも運用要件が厳しい用途の1つと思われる箇所で使われているシステムを借りてしまうのですから、
かなり、自分でつくるよりも、そして、パッケージ製品を使うよりもロバストで、かつ、汎用サービスとして構築できます。
(当たり前ですよね。Unix/Linux運用者は自分の勘や経験よりも、syslogの結果を信じて仕事をしているのですから・・・)

ただし、この難点は、アプリケーションエンジニアがネットワークエンジニアの範囲まで手をだしてしまうことで、
責任境界線を曖昧にしてしまうので、あまりそれぞれの作業者にはよい顔はされません。

ただし、そのような用途向けのパッケージを購入となれば、それなりに高い金額と、あまり、ノウハウがないエリアで試行錯誤をしていかなければなりません。
であれば、枯れた、そして、安定していて、ノウハウも関連ツールも豊富なツールを組み合わせて、
全体構成での実装をしていけば、安く、そして、信頼性も高いものも作れるのではないでしょうか?

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2011年3月
« 2月   4月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ