Wagbyの非同期処理はメッセージングミドルウェアを用いて、実行するジョブをキューに登録し、順に実行します。

Wagbyには「ジョブ」という単位で特定の業務を実行する枠組みが提供されています。標準では時間指定によるジョブの実行が可能です。これはシステム管理者が設定する機能です。

ここで説明する非同期処理は、一般ユーザが実行したいジョブを「キュー」に登録することを実現します。キューに蓄積されたジョブは先頭から順に実行されます。このキューは「メッセージングミドルウェア」という別のソフトウェアが提供します。

図1 ジョブとキューのイメージ

Wagbyのダウンロード処理やアップロード更新処理には時間がかかることがあります。これを非同期処理で行うことができます。利用者の操作は次のようになります。

  1. ダウンロード処理をキューに登録する。登録はすぐに終了し、利用者は他の操作を行うことができる。
  2. Wagbyはキューに登録された(ダウンロード処理の)ジョブを取り出し、実行する。これはバッググラウンドで行われている。
  3. ジョブ実行が終了すると、利用者はダウンロード結果を取得することができる。

メッセージングミドルウェアとは、メッセージを管理するためのソフトウェアです。次のような特徴があります。

非同期処理の実現
メッセージの登録と取得はキューを介して行われるため、非同期に処理される。
拡張性
メッセージを送信する側と受信する側を複数用意することが可能で、大規模システムにも対応できる。
耐障害性
サービスが停止した場合でもメッセージは残るため、再開後に処理を引き継ぐことができる。

Wagby へのメリット

メッセージングミドルウェアを Wagby へ適用することにより、同時実行を制限することでリソースの急激な消費を防ぐというメリットがあります。

現在のWagbyのダウンロード、アップロード更新は利用者からの要求があると即時実行されます。このため、複数要求があると、すべてを同時に実行するため、処理速度の低下やメモリ消費量の増大につながる懸念がありました。

ジョブの実行をキューから取得することにより、ジョブを順に1つずつ実行することができるようになるため、サーバの急激な負荷上昇を抑えることができると期待できます。

さまざまなメッセージングミドルウェア

メッセージングミドルウェアにはさまざまな製品があります。IBMのWebSphere MQ、オラクルのOracle Advanced Queue、マイクロソフトのMSMQといった商用製品に加え、JBoss Messaging、Apache Active MQ、Rabbit MQ といったオープンソースの製品もあります。

Wagby は Rabbit MQ に対応しています。Rabbit MQ の特徴は次の通りです。

  • Spring framework を提供している Pivotal 社が提供している。
  • メッセージの標準プロトコルである AMQP (Advanced Message Queuing Protocol) に対応している。

Wagby では非同期ジョブ状態を管理するためのテーブル jfcjobstatus をもっています。このテーブルの登録と更新は Wagby 内部で行いますので、開発者は直接、このテーブルを更新しないようにしてください。

Wagby Developer Day 2018