人事システム「COMPANY」のバッチ処理の裏(側) の話 の補足を人知れずメモしているもの。最新の仕様を説明した正式なものではないので、そういう時代があったのだなという参考程度に。
キューはどこからやってくるのでしょう
人事システム「COMPANY」のバッチ処理の裏(側) の話
「キュー管理サービス」というもの。キューは文字通りのQueueなのだがどうやって順番を管理しているかというとJava内のほかにもう一つ投入口が用意されている。下位互換的にそういう仕上がりになっている。「キュー受付テーブル」と一旦呼ぶ。
//「キュー受付テーブル」にレコードが入る。
// ↓
//「キュー管理スレッド」がそれを検知。
// ↓
// ジョブ処理待ちへ
これはこれでただのバッチ処理機構の内輪の話で「キュー受付テーブル」にレコードを投入するには投入するための関数を使ってやるのが「お作法」である。
// ★投入関数で呪文をとなえる(いくつか呪文には種類がある)
// ↓
//「キュー受付テーブル」にレコードが入る。
// ↓
//「キュー管理スレッド」がそれを検知。
// ↓
// ジョブ処理待ちへ
さてこれが仕様であるとしてこの「バッチ処理」を使いたい使用者(各種プロダクトやサブシステム)がどうしているか。
例外その1
★に代わる(使用者にとって)良い感じの投入関数を自分で作っている。
作っている。なぜそうされたかはわからないが自作されている。★で提供している関数が機能不足だったのだと思われる。それで動いているのだから絶するが、歴史は奥深い。
例外その2
「キュー受付テーブル」にレコードを突っ込む。
関数をいくら隠ぺいしてもテーブルはPublicなので、その仕様を理解した上で練られた技と考えられる。
コンウェイの法則
ソフトウェアのどの部分であれ、それを作った組織の構造を反映する。
Any piece of software reflects the organizational structure that produced it
備考:原文ではこれの応用として「コンパイラを4つのグループで作れば、4パスコンパイラになる」というのが紹介されている
オープンな組織である。
本来キューイングシステムとは
Messaging Brokers as a Single Point of Failure - Ciaran O’Donnell’s Blog
キューイングシステムとは
メッセージキューイング(MQ)とは - 意味をわかりやすく - IT用語辞典 e-Words
メッセージキューはその名の通りキュー(queue/待ち行列)構造となっており、複数のメッセージを預かる場合は先に書き込まれた方から順に読み出すFIFO(First-In First-Out:先入れ先出し)方式でメッセージを送り出す。受け渡しが完了したメッセージは消去され、次のメッセージの送受信に備える。
ブローカー、いわゆる仲介ですが、ブローカーなしのキューイングシステムとブローカーありのキューイングシステムがあり、ブローカーなしの場合、リクエストがあったらすぐにリクエストに答えるのに対し、ブローカーありは、タスクを受けて、バックグラウンドでサーバーに処理をスケジュールして、スケジュールに応じた処理を返すという感じです。
ブローカーなしだとすぐにレスポンスを返せるのですが、タスクが保存されていないので、何かあった場合は処理が完結しないのに対して、ブローカーありは処理に時間がかかるものの、タスクが保存されているので、何かあってもその処理を最後まで実行できます。
ZOZOTOWN カート投入の分散キューイングシステム 〜 プロダクションレディまでの歩み - ZOZO TECH BLOG
Amazon SQS(サーバーレスアプリのためのメッセージキューサービス)| AWS
Amazon Kinesis Data Streams(リアルタイム分析向け大規模データを収集)| AWS
Queue Storage | Microsoft Azure
Event Hubs - リアルタイムのデータ インジェスト | Microsoft Azure
Open Sourceなら
Kafka
Rabbitmq
Celeryq
Nsq
まだまだ勉強できそうだ...
以上休日にゆるりと楽しんでいただきたい小話でした。