คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
การบันทึกเป็นวิธีการแก้ปัญหาที่มีประสิทธิภาพวิธีหนึ่ง ข้อมูลเกี่ยวกับ API สามารถบันทึกคำขอ เช่น ส่วนหัว พารามิเตอร์แบบฟอร์ม พารามิเตอร์การค้นหา ตัวแปรแบบไดนามิก ฯลฯ สำหรับ สำหรับอ้างอิงในภายหลัง สามารถบันทึกข้อมูลไว้ในเครื่องบนตัวประมวลผลข้อความ (Apigee Edge สำหรับ Private Cloud เท่านั้น) หรือ ไปยังเซิร์ฟเวอร์ของบุคคลที่สาม เช่น Sumo Logic, Splunk หรือ Loggly
ลาย Antipattern
ในโค้ดด้านล่าง มีการใช้ออบเจ็กต์ 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
ตัวเลือกโฟลว์ไคลเอ็นต์ที่กล่าวถึงข้างต้น) ในกรณีนี้จะต้องทำแบบไม่พร้อมกัน กล่าวคือ
หากคุณกำลังใช้ออบเจ็กต์
httpClient
คุณก็ต้องตรวจสอบว่า JavaScript NOT ใช้waitForComplete