ブログ

適正なバッチ起動方法

投稿日:2014年11月16日 更新日:

phpやjavaなど、言語を問わずに必要となるのがバッチプログラム。
フロントで処理させるよりも、バックグラウンドで処理させた方が適しているときに使いますよね。
・内部でデータを集計したいとき
・フロントで表示するためにデータを収集する
こういったニーズがあるときに、バッチで処理したりします。
バッチは基本的にcronという自動実行デーモンを使って、定期的に起動させるのが一般的。
おおよその1回の処理時間を考えて、間隔を検討します。
バッチのポイントは、内部のロジックはもちろんですが、起動方法も重要です。
起動方法を誤ると、パフォーマンスの劣化に影響します。
*cronを使って起動するのは変わりません。
*cronから起動するための方法がポイントです。
<オススメ出来ない起動方法>
wgetを使った起動方法
バッチは、要はバッチ処理をするプログラムを実行するのです。
実行方式は大きく2つあります。
・コマンドラインからの実行
・httpを使ったweb形式の実行
私の見解としては、コマンドラインからの実行を推奨していて、http経由での実行はオススメしません。
■おすすめしない理由1
→httpdプロセスに余計な負担がかかる
httpというプロセスは、読んで字のごとくwebからの要求を受け付けます。
フロントページにアクセスがあるたびに応答を返すために処理されます。
httpプロセスは、それなりの許容を持った設計になっています。
なので、ある程度の負荷は耐えきれるような設計になっています。
とはいっても設計は理論上の話なので、理論上を上回ることもありえます。
そうなると、httpdプロセスをチューニングする必要が出てきます。
と、本来はwebの要求を受け入れるための物なのです。
それをバッチが使ってしまうということは、本来使えるはずのhttpの能力を自滅させることになるのです。
→メモリやCPUを多量に使う
バッチプログラムということは、厳密にはhttpプロセスは無関係です。
javaもしくはphpというプログラムが最終的には動くことになります。
つまりは、、、
httpのメモリ量+php(もしくはjava)のメモリ量=総メモリ量
となるわけで、本来使うはずのメモリ量以上の負荷が掛かるのです。
メモリだけじゃなくCPUに大しても同じことです。
貴重なシステムリソースの無駄な消費は避けたいところです。
wget経由で呼び出した方が一見簡単そうに見えますが。
簡単な裏には、システムリソースへの無断が負担がつきまとうのです。
インフラを背負っているエンジニアの方には、こういった細かいポイントも重要です。
プログラマーには気づかない視点ですからね。
限りある(リソース)資源、大事に使いましょうexclamation×2

-ブログ

執筆者:

関連記事

no image

WEBサーバからDBサーバに繋いでみる

RDSを使って、MySQLサーバを作るところまでは、前回の記事で紹介したとおり。 インスタンスは何度も作り直しができるから、1回で上手く行かなくても諦めずに頑張ってね。 さて、EC2でWEBサーバを構 …

no image

ElastiCacheでCacheサーバ構築

WEBサービスの高速に欠かせないCache機能を導入してみます。 AWSにはElastiCacheというCacheサービスが有りますので、それを使います。 一昔前は手動でmemcachedを入れたりし …

no image

tmp領域のチューニング

MySQLのCPU使用率が300%()を超える事態に襲われている。 原因をいろいろ調査するも、明確な打開策は見いだせず そんな中、見つけたのがtmp領域のチューニング。 http://k-1-ne-j …

no image

セッションタイムアウトを設定する

セッションタイムアウトと聞くとまず思いつくのがhttpdのセッションタイムアウト。 ec2のhttpdのデフォルトは60秒になっている。 WEBアプリのCSVアップロードを試したところ、60秒では全く …

no image

Billingでコスト管理

AWSは底なしにスケールアップできて堅牢性も高く安全性も高い。 そこまでインフラの知識がなくても、比較的簡単にサーバが作れてします。 一見見た目は、凄く便利でありがたいサービスだ。 しかし、使えば使う …