背景
ローコードプラットフォーム『OutSystems』を社内へ導入・開発サポートしている。
JavaやPythonも楽しいけど、これからの時代はローコード!!
課題
OutSystemsはWEBは良いけどBATCHがなぁ…という声を度々耳にするが『そんなとこはない、BATCHもローコードで大丈夫』と言いたい。本稿では、OutSystemsでBATCH処理を実現する上での工夫ポイントを紹介する。
想定
・ 数千~数百万レコード単位の処理
・ スケジューラはOutSystemsとは別の何か(Zabbix, Windowsタスクスケジューラ, JP1など)
ポイント
① BATCHアーキテクチャ
※定時起動, 常時実行, オンデマンドのタイプがあるが、本稿では"定時起動"について記す
② タイムアウト対応
③ コミット制御
④ レスポンス改善
a) TextDitionaryを活用
b) コア部分のみ外を活用 (Extention, PL/SQL, Powershell)
対応
今回は以下について記述する。
② タイムアウト対応
※定時起動, 常時実行, オンデマンドのタイプがあるが、本稿では"定時起動"について記す
目的
OutSystemsでBATCHを実現する上での一例を紹介し、ローコードに対する懸念をやわらげ、もっと普及させたい。
内容
タイムアウトは複数考慮する箇所がある点に注意。
(1) IISのコネクションタイムアウト
(2) リバプロを置いている場合は、リバプロサーバのタイムアウト
(3) OutSystems上のAggregate/AdvancedSQLのタイムアウト
(1) IISのリクエストタイムアウト
デフォルトが120sとなっており、120sを超えた時点でREST APIへの通信が遮断される。
バッチ処理として掛かりそうな時間分だけ延ばして置く。
※ただし、WEBのリクエストへ対しても効いてしまうので、注意
(2) リバプロサーバのタイムアウト
システムやデータを社内NETでプロテクトしたい場合は、DMZにリバプロを配置した構成も考えられる。
その場合はリバプロサーバのミドルウェアにおけるタイムアウトも考慮すること。
Apache(参考サイト LinuxMaster.JP様)
https://www.linuxmaster.jp/linux_skill/2013/08/apache-6.html
IIS
本稿(1)参考
(3) OutSystems上のAggregate/AdvancedSQLのタイムアウト
DBアクセス時のSQL処理のタイムアウト時間にも注意を払う必要がある。
BATCH処理では得てして長時間を要するSQLを発行することが多々ある。(大量選択/更新, PL/SQLなど)
その場合は以下DBアクセスWidgetのTimeoutを要件に合せて編集しておくこと。(defaultは120s? Configuration toolでdefaultの変更が可能かも)
結果 or 気付いた点
タイムアウト時間を考慮することで、処理時間の長いBATCH処理も実現可能になる。
ただし、どちらかといえばなが~いBATCH処理を作るよりも、機能ごとにSTEPで区切り、1つずつSTEPをRESTでコールする作りの方が、運用・メンテナンス面からやりやすいように感じる。
結論
今回はOutSystems上でBATCH処理を実現するために必要となるTimeout時間の考慮部分を共有した。
まだ続く。