Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. 堅牢なデータ転送を実現!MQによるデータ転送の強化

堅牢なデータ転送を実現!MQによるデータ転送の強化

投稿者:小野 一真

  • 初めに
  • データ転送における考慮点
  • 非同期通信を実現するMQシステム
  • 終わりに

初めに

はじめまして、NI+CのMQ担当大内です。
今回はデータ転送の課題と解決策について、MQを活用したソリューションを紹介します。

データ転送における考慮点

データ転送は、ライブ配信などのリアルタイム性が求められるストリーミングと必要なタイミングでデータを交換するオンデマンドの2種類に大別されます。
後者の通信形態が同期的な処理で行われている場合、次のような課題が生じます。

  • 接続エラーや通信処理の滞留によるアプリケーションのスタック
  • 配送エラーに伴うデータ整合性の損失

これらの課題は、非同期通信を採用することで解決できます。

非同期通信を実現するMQシステム

非同期通信はMQシステムを構成することで、簡単に実現できます。
MQシステムが構成されることにより、次のような特性を持った非同期通信が実現されます。

  • 通信先の状態と拠点を跨るネットワークに依存しないデータ通信が可能
  • データ配送のトランザクション管理によるデータの整合性を保証

これにより、メッセージの損失無くデータを送受信できるため、堅牢なデータ転送を実現できます。

弊社検証環境にて動作検証を行いましたので、ご紹介します。

1.ログの転送
データ転送サーバにて下記ログを用意し、一項目ずつMQサーバへログを転送します。

[mqliteuser@mq-client-01 demo]$ cat purchase_insert_data.csv #ログファイルの確認
1,佐藤 太郎,ノートパソコン,1,2023-10-06 10:15:30
2,鈴木 次郎,スマートフォン,2,2023-10-06 11:20:45
3,高橋 花子,タブレット,1,2023-10-06 12:30:10
4,田中 一郎,ヘッドホン,3,2023-10-06 13:45:50
5,渡辺 美咲,キーボード,1,2023-10-06 14:00:00
6,山本 寛,マウス,2,2023-10-06 15:10:25
7,小林 あかり,プリンター,1,2023-10-06 16:25:40
8,加藤 健一,モニター,2,2023-10-06 17:35:15
9,吉田 拓,外付けハードディスク,1,2023-10-06 18:40:05
10,山田 花,USBメモリ,3,2023-10-06 19:50:30
[mqliteuser@mq-client-01 demo]$ node /home/mqliteuser/demo/sendmesseage.js #ログの転送開始
接続成功
キューオープン成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
メッセージ送信成功
キュークローズ成功
切断成功
[mqliteuser@mq-client-01 demo]$

2.メンテナンスの再現
クラウドサービスのメンテナンスを再現するために、MQサーバ2を停止します。

[asp_admin@mq-server-02 ~]$ shutdown -h now #シャットダウン

3.ログの受信(MQサーバ1)
データ転送サーバから送付されたログをMQサーバ1が受信します。
データ転送サーバから10件のログが送付されたため、MQサーバ1で10件のメッセージを取得します。
また、MQサーバ2の状況を確認し、疎通が取れないためメッセージの転送を保留します。

4.障害再現
MQサーバ1を再起動し、障害を再現します。
再起動後、コミットしていないメッセージが復元されます。

[asp_admin@mq-server-01 ~]$ shutdown -r now #再起動

下記のように、再起動時にMQサーバとの接続が切断されます。

再起動完了後、再度接続すると下記のようにメッセージは損失されることなく、MQサーバ1でメッセージを維持しています。

5.MQサーバ2起動
MQサーバ2を起動します。
MQサーバ1はMQサーバ2との疎通を確認できるため、メッセージをMQサーバ2に送信します。

MQサーバ2が起動後、MQサーバ1からMQサーバ2にメッセージが転送されます。
MQサーバ1から転送されたメッセージ10件を確認できます。

6.ログ保管サーバよりMQサーバ2へログの取得
ログ保管サーバからMQサーバ2に保管されているログを取得します。
ログ取得前はログファイルにログが記載されておらず、ログ取得後はログファイルにMQサーバ2に保管されていた10件のログが記載されます。

[mqliteuser@mq-client-02 demo]$ cat purchase_insert_data.csv #ログファイルの確認
[mqliteuser@mq-client-02 demo]$ node getmessege.js #ログの取得
接続成功
キューオープン成功
書き込み成功
書き込み成功
書き込み成功
書き込み成功
書き込み成功
書き込み成功
書き込み成功
書き込み成功
書き込み成功
書き込み成功
メッセージがありません。
[mqliteuser@mq-client-02 demo]$ cat purchase_insert_data.csv #ログファイルの確認
1,佐藤 太郎,ノートパソコン,1,2023-10-06 10:15:30
2,鈴木 次郎,スマートフォン,2,2023-10-06 11:20:45
3,高橋 花子,タブレット,1,2023-10-06 12:30:10
4,田中 一郎,ヘッドホン,3,2023-10-06 13:45:50
5,渡辺 美咲,キーボード,1,2023-10-06 14:00:00
6,山本 寛,マウス,2,2023-10-06 15:10:25
7,小林 あかり,プリンター,1,2023-10-06 16:25:40
8,加藤 健一,モニター,2,2023-10-06 17:35:15
9,吉田 拓,外付けハードディスク,1,2023-10-06 18:40:05
10,山田 花,USBメモリ,3,2023-10-06 19:50:30
[mqliteuser@mq-client-02 demo]$

7.MQサーバ2のメッセージ確認
MQサーバ2に保管されていたメッセージは、コミット済みとなり消去されるため、データの重複化を防ぎます。

まとめ

堅牢なデータ転送を実現するために、MQを活用したデータ転送方法について説明しました。
ご紹介したMQシステムが少しでも気になった方はぜひ一度ご相談ください。

記載の製品/サービス名称、社名、ロゴマークなどは、該当する各社・団体の商標または登録商標です

ページのトップへ