Anti-pattern: registra i dati nei server di terze parti utilizzando il criterio JavaScript

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Il logging è uno dei modi più efficienti per risolvere i problemi. Le informazioni sulla richiesta API, come intestazioni, parametri del modulo, parametri di query, variabili dinamiche e così via, possono essere registrate per riferimento futuro. Le informazioni possono essere registrate localmente sui processori di messaggi (solo Apigee Edge per il cloud privato) o su server di terze parti come Sumo Logic, Splunk o Loggly.

Antipattern

Nel codice seguente, l'oggetto httpClient in un criterio JavaScript viene utilizzato per registrare i dati su un server Sumo Logic. Ciò significa che il processo di logging avviene in realtà durante l'elaborazione della richiesta/risposta. Questo approccio è controproducente perché aumenta il tempo di elaborazione, aumentando così le latenze complessive.

LogData_JS:

<!-- /antipatterns/examples/1-4.xml -->
<Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS">
  <DisplayName>LogData_JS</DisplayName>
  <ResourceURL>jsc://LogData.js</ResourceURL>
</Javascript>

LogData.js:

<!-- /antipatterns/examples/1-5.xml -->
var sumoLogicURL = "...";
httpClient.send(sumoLogicURL);
waitForComplete();

La causa è la chiamata a waitForComplete(), che sospende le operazioni del chiamante fino al completamento del processo di logging. Un pattern valido consiste nel rendere asincrono l'eliminazione della chiamata.

Impatto

  • L'esecuzione del codice di logging tramite il criterio JavaScript aumenta la latenza della richiesta API.
  • Le richieste in parallelo possono sottolineare le risorse sul processore di messaggi e, di conseguenza, influire negativamente sull'elaborazione di altre richieste.

Best practice

  • Utilizza il criterio MessageLogging per trasferire/registrare dati nei server di log o nei servizi di gestione dei log di terze parti come Sumo Logic, Splunk, Loggly e così via.
  • Il principale vantaggio del criterio di logging dei messaggi è che può essere definito nel flusso post-client, che viene eseguito dopo che la risposta viene inviata all'app client che ha inviato la richiesta.
  • La definizione di questo criterio nel flusso del client post consente di separare l'attività di logging dall'elaborazione della richiesta/risposta, evitando così latenze.
  • Se esiste un requisito specifico o un motivo per eseguire il logging tramite JavaScript (non l'opzione del flusso Post-client menzionata sopra), l'operazione deve essere eseguita in modo asincrono. In altre parole, se utilizzi un oggetto httpClient, devi assicurarti che JavaScript NON implementi waitForComplete

Per approfondire