非同期処理の概要

最終更新日: 2021年3月8日
R8 | R9

ジョブとキューの考え方

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

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

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

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

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

メッセージングミドルウェア

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

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

Wagby へのメリット

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

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

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

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

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

Wagby は Apache ActiveMQ, AmazonMQ, Rabbit MQ に対応しています。両者の特徴は次の通りです。

Rabbit MQ

Apache ActiveMQ Artemis

Amazon MQ

Wagbyが提供する非同期処理は、上のいずれの製品を利用しても実現できます。

サーバをインストールしない運用(インメモリでの動作)

Apache ActiveMQ Artemis を選択したとき、インメモリでの動作を指定することができます。この場合、Wagbyアプリケーション(wagbyapp)が動作する JVM にインメモリのメッセージキューが用意されます。別途 Apache ActiveMQ Artemis をインストールすることなく、このインメモリのメッセージキューを使ってジョブを登録することができるようになります。

この方法は手軽に非同期処理を実現できるというメリットがありますが、専用サーバをもたないためキューの管理にかかわる(専用サーバが提供する)堅牢性、監視性などの運用支援がありません。Wagbyアプリケーションを再起動した場合、キューの内部も消えるため、未処理のジョブは失われます。(専用サーバがあれば未処理のジョブはサーバが管理するため、Wagbyアプリケーション再起動時にジョブを復旧することができます。)このようなデメリットもあるため、本番運用では専用サーバの利用を推奨します。インメモリ動作は開発環境ならびにテスト環境での動作確認用と位置づけるのがよいでしょう。

ジョブ状態の管理

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