Viele Ebenen in einem oder mehreren Diensten? (und warum)

13

Ich habe ein Rätsel, dass ich gemischte Ratschläge bekomme, wie ich vorgehen soll. Deshalb möchte ich es für einige begründete Antworten an GIS-SE senden.

Szenario:

  • Der Client verfügt über eine Web-Mapping-Anwendung. Möchte nicht in mehrere kleinere Anwendungen aufgeteilt werden. Obwohl dies gegen den heutigen Ansatz für Karten im Web verstößt (dh viele fokussierte Webkarten-Apps über eine Haupt-Webkarte), bin ich der festen Überzeugung, dass für einige Benutzer der Versuch, eine GIS-Anwendung im Web zu replizieren, von Vorteil ist ok ( manchmal )

  • Der Client hat einen Großteil seiner Grundkarten-Layer in separaten Diensten zwischengespeichert.

  • Der Client benötigt noch weitere 600-700 Layer in einem dynamischen Kartendienst ...
  • Der Dienst wird mit all diesen Schichten veröffentlicht wird ausgeschaltet .
  • Es wird nicht erwartet, dass Benutzer mehr als 10-40 Ebenen gleichzeitig aktivieren.

Ich kann mir vorstellen, dass Ihre anfängliche Reaktion darauf meiner ähnelt (600+ ?! WTF ?!).

Aber - die Anforderung ist in Stein gemeißelt und warum nicht? Ihre frühere ArcIMS-Anwendung hatte ähnliche Funktionen. Warum kann dieses neuere ArcGIS Server-Produkt nicht dasselbe tun? Die Benutzer müssen möglicherweise in der Lage sein, Vergleiche durchzuführen und Analysen für den gesamten Bereich von Schichten durchzuführen, selbst wenn die Schichten zu anderen Abteilungen gehören.

Bevor Sie zu Schlussfolgerungen gelangen, ist der Client ein erfahrener ArcGIS Server-Administrator.
Sie haben die 600 Schichten nach allen Best-Practice-Regeln verwaltet: zB Skalenbereiche kombiniert mit Definitionsabfragen; Beschriftung über Beschriftung; Verallgemeinerung komplexer Schichten in kleinen Maßstäben; als MSDs veröffentlichen; etc

Problem :

Was ist der bessere Ansatz hier?

  1. Veröffentlichen Sie alle 600 Layer in einem dynamischen Karten-Service

  2. Teilen Sie die Ebenen in logische Gruppierungen auf (Hydrologie, Planung, Ökologie, Versorgungsunternehmen usw.).

Wenn Sie mit # 1 gehen, und Sie haben ein paar komplexe Ebenen aktiviert. Wenn Sie einen einfachen Punkt-Layer aktivieren möchten, muss ArcGIS Server weiterhin die gesamten Layer rendern, die erneut angezeigt werden.

Wenn Sie sich für Nummer 2 entscheiden, muss die Webanwendung möglicherweise jedes Mal, wenn Sie eine Anforderung stellen, mehrere GET-Anforderungen für ExportMaps von den einzelnen Karten-Services senden (ist dies nicht der Fall oder führt zu einer zusätzlichen Belastung von ArcGIS Server über Nummer 1 ?)

Das führt dann zu Konfiguration und Abstimmung, um sicherzustellen, dass alles so schnell wie möglich geht. Wir können das Back-End von ArcGIS Server auf mehrere Hosts skalieren und verfügen über eine gute Hardware, auf der es installiert werden kann.

Wenn Sie sich für Nummer 1 entscheiden, können Sie die maximale Anzahl von Instanzen ausgeben, die von AGS verarbeitet werden können.

Wenn Sie sich für Nummer 2 entscheiden, gehen wir davon aus, dass Sie die Leistung der Kartendienste bewerten (Auslastungstests und Wartezeiten) und die Min / Max-Instanzen entsprechend adressieren, um sicherzustellen, dass es keinen Dienst gibt, der ein „schwaches Glied“ ist.

Im Moment neige ich zur # 2 Annäherung, da mein Kopf mir immer noch sagt, dass 600 Schichten in einem Dienst Wahnsinn sind, aber wenn sie alle standardmäßig ausgeschaltet sind, gibt es wirklich kein Problem.

Würde gerne deine Gedanken hören. Lassen Sie mich wissen, wenn Sie weitere Informationen über die Kommentare benötigen, aber nicht nach Antworten wie "Verwenden einer Desktop-Anwendung" oder "Lernen Sie sie dazu, Dinge anders zu machen" suchen.


In den Kommentardiskussionen habe ich eine andere Überlegung nicht erwähnt. Die Anwendung, in der der Dienst verwendet wird, bietet die Möglichkeit der Sicherheit auf Ebenenebene (auf Anwendungsebene). Daher wird die Gruppe von Benutzern (die ziemlich groß ist) einer bestimmten Rolle zugewiesen, und diese Rolle hat Zugriff auf die vollständigen 600 Ebenen. Andere Rollen sind begrenzt.

Simon
quelle
Persönlich würde ich dem Premierminister eine Frage stellen, in der das Problem umrissen wird, Empfehlungen für bewährte Verfahren geben, einen Ausweg vorschlagen und sie dann in ihren Händen belassen. Am Ende des Tages haben Sie alle Hände voll zu tun, sobald Sie jemanden haben, der sagt: "Aber so war es". In dieser Situation würde ich wie oben tun, dann waren Sie professionell, haben Ihre Arbeit erledigt und der Rest liegt bei ihnen. Ich rate außerdem, jeden, der in Bezug auf Ihren Arbeitsort reich und berühmt ist, in die E-Mail aufzunehmen, um sicherzustellen, dass der Rat da draußen ist und jeder weiß, was der Rat war und wer ihn gegeben hat.
Hairy
Sie sagen nicht die Art von Webapp, die zum Durchsuchen der Ebenen verwendet wird, aber ich gehe davon aus, dass es sich um eine Art OpenLayer handelt. Beachten Sie in diesem Fall, dass der Browser auch Probleme verursachen kann, da er nicht mehr als ein paar (zwischen 2 und 6) gleichzeitige Anforderungen an denselben Server sendet (einschließlich XHR, CSS und allem). In diesem Artikel finden Sie Details und einige Alternativen (ich verwende normalerweise mehrere Namen, wenn IT kooperativ ist): stevesouders.com/blog/2008/03/20/…
unicoletti
@Hairy - Ich bin der Meinung, dass wir mit ArcGIS Server die Anforderungen des Clients erfüllen können. Obwohl es die Grenzen des Möglichen mit AGS erweitert, ist es immer noch möglich, und wir können immer noch auf unseren vorherigen Rat zurückgreifen, um die Anforderungen zu brechen App in mehrere Apps.
Simon
1
Ich weiß, dass es machbar ist, ich habe mit Kunden zusammengearbeitet, die dasselbe tun, aber ich denke nicht, dass es ratsam ist, was verschiedene Dinge sind. Wenn sie sich für 10 Kunden entscheiden, die alle 600 Schichten auf einmal haben möchten, egal auf welchem ​​AGS-Server Sie arbeiten, wird dies
Hairy
2
Siehe verwandte Frage
Kirk Kuykendall

Antworten:

8

Verwendete das Capacity Planning Tool , um einen superlastigen Karten-Service mit 4 lite Karten-Services zu vergleichen. Die Ergebnisse zeigen, dass der schwere Karten-Service der richtige Weg ist.

Dies ist möglicherweise nicht die richtige Antwort, und das Kapazitätsplanungstool berücksichtigt nicht alle Faktoren (z. B. Benutzerworkflows). Lassen Sie mich über Kommentare wissen, was Sie denken.

1 superlastiger Kartendienst:
CPU-Auslastung des App-Servers = 49,4%
CPU-Auslastung des Datenbankservers = 7,6%
Netzwerklast = 16 MBit / s
Antwortzeit der Anzeige = 0,88 Sekunden

(Bilder können von RC in großem Maßstab gesehen und in neuem Tab geöffnet werden)

Bildbeschreibung hier eingeben

4 Lite-Kartendienste:
CPU-Auslastung des App-Servers = 55,4%
CPU-Auslastung des Datenbankservers = 7,6%
Netzwerklast = 64 Mbit / s
Antwortzeit der Anzeige = 0,32 Sekunden, also zwischen 0,32 und 1,28 Sekunden, abhängig vom Overhead des Webbrowsers

Bildbeschreibung hier eingeben

Weitere Logik zur Unterstützung des One-Map-Service-Ansatzes:

  1. Alle Layer befinden sich daher im selben Karten-Service.
    ein. Eine Anfrage wird an den Server gesendet.
    b. ein SOC-Prozess zeichnet die Karte
    c. Ein Bild wird über das Netzwerk zurückgegeben

  2. Die 40 Ebenen sind daher auf 4 Kartendienste (jeweils 10 Ebenen) verteilt.
    ein. 4 Anfragen werden an den Server gesendet.
    B. 4 SOC-Prozesse zeichnen eine Karte
    c. Über das Netzwerk werden 4 Bilder zurückgegeben

1a und 1c sind schneller und belasten das Netzwerk weniger als 2a und 2c.

2b kann die Parallelverarbeitung verwenden, um eine Karte für einen einzelnen Benutzer schneller als 1b zurückzugeben, dies ist jedoch für viele Benutzer nicht der Fall. Tatsächlich wird der Aufwand für die zusätzlichen Transaktionen, die vom Server in 2b verarbeitet werden (plus die zusätzliche Netzwerklast von 2c), 1b mit zunehmender Anzahl von Benutzern viel besser skalieren.

Simon
quelle
2
das klingt logisch Das Verwalten der 600-Layer-MXD hört sich nach wenig Spaß an.
Stephen Lead
1

Die Verwendung mehrerer Dienste, das Skalieren von Layern / Labels, das Zwischenspeichern und die Verwendung nicht dynamischer Labels tragen zwar zur Verbesserung der Webanwendungserfahrung bei, der erste Treffer beim Laden aller über 600 Layer in eine Anwendung wird jedoch vom Endbenutzer bemerkt. Besonders die Zeit, die zum Auffüllen des Inhaltsverzeichnisses benötigt wird. Wenn Sie eine Anwendung mit mehr als 600 Ebenen erstellen müssen, würde ich auf jeden Fall Option 2 wählen. Möglicherweise möchten Sie Ihre Datenstruktur anhand eines Datenmodells (z. B. des Datenmodells der lokalen Verwaltung) modellieren.

Im folgenden Whitepaper werden einige interessante Best-Practice-Richtlinien und Leistungsstatistiken für Konfigurationen von ArcGIS Server-Webanwendungen vorgestellt.

http://www.esri.com/library/whitepapers/pdfs/creating-arcgisserver-web-mapping.pdf

artwork21
quelle
Guter Punkt auf dem Inhaltsverzeichnis, aber es lädt tatsächlich gut. "Erster Treffer beim Laden von mehr als 600 Layern" = Aus Sicht der Kartenanforderung wird immer noch nur eine Anforderung an einen Dienst gesendet. Daher ist es für AGS ziemlich schnell, den Export zurückzugeben, BIS sie anfangen,> 20 Ebenen einzuschalten.
Simon