サービスのチューニングと構成
ArcGIS for Desktop は、さまざまなサービス プロパティのデフォルト値を自動的に設定することにより、サービスを簡単にすばやく公開できるようにします。ただし、サービスにアクセスするユーザ数が非常に多い場合は、配置環境に合わせてサービス プロパティをデフォルト値から適切に変更する必要があります。このトピックでは、サービスを最適に構成するためのプロパティと手法について簡単に説明します。
プールの設定
ArcGIS 10.1 for Server 以降のリリースで公開されるすべてのサービスは、プールされます。つまり、サービスのインスタンスは、複数のアプリケーション セッション間で共有することができます。
プールされるサービスのインスタンスを使用するアプリケーションは、1 つのリクエスト(マップの描画、アドレスのジオコーディングなど)が完了するまで、そのインスタンスのみを使用します。リクエストが完了した後、アプリケーションはサービス インスタンスへの参照を解放し、それを利用可能なインスタンスのプールに直接戻します。
リサイクル
サービスのリサイクルにより、利用不能になったサービスを削除して、新しいサービスと置き換えることができます。また、使用されなくなったサービスが確保していたリソースも回収されます。
サービスは一般に、複数のアプリケーションとアプリケーションのユーザによって共有されます。サービスの再利用の過程で、サービスをアプリケーションで使用できなくなることがあります。たとえば、アプリケーションがサービスの状態を不正に変更したり、サービスへの参照を不正に保持したりして、他のアプリケーションのセッションで利用できない状態にすることがあるかもしれません。場合によっては、サービスが壊され、利用できなくなることもあります。リサイクルにより、サービスのプールを最新の状態に保ち、古くなったサービスや使用不能になったサービスを回収することができます。
リサイクルの過程で、サーバはサービス構成内の各インスタンスを削除してから再作成します。リサイクルは、サーバ上でバックグラウンド プロセスとして実行されます。画面上には、リサイクルが実行されていることを示すものは何も表示されませんが、リサイクルに関連するイベントはログ ファイルに記録されます。
リサイクルは、サービスの実行中のインスタンスが指定された最小数を超えているかどうかに関係なく、それらをすべて削除して再作成します。実行中のインスタンス数を指定された最小数に定期的に戻すには、サービスを停止して再開する必要があります。このプロセスを自動化するよい方法は、ArcGIS Server の管理 API を使用して、カスタムのコマンド ライン実行可能ファイルを実行する Python スクリプト、シェル スクリプト、Windows バッチ スクリプトのいずれかを作成することです。このカスタム実行可能ファイルは、コマンド ライン引数として、サーバ名、サービス名、サービス タイプ、サービスの開始または停止を示すフラグを受け取ります。
リサイクル イベントが発生する間隔は、リサイクル間隔と呼ばれています。デフォルトのリサイクル間隔は 24 時間ですが、[サービス エディタ] ダイアログ ボックスで変更することができます。また、最初にリサイクルする時刻を選択することもできます。最初のリサイクルが行われた後は、リサイクル間隔を経過するごとにリサイクルが開始されます。
サービスのリサイクルは、インスタンスを利用可能な状態に保ち、各サービスのインスタンスを新規作成することによるパフォーマンスへの影響を分散させるために、1 インスタンスずつ実行されます。リサイクルの順序は決まっていませんが、クライアントによって使用されているサービスのインスタンスは解放されるまでリサイクルされません。このようにして、サービスを利用するユーザの作業に支障を与えないようにリサイクルが実行されます。
リサイクル中に利用可能なサービスが不足した場合、リクエストはインスタンスが利用可能になるまで待機状態になります。その間に最大待機時間に達した場合は、通常と同じメッセージがログに記録されます。
分離
サービスを作成する際には、利用可能にするインスタンスの最小数と最大数を指定します。これらのインスタンスは、プロセス内のコンテナ コンピュータで実行されます。分離レベルは、これらのインスタンスを別々のプロセスで実行するのか、プロセスを共有するのかを決定します。
高い分離レベルでは、各インスタンスが専用のプロセスで実行されます。何らかの原因でプロセスが異常終了したとしても、その影響を受けるのはそのプロセスで実行されているインスタンス 1 つです。
これに対し、レベルを低分離性に設定すると、複数のサービス インスタンスが 1 つのプロセスを共有できるようになります。したがって、1 つのプロセスで、複数の同時リクエストを処理できます。これはよくマルチスレッディングと呼ばれます。
低い分離レベルでは、プロセスを共有できる同じサービス構成のインスタンスの数は、デフォルトで 8、最大で 24 です。[1 プロセスあたりのインスタンス数] の値は、[サービス エディタ] の [プロセス] タブで設定することができます。特定のサービスのインスタンスがこの数に達すると、サーバが次のインスタンス グループに対する追加プロセスを開始します。そして、インスタンスがその数に達するたびに、同じ操作が繰り返されます。インスタンスが作成されると実行中のプロセスのスペースが埋まり、インスタンスが削除されるとスペースが空きます。
低分離性の利点は、1 つのプロセスによってサポートされる同時インスタンスの数が増えることです。低分離性を使用すると、サーバ上で利用するメモリ量が若干少なくなります。ただし、この改善にはリスクが伴います。プロセスが終了またはクラッシュした場合、そのプロセスを共有するインスタンスはすべて削除されます。高分離性を使用することを強くお勧めします。
無効なデータ接続の有無の確認
サービス インスタンスがアイドル状態にあるとき、ソース データへの接続が正常に維持されているかを判断するのは、サーバ管理者にとって難しい場合があります。ArcGIS Server には、ArcSDE ジオデータベースへの無効な接続をチェックするための組み込み機能があります。これらのチェックによって、ArcSDE への接続が切断または中断された後にサービスが応答しなくなるのを回避することができます。
ArcGIS for Desktop または ArcGIS Server Manager のいずれかで、[サービス エディタ] ダイアログ ボックスの [プロセス] タブを開き、[使用されていないインスタンスのデータ接続を定期的にチェックして修復] チェックボックスをオンにすることによって、データ接続の有効性のチェックを有効化することができます。また、サービス接続が自動的に有効性チェック(および必要に応じて修復)されるために、分単位での間隔も指定する必要があります。通常は、デフォルトの 30 分を指定するのが適切です。
これらのチェックを有効にすると、サービスが一定期間アイドル状態にあった後にファイアウォールが ArcSDE へのポートを閉じている場合にも役立ちます。この状況では、時間間隔の選択は、ファイアウォールのタイムアウト設定に左右されるかもしれません。
タイムアウト
使用可能な各種のサービス タイムアウト値を理解すると、サービスを継続して実行し、常に使用できるようにしておくのに役立ちます。これらの値は [サービス エディタ] ダイアログ ボックスの [プール] タブで選択できます。
クライアントは、サービスへの参照を取得すると、サービスをある期間にわたって使用してから解放します。クライアントがサービスへの参照を取得してから参照を解放するまでにかかる時間を「使用時間」と呼びます。クライアントがサービスへの参照をいつまでも保持することがないよう(つまり、サービスを適宜に解放するよう)、各サービスに最大使用時間を設定することができます。クライアントが最大使用時間を超えてサービスを保持していた場合、そのサービスは自動的に解放され、クライアントはサービスへの参照を失います。
新しいサービスを作成したときの最大使用時間のデフォルト値は 600 秒(10 分)です。ただし、ArcGIS Server の各サイトで提供される事前生成済みの PublishingTools サービスでは、最大使用時間が 3600 秒(60 分)に設定されています。これは、大量のデータをサーバにコピーする公開ジョブに対応するためです。
最大使用時間には、管理者の想定を超える量の作業にサービスが使用されるのを防ぐ効果もあります。たとえば、あるアプリケーションがジオデータベースのチェックアウトを実行するために使用するサービスには、最大使用時間として 10 分を設定するかもしれません。これに対し、アプリケーションがマップの描画にのみ使用するサービスには、最大使用時間として 1 分を設定するかもしれません。
サービスの最大数のインスタンスが使用中である場合、サービスをリクエストしているクライアントは、別のクライアントがサービスの 1 つを解放するまでキューに配置されます。クライアントがサービスをリクエストしてからサービスを取得するまでにかかる時間を「待機時間」と呼びます。各サービスには、最大待機時間を設定することができます。クライアントがサービスの最大待機時間よりも長く待機した場合、そのリクエストはタイムアウトします。
3 つ目のタイムアウトは、最大実行時間です。サービスは使用されなくなった後も、別のクライアントがインスタンスを必要とするまで、サーバ上で実行し続けます。使用されていない実行中のインスタンスもサーバ上のメモリを消費します。実行中のサービスの数を最小限に抑え、このアイドル状態のタイムアウトを短くすると、メモリを節約することができます。このタイムアウト値はデフォルトで 1,800 秒(30 分)に設定されます。アイドル状態のタイムアウトを短くすることには、実行中のサービスがすべてタイムアウトした後、新しいインスタンスが作成されるまでクライアントが待機しなければならないという欠点があります。
サーバを起動した結果として、またはクライアントからサーバへのリクエストのレスポンスとして、GIS サーバでサービス インスタンスが作成される場合に、サービス インスタンスを初期化するのにかかる時間を「作成時間」と呼びます。GIS サーバは、サービス インスタンスの開始に時間がかかりすぎていることの目安となる開始タイムアウトを管理し、そのタイムアウトを過ぎた時点で、サービス インスタンスの作成を取り消します。デフォルト値は 300 秒(5 分)です。
GIS サーバは、待機時間、使用時間、サーバ上で発生するその他のイベントに関する統計情報を、メモリ内およびログに記録します。サーバ管理者は、これらの統計情報に基づいて、サービスの待機時間が長すぎるかどうかを判断することができます。その場合は、そのサービスのインスタンスの最大数を増やす必要があるでしょう。
サービスで実行できるオペレーションの制限
Web サービスの使用方法を管理しやすくするために、サービスの種類ごとに許可されるオペレーションがあります。各操作は、グループとして有効または無効にできる一連のメソッドで構成されています。Web サービスのクライアントは、許可されているオペレーションのメソッドのみを呼び出すことができます。
たとえば、マッピング Web サービスのユーザにマップの描画を許可し、マップ レイヤのデータ ソースのクエリを許可したくないとしましょう。この場合は、「データ」オペレーションを無効にし、「マップ」オペレーションを有効にする必要があります。
ここで特にフィーチャ サービスを取り上げるのは、フィーチャ サービスが GIS データの Web ベースでの編集に使用されるからです。フィーチャ サービスには、編集機能の制限に使用できる 1 組の追加オペレーションがあります。[クエリ(Query)]、[作成(Create)]、[更新(Update)]、[削除(Delete)] です。これらのオペレーションは、ArcGIS for Desktop の [サービス エディタ] ダイアログ ボックスの [フィーチャ アクセス] タブで有効または無効にすることができます。所有権ベースのアクセス制御を適用することにより、ユーザが自分で作成していないフィーチャは編集できないようにすることもできます。
次の各表は、さまざまなサービス タイプに対してオペレーションを許可したときに有効になるメソッドを示しています。
マップ サービスのオペレーション
マップ サービスにおいてデフォルトで許可されるオペレーションは、「マップ(Map)」、「クエリ(Query)」、「データ(Data)」です。
マップ(Map) |
クエリ(Query) |
データ(Data) |
---|---|---|
GetDocumentInfo |
Identify |
Find |
GetLegendInfo |
QueryFeatureCount |
QueryData |
GetMapCount |
QueryFeatureCount2 |
QueryFeatureData |
GetMapName |
QueryFeatureIDs |
QueryFeatureData2 |
GetDefaultMapName |
QueryFeatureIDs2 |
QueryAttachmentInfos |
GetServerInfo |
QueryHyperlinks |
QueryAttachmentInfos2 |
GetSupportedImageReturnType |
QueryHTMLPopups |
QueryAttachmentData |
ExportMapImage |
QueryHTMLPopups2 |
QueryAttachmentData2 |
IsFixedScaleMap |
GetSQLSyntaxInfo |
QueryRelatedRecords |
ToMapPoints |
QueryRelatedRecords2 |
|
FromMapPoints |
QueryRasterValue |
|
HasSingleFusedMapCache |
QueryRasterValue2 |
|
GetTileCacheInfo |
||
GetMapTile |
||
HasLayerCache |
||
GetLayerTile |
||
GetVirtualCacheDirectory |
||
GetCacheName |
||
ComputeScale |
||
ComputeDistance |
||
ExportScaleBar |
||
GetCacheDescriptionInfo |
||
GetCacheControlInfo |
||
GetCacheStorageInfo |
||
GetDefaultLayerDrawingDescriptions |
||
GetMapTableSubtypeInfos |
||
GetMapTableSubtypeInfos2 |
||
GetServiceConfigurationInfo |
ジオコード サービスのオペレーション
ジオコード サービスにおいてデフォルトで許可されるオペレーションは、「ジオコード(Geocode)」と「リバース ジオコード(Reverse Geocode)」です。
ジオコード(Geocode) |
リバース ジオコード(Reverse Geocode) |
---|---|
GeocodeAddress |
ReverseGeocode |
GeocodeAddresses |
|
StandardizeAddress |
|
FindAddressCandidates |
|
GetAddressFields |
|
GetCandidateFields |
|
GetIntersectionCandidateFields |
|
GetStandardizedFields |
|
GetStandardizedIntersectionFields |
|
GetResultFields |
|
GetDefaultInputFieldMapping |
|
GetLocatorProperties |
ジオデータ サービスのオペレーション
ジオデータ サービスにおいてデフォルトで許可されるオペレーションは、「クエリ(Query)」、「抽出(Extraction)」、「レプリケーション(Replication)」です。これらのオペレーションにより、サポートされるすべてのメソッドが、データのクエリ、データの抽出、データの同期、データの変更、メッセージの承認、およびスキーマで有効になります。
クエリ(Query) |
抽出(Extraction) |
レプリケーション(Replication) |
---|---|---|
Get_Versions |
ExpandReplicaDatasets |
CreateReplica |
Get_DefaultWorkingVersion |
ExtractData |
ExportAcknowledgement |
Get_DataElements |
ExportReplicaDataChanges |
|
Get_MaxRecordCount |
ImportAcknowledgement |
|
TableSearch |
ImportReplicaDataChanges |
|
GetNextResultPortion |
ReExportReplicaDataChanges |
|
Get_Replicas |
UnregisterReplica |
|
Get_WrappedWorkspaceType |
ImportData |
グローブ サービスのオペレーション
グローブ サービスにおいてデフォルトで許可されるオペレーションは、「グローブ(Globe)」、「アニメーション(Animation)」、「クエリ(Query)」です。マップ サービスとは異なり、「クエリ(Query)」オペレーションは Identify と Find の両方をカバーします。
グローブ(Globe) |
アニメーション(Animation) |
クエリ(Query) |
---|---|---|
Get_Version |
Get_Animation |
Identify |
Get_LayerCount |
Find |
|
Get_LayerInfos |
||
Get_LegendInfos |
||
Get_Config |
||
Get_MQT |
||
Get_Configuration |
||
Get_Tile |
||
Get_Symbols |
||
Get_Textures |
||
Get_VirtualCacheDirectory |
イメージ サービスのオペレーション
モザイク データセットをイメージ サービスとして公開すると、すべてのケーパビリティはデフォルトで有効になります。ラスタ データセット、編集済みイメージ サービス定義、またはレイヤ ファイルのような、その他のいくつかのソースから公開した場合には、イメージ(Image)およびメタデータ(Metadata)のケーパビリティのみが適用され有効になります。
画像(Image) |
カタログ(Catalog) |
ダウンロード(Download) |
メタデータ(Metadata) |
ピクセル(Pixels) |
---|---|---|---|---|
ExportImage |
Fields |
Download |
Metadata |
GetNativePixelBlock |
ExportMapImage |
GetCatalogItemCount |
GetFile |
GetRasterMetadata |
GetPixelBlock |
GenerateServiceInfo |
GetCatalogItemIDs |
|||
GetImage |
GetCatalogItems |
|||
Identify |
GetNativeRasterInfo |
|||
ServiceInfo |
GetRasterInfo |
|||
Version |
GetThumbnail |