Антипаттерн: запись данных на сторонние серверы с использованием политики JavaScript.

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Ведение журналов — один из эффективных способов отладки проблем. Информация о запросе API, такая как заголовки, параметры формы, параметры запроса, динамические переменные и т. д., может быть записана в журнал для последующего использования. Информация может записываться локально на обработчиках сообщений (только Apigee Edge для частного облака) или на сторонние серверы, такие как Sumo Logic, Splunk или Loggly.

Антипаттерн

В приведенном ниже коде объект httpClient в политике JavaScript используется для записи данных на сервер Sumo Logic. Это означает, что процесс записи данных фактически происходит во время обработки запроса/ответа. Такой подход контрпродуктивен, поскольку увеличивает время обработки, тем самым повышая общую задержку.

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();

Виновником здесь является вызов функции waitForComplete() , которая приостанавливает операции вызывающей стороны до завершения процесса логирования. Правильным решением было бы сделать этот процесс асинхронным, исключив этот вызов.

Влияние

  • Выполнение кода логирования через политику JavaScript увеличивает задержку запроса к API.
  • Одновременные запросы могут создавать нагрузку на ресурсы обработчика сообщений и, следовательно, негативно влиять на обработку других запросов.

Передовая практика

  • Используйте политику MessageLogging для передачи/регистрации данных на серверы журналов или сторонние сервисы управления журналами, такие как Sumo Logic, Splunk, Loggly и т. д.
  • Главное преимущество политики логирования сообщений заключается в том, что её можно определить в потоке обработки запросов от клиента, который выполняется после отправки ответа обратно в запрашивающее клиентское приложение.
  • Определение этой политики в процессе обработки данных после подключения клиента помогает разделить процессы логирования и обработки запросов/ответов, тем самым избегая задержек.
  • Если существует особая необходимость или причина для выполнения логирования через JavaScript (а не через упомянутый выше вариант Post Client), то это необходимо делать асинхронно. Другими словами, если вы используете объект httpClient , вам необходимо убедиться, что JavaScript НЕ реализует waitForComplete

Дополнительная информация