Antipattern: บันทึกข้อมูลไปยังเซิร์ฟเวอร์ของบุคคลที่สามโดยใช้นโยบาย JavaScript

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

การบันทึกเป็นวิธีที่มีประสิทธิภาพวิธีหนึ่งในการแก้ไขข้อบกพร่อง ระบบจะบันทึกข้อมูลเกี่ยวกับคำขอ API เช่น ส่วนหัว พารามิเตอร์แบบฟอร์ม พารามิเตอร์การค้นหา ตัวแปรแบบไดนามิก ฯลฯ เพื่อการอ้างอิงในภายหลังได้ โดยจะบันทึกข้อมูลดังกล่าวในเครื่องประมวลผลข้อความ (Apigee Edge สำหรับ Private Cloud เท่านั้น) หรือเซิร์ฟเวอร์ของบุคคลที่สาม เช่น 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
  • คำขอที่ใช้งานพร้อมกันอาจสร้างความเครียดในการใช้ทรัพยากรในเครื่องมือประมวลผลข้อความและส่งผลเสียต่อการดำเนินการตามคำขออื่นๆ ได้

แนวทางปฏิบัติแนะนำ

  • ใช้นโยบาย MessageLoking เพื่อโอน/บันทึกข้อมูลไปยังเซิร์ฟเวอร์บันทึกหรือบริการจัดการบันทึกของบุคคลที่สาม เช่น Sumo Logic, Splunk, Loggly ฯลฯ
  • ข้อดีที่สำคัญที่สุดของนโยบายการบันทึกข้อความคือสามารถกำหนดนโยบายได้ในขั้นตอนหลังไคลเอ็นต์ ซึ่งระบบจะดำเนินการหลังจากส่งการตอบกลับไปยังแอปไคลเอ็นต์ที่ส่งคำขอ
  • การกำหนดนโยบายนี้ไว้ในขั้นตอนหลังไคลเอ็นต์จะช่วยแยกกิจกรรมการบันทึกและการดำเนินการตามคำขอ/การตอบกลับเพื่อหลีกเลี่ยงความล่าช้า
  • หากมีข้อกำหนดเฉพาะหรือเหตุผลที่ต้องบันทึกผ่าน JavaScript (ไม่ใช่ตัวเลือกโฟลว์ไคลเอ็นต์ที่ระบุไว้ข้างต้น) ก็จะต้องดำเนินการแบบไม่พร้อมกัน กล่าวคือ หากคุณใช้ออบเจ็กต์ httpClient คุณจะต้องตรวจสอบว่า JavaScript ไม่ได้ไม่ได้ติดตั้งใช้งาน waitForComplete

อ่านเพิ่มเติม