勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

夜間バッチレスシステムに関する中途半端な覚え書き

2014年後半からAWSの事例で、東急ハンズさんが「夜間バッチレス」というキーワードを話されている。このキーワードがアタマに引っかかってモヤモヤするのでいろいろ調べたり整理してみたことを吐き出してみる記事。なお実際に本腰を入れて検討したわけでもなし、机上の空論、アタマの体操であるという点に注意。
http://www.flickr.com/photos/13101664@N03/4712191684
photo by camknows

夜間バッチレスシステムとは

バッチ処理とはデータ処理を決まった時間やデータ量ごとにまとめて実行することである。たとえば、通常の銀行の振込業務は日中に行われる。しかし企業の従業員全員に対する給与振込など大量一括に行う処理は、日中の取引が完了したあとにまとめて処理を実施している。

で、夜間バッチレスシステムはこういった夜間バッチ処理が無いシステムのこととする。

夜間バッチレスシステムのメリット

夜間バッチ処理を行うためには一般的には日中のサービスを停止しなければいけない(取引などが出来ない状態で処理をする)。逆に言えば夜間バッチ処理がなければ24時間サービス提供もできる、というのがこれまでの夜間バッチレスシステムのメリットだった。むしろ24時間サービスを提供するために夜間バッチレス化を検討するような流れだった。

さらに最近ではサーバ資源がクラウドで提供され、利用している時間だけ課金する料金体系が出現している。夜間バッチ処理をなくせば、夜間サーバ資源を停止することができ、その分利用料を減らすことができるというメリットが加わっている(なお、実際には夜間バッチ処理は夜間運用も必要で、そういった運用コストも削減できると考えると影響は小さくないだろう)。

夜間バッチレス化の手法

バッチレス化の手法は調べてみたところ、大まかには二種類になるようだ。ひとつは業務やシステムの構造を見直してバッチ処理をそもそも不要にしてしまうオンライン化。もう一つは、夜間のバッチ処理を日中の業務に並行して実行し、結果として夜間バッチ処理を無くす日中バッチ処理化である。

オンライン化する

  • 要は「バッチ処理をすべて廃止」できるようにシステムを組み立てる。オンライン処理に吸収する。難易度は高い。
  • 業務の見直しにより、要件レベルでバッチ処理を不要とするのがベスト。
  • 無くせない時にどうするか

日中バッチ処理化する

  • 要は「オンライン処理と併走してバッチ処理を実施する」こと。
  • どのように併走するか、が肝
    • データの更新がある毎に処理するか、一定間隔とするか
    • 静止点をどのように取るか
  • 処理量が多いとオンライン処理へのパフォーマンス影響懸念がある
  • チューニングが必要

東急ハンズさんの事例

以下に公開されている資料などを見ていろいろと考えてみた。

https://www.hands-lab.com/tech/entry/62.html
https://www.hands-lab.com/tech/entry/149.html

やはりデータの保持方法が肝なんだろうと考えている。データをテキストファイルで、かつ追記形式で保持していることが データの静止点を作りやすくしているのだと思う・・・と、ここまで考えたところで思考が先に進まなくなってしまった。ファイルをデータ管理する変わりにKVSなどを使ったらどうなるか、というのもちょっと考えてみたいのだけれども、それはまたいつかどこかで。