Anti-pola: Mencatat data ke server pihak ketiga menggunakan kebijakan JavaScript

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Pencatatan log adalah salah satu cara efisien untuk proses debug masalah. Informasi tentang permintaan API seperti header, parameter bentuk, parameter kueri, variabel dinamis, dll. semuanya dapat dicatat dalam log untuk referensi nanti. Informasi ini dapat dicatat ke dalam log secara lokal di Message Processors (Apigee Edge hanya untuk Private Cloud) atau ke server pihak ketiga seperti Sumo Logic, Splunk, atau Loggly.

Antipola

Pada kode di bawah, objek httpClient dalam kebijakan JavaScript digunakan untuk mencatat data ke dalam server Sumo Logic. Artinya, proses logging sebenarnya terjadi selama pemrosesan permintaan/respons. Pendekatan ini kontraproduktif karena menambah waktu pemrosesan, sehingga meningkatkan latensi secara keseluruhan.

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

Penyebabnya adalah panggilan ke waitForComplete(), yang menangguhkan operasi pemanggil hingga proses logging selesai. Pola yang valid adalah membuat ini asinkron dengan menghilangkan panggilan ini.

Dampak

  • Mengeksekusi kode logging melalui kebijakan JavaScript akan menambah latensi permintaan API.
  • Permintaan serentak dapat memberikan tekanan pada resource pada Pemroses Pesan dan akibatnya akan berdampak buruk pada pemrosesan permintaan lainnya.

Praktik Terbaik

  • Gunakan kebijakan MessageLogging untuk mentransfer/membuat log data ke server Log atau layanan pengelolaan log pihak ketiga seperti Sumo Logic, Splunk, Loggly, dll.
  • Keuntungan terbesar dari kebijakan Logging Pesan adalah kebijakan ini dapat ditentukan dalam Alur Klien Pasca-klien, yang dijalankan setelah respons dikirim kembali ke aplikasi klien yang meminta.
  • Menetapkan kebijakan ini dalam alur Klien Postingan akan membantu memisahkan aktivitas logging dan pemrosesan permintaan/respons sehingga menghindari latensi.
  • Jika ada persyaratan atau alasan khusus untuk melakukan logging melalui JavaScript (bukan opsi alur Klien Postingan yang disebutkan di atas), hal tersebut perlu dilakukan secara asinkron. Dengan kata lain, jika menggunakan objek httpClient, Anda harus memastikan bahwa JavaScript TIDAK mengimplementasikan waitForComplete

Bacaan lebih lanjut