[OutSystems]Professional Platform Ops Engineerのサンプル問題について解説 2/2(#6-#10)

各問題を確認し、解説をまとめます。

全部で10問で、この記事では6問目-10問目が対象。
[1問目-5問目](https://qiita.com/jyunji_watanabe/items/d7dac24b29bb1a75244c)

試験問題は、
https://www.outsystems.com/learn/certifications/
の、「Professional Platform Ops Engineer (OutSystems 11)」項目のリンク「Exam Details (.pdf)」でダウンロードできる資料から。解凍したら、Japaneseフォルダにあるファイルを開いてください。

#6 SEOルールの前提条件
OutSystemsでは、通常以下のルールでURLが決まります。
Traditional Webの場合
　https://ホスト名/モジュール名/画面名.aspx
Reactive Web Appの場合
　https://ホスト名/モジュール名/画面名
これとは別のルールで定義したURLでアクセスできるようにするのがSEOルールです。
2021/4時点では、まだTraditional Webだけ対応です。

前提条件として、IISにISAPIフィルターのインストールが必要です。
[Installing ISAPI Filters and Logging](https://success.outsystems.com/Support/Enterprise_Customers/Maintenance_and_Operations/Customize_or_redirect_the_application_URL#Installing_ISAPI_Filters_and_Logging)
> To start using the SEO Friendly URLs on OutSystems on-premises environments, you have to install ISAPI Filters in your Internet Information Services (IIS).

ISAPIはIISに機能追加をするための仕組みで、OutSystemsのインストールパッケージに含まれているdllを利用します。

このことを書いている選択肢Cが正解です。

#7 2段階デプロイ
LifeTimeによるアプリケーションのリリースを、
1. コンパイルとSQLスクリプトの準備
2. 実行ファイルの入れ替えとデータベース定義の更新

と分割するのが2段階デプロイです。
選択肢Bが該当します。

[短いデプロイ時間枠でデプロイする](https://success.outsystems.com/ja-jp/Documentation/11/Managing_the_Applications_Lifecycle/Deploy_Applications/Deploy_in_a_Short_Deployment_Window)
> 第1段階は影響の出ない準備段階です。
> アプリケーションをコンパイルします。
> SQLスクリプトを生成します。
> バイナリがターゲット環境のフロントエンドにアップロードされますが、実行中のバージョンは変更されません。

>第2段階では変更が有効になります。
> データベースを更新するためにSQLスクリプトが実行されます。
> 実行中のアプリケーションのバージョンが、アプリケーションサーバー内の新しいバージョンへと変更されます。
> 新しいモバイルアプリパッケージが生成されます（新しいアプリパッケージを必要とする変更があるモバイルアプリをデプロイする場合のみ）。

#8 LifeTimeに登録する環境のネットワーク要件
LifeTimeに登録する環境とLifeTime間ではhttp/httpsの双方向の通信が必要です。

[OutSystemsのネットワーク要件 - LifeTime](https://success.outsystems.com/ja-jp/Documentation/11/Setting_Up_OutSystems/OutSystems_network_requirements#LifeTime)の表に記載があります。

選択肢Dが該当します。

#9 アプリケーションプールのリサイクル
アプリケーションプールというのは、OutSystemsのアプリケーションが実際に配置されるIIS内の入れ物です。

[IIS のアプリケーションプールとは？](https://aspnet.keicode.com/aspnet/aspnet-apppool.php)に説明がありました。
> IIS の「アプリケーションプール」というのは、IIS のウェブアプリケーションの「ワーカープロセス」の設定のことです。 そして「ワーカープロセス」というのは、そのウェブアプリケーションが実行されるプロセスのことです。
> ここでいう、アプリケーションプールというのは 「同じワーカープロセスを共有するウェブアプリケーション群」という意味です。

[What is Application Pool Recycling in IIS?](https://success.outsystems.com/Support/Enterprise_Customers/Maintenance_and_Operations/Understanding_and_fine_tuning_Application_Pool_Recycling_for_use_with_OutSystems#:~:text=What%20is%20Application%20Pool%20Recycling,%2C%20hangs%2C%20or%20memory%20leaks.)に
> Recycling means that the worker process that handles requests for that application pool is terminated and a new one is started. This is generally done to avoid unstable states that can lead to application crashes, hangs, or memory leaks.

とある通りプロセスを一旦終了させ、不安定な動作を防ぎます。

というわけで、元々IIS側の操作であって、OutSystemsの操作であるパブリッシュとは関係ないです。
よって選択肢AかBに絞れます。

次に、リサイクルをなんのためにやるか、です。
A：フラグメント化やリークによって新しいメモリブロックを再割り当てするため。
B：フラグメント化やリークによって古いメモリブロックを再割り当てするため。
となっていますが、「によって」は、英語の方の試験問題では「due to fragmentation and leaks」なので「のために」で原因を表すものと思われます。
「（メモリーの）フラグメンテーションやリークに対応するために、」のような意味かと思います。
これは昔のASP.NET開発でしばしば行われていたことなので前段の部分はOKですね。AとBで違いがないし。

試験問題に示されている正解はAなのですが、今の所、根拠があまり明確にわかっていません。後でわかったら追記します。
以下のように考えるとどちらも正解になりうる気がします。
A：アプリケーションプールに乗っかっているアプリケーションに、リサイクルによって新しいメモリブロックを割り当てる
B：フラグメンテーションやメモリリークによって、利用不可になってしまったメモリブロックをリサイクルによって回収して、再割り当てできるようにする

#10 Timerの同時実行数
OutSystemsでバッチ処理を実現するTimerはフロントエンドで実行されます。実行を制御するサーバーロールはスケジューラー。

各フロントエンドで同時に実行できるTimer数には上限が設定されており、[Configuration ToolのSchedulerタブ](https://success.outsystems.com/ja-jp/Documentation/11/Reference/Configuration_Tool/Scheduler_Tab)で変更できます。デフォルトは3です。

よって正解は選択肢D。