Sollte ich häufigere, kleinere Anrufe machen; oder weniger häufige größere Anrufe?

8

Ich denke, die Frage ist irgendwie geladen, aber ich wollte etwas Feedback. Momentan baue ich Poco Class Objekte aus Web Services via dtos. Ich lade alle skalaren Werte vor und lade alle Sammlungen / Arrays, die natürlich auch Binärdateien enthalten.

Offensichtlich habe ich dies getan, um die Antwortzeit zu verbessern, da diese Bibliothek die Webanwendung antreibt. Um den Dienst jedoch wiederverwendbar zu halten, habe ich jede GET-Funktion auf eine einzige Aktion (S) normiert. Wenn Sie zum Beispiel Benutzerinformationen aus dem Active Directory abrufen, ist dies eins (Skalarwerte wie "displayName" und "Abteilung"), und das Erfassen der direkten Berichte dieser Person ist eine separate Aktion mit "Lazy Loaded". Was passiert, wenn Sie ein Objekt erstellen, gibt es zahlreiche Aufrufe an den Dienst, um dieses Objekt zu erstellen. Einige Seiten benötigen nur die Basisinformationen, andere rufen mehr Lazy Load-Methoden oder sogar das gesamte Objekt auf. Ich sehe kein Problem damit, aber was ich mich wundere (und andere bei der Arbeit kritisieren bereits) ist, ob das ein Problem wird?

Meine Frage ist, mache ich das falsch? Alle Eingaben werden jedoch geschätzt. Danke

    
Sinaesthetic 09.07.2012, 15:50
quelle

3 Antworten

6

Die Balance, die Sie treffen müssen, ist der Overhead eines HTTP-Aufrufs, im Gegensatz zum Overhead beim Übertragen einer großen Anfrage oder Antwort.

Es gibt keine Silberkugel. Wenn beispielsweise der Anruf über ein LAN von einem Server zu einem anderen erfolgt, sind größere Nutzlasten kein großes Problem. Wenn der Anruf von einem mobilen Gerät aus getätigt wird, hat das Trimmen der Nutzlast wahrscheinlich einen großen Vorteil.

Die beste Balance zu Beginn ist es, die Methoden Ihres Webservice als Schritte in einem Workflow zu betrachten. Denken Sie darüber nach "Wenn ich X erreichen will, welche Daten brauche ich?"; Versuchen Sie, Ihre Anfragen um diese Gedanken zu erweitern und analysieren Sie dann die Ergebnisse. Es ist nur ein Anfang, aber es ist besser als mit "einer Methode für jedes kleinste Detail" oder "einer Methode, die alles erlaubt" zu beginnen.

    
STW 09.07.2012, 15:54
quelle
3
  

Ich sehe kein Problem damit, aber was ich mich wundere (und andere bei der Arbeit kritisieren bereits) ist, ob das ein Problem sein wird?

Das Problem besteht darin, dass jeder Aufruf des Dienstes einen Overhead verursacht. Sie erhalten einen besseren Gesamtdurchsatz mit weniger, größeren Anrufen.

Es gibt immer einen Kompromiss hier und ein Gleichgewicht zu erreichen. Bei größeren Aufrufen besteht die Gefahr, dass mehr Daten als erforderlich abgerufen werden, wodurch auch Ressourcen verschwendet werden.

    
Reed Copsey 09.07.2012 15:51
quelle
1

Ich stimme für weniger häufige größere Anrufe.

Da Sie sich in einem Web-Kontext befinden, ist es eine kostspielige Operation, Daten vom Datenspeicher zur App-Ebene und dann zu Ihrer Web-Ebene zu übertragen. Ich glaube, dass das Netzwerk-Traversal die meisten Ressourcen benötigt. So lassen sich weniger häufige Aufrufe (über einen Caching-Mechanismus in der Web Tier) besser skalieren und dies kommt aus eigener Erfahrung.

Was Sie als "groß" definieren, hängt auch von Ihrer Anwendungsnutzung ab. Z.B. Wenn die Mehrheit Ihrer Benutzer nur ihre grundlegenden Informationen sieht und nur einige wenige weiter in direkte Berichte gehen, können Sie zwei separate Anrufe verwenden. Sonst bleibe bei einem.

Hoffe, das hilft.

    
Channs 09.07.2012 16:05
quelle

Tags und Links