คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
การแคชคือกระบวนการจัดเก็บข้อมูลชั่วคราวในพื้นที่เก็บข้อมูลที่เรียกว่าแคชเพื่อใช้อ้างอิงในอนาคต การแคชข้อมูลช่วยเพิ่มประสิทธิภาพได้อย่างมากเนื่องจาก
- ช่วยให้ดึงข้อมูลได้เร็วขึ้น
- ลดเวลาในการประมวลผลโดยหลีกเลี่ยงการสร้างข้อมูลซ้ำๆ
- ป้องกันไม่ให้คำขอ API ไปยังเซิร์ฟเวอร์แบ็กเอนด์ ซึ่งจะช่วยลดภาระงานของ เซิร์ฟเวอร์แบ็กเอนด์
- ช่วยให้ใช้ทรัพยากรของระบบ/แอปพลิเคชันได้ดียิ่งขึ้น
- ปรับปรุงเวลาตอบสนองของ API
เมื่อใดก็ตามที่เราต้องเข้าถึงข้อมูลบางอย่างบ่อยๆ ซึ่งข้อมูลนั้นไม่ได้เปลี่ยนแปลงบ่อยนัก เราขอแนะนำให้ใช้แคชเพื่อจัดเก็บข้อมูลนี้
Apigee Edge มีความสามารถในการจัดเก็บข้อมูลในแคชขณะรันไทม์เพื่อความคงทนและการดึงข้อมูลที่เร็วขึ้น ฟีเจอร์การแคชพร้อมใช้งานผ่านนโยบาย PopulateCache, LookupCache, นโยบาย InvalidateCache และนโยบาย ResponseCache
ในส่วนนี้ เราจะมาดูนโยบาย Response Cache กัน นโยบาย Response Cache ในแพลตฟอร์ม Apigee Edge ช่วยให้คุณแคชการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์ได้ หากแอปพลิเคชันไคลเอ็นต์ส่งคำขอไปยังทรัพยากรแบ็กเอนด์เดียวกันซ้ำๆ และทรัพยากรได้รับการอัปเดตเป็นระยะๆ เราสามารถแคชการตอบกลับเหล่านี้ได้โดยใช้นโยบายนี้ นโยบาย Response Cache ช่วยในการแสดงผลการตอบกลับที่แคชไว้ และหลีกเลี่ยงการส่งต่อคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์โดยไม่จำเป็น
นโยบาย Response Cache มีหน้าที่ดังนี้
- ลดจำนวนคำขอที่ส่งไปยังแบ็กเอนด์
- ลดแบนด์วิดท์เครือข่าย
- ปรับปรุงประสิทธิภาพและเวลาตอบสนองของ API
รูปแบบที่ไม่แนะนำ
นโยบาย ResponseCache ช่วยให้คุณแคชการตอบกลับ HTTP ที่มีรหัสสถานะที่เป็นไปได้ทั้งหมดได้ โดยค่าเริ่มต้น ซึ่งหมายความว่าทั้งการตอบกลับที่สำเร็จและการตอบกลับข้อผิดพลาดสามารถแคชได้
ต่อไปนี้คือตัวอย่างนโยบาย Response Cache ที่มีการกำหนดค่าเริ่มต้น
<!-- /antipatterns/examples/1-1.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache"> <DisplayName>TargetServer ResponseCache</DisplayName> <CacheKey> <Key Fragment ref="request.uri" /></CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutInSec ref="flow.variable.here">600</TimeoutInSec> </ExpirySettings> <CacheResource>targetCache</CacheResource> </ResponseCache>
นโยบาย Response Cache จะแคชการตอบกลับข้อผิดพลาดในการกำหนดค่าเริ่มต้น อย่างไรก็ตาม เราไม่แนะนำให้แคชการตอบกลับข้อผิดพลาดโดยไม่พิจารณาถึงผลกระทบที่อาจเกิดขึ้นอย่างรอบคอบ เนื่องจาก
- สถานการณ์ที่ 1: ข้อผิดพลาดเกิดขึ้นชั่วคราวเป็นระยะเวลาที่ไม่ทราบ และเรา
อาจส่งการตอบกลับข้อผิดพลาดต่อไป
เนื่องจากการแคช แม้ว่าปัญหาจะได้รับการแก้ไขแล้วก็ตาม
หรือ
- สถานการณ์ที่ 2: ข้อผิดพลาดจะเกิดขึ้นเป็นระยะเวลาหนึ่ง จากนั้นเราจะต้องแก้ไขโค้ดเพื่อหลีกเลี่ยงการแคชการตอบกลับเมื่อปัญหาได้รับการแก้ไขแล้ว
เราจะอธิบายเรื่องนี้โดยพิจารณาสถานการณ์ทั้ง 2 นี้โดยละเอียด
สถานการณ์ที่ 1: แบ็กเอนด์/ทรัพยากรขัดข้องชั่วคราว
พิจารณาว่าเซิร์ฟเวอร์แบ็กเอนด์ขัดข้องเนื่องจากสาเหตุใดสาเหตุหนึ่งต่อไปนี้
- เครือข่ายขัดข้องชั่วคราว
- เซิร์ฟเวอร์แบ็กเอนด์ทำงานหนักมากและไม่สามารถตอบสนองต่อคำขอได้ชั่วคราว
- ระบบอาจนำทรัพยากรแบ็กเอนด์ที่ขอออก/ทรัพยากรไม่พร้อมใช้งานชั่วคราว
- เซิร์ฟเวอร์แบ็กเอนด์ตอบสนองช้าเนื่องจากเวลาในการประมวลผลสูงชั่วคราว เป็นต้น
ในกรณีเหล่านี้ทั้งหมด ข้อผิดพลาดอาจเกิดขึ้นเป็นระยะเวลาที่ไม่ทราบ จากนั้นเราอาจเริ่มได้รับการตอบกลับที่สำเร็จ หากเราแคชการตอบกลับข้อผิดพลาด เราอาจส่งการตอบกลับข้อผิดพลาดไปยังผู้ใช้ต่อไป แม้ว่าปัญหาเกี่ยวกับเซิร์ฟเวอร์แบ็กเอนด์จะได้รับการแก้ไขแล้วก็ตาม
สถานการณ์ที่ 2: แบ็กเอนด์/ทรัพยากรขัดข้องเป็นเวลานานหรือเป็นระยะเวลาที่กำหนด
พิจารณาว่าเราทราบว่าแบ็กเอนด์ขัดข้องเป็นระยะเวลาที่กำหนด เช่น คุณทราบว่า
- ทรัพยากรแบ็กเอนด์ที่เฉพาะเจาะจงจะไม่พร้อมใช้งานเป็นเวลา 1 ชั่วโมง
หรือ
- ระบบนำเซิร์ฟเวอร์แบ็กเอนด์ออก/เซิร์ฟเวอร์ไม่พร้อมใช้งานเป็นเวลา 24 ชั่วโมงเนื่องจากเว็บไซต์ขัดข้องกะทันหัน, ปัญหาการปรับขนาด การบำรุงรักษา การอัปเกรด เป็นต้น
เมื่อทราบข้อมูลนี้แล้ว เราสามารถกำหนดเวลาหมดอายุของแคชได้อย่างเหมาะสมในนโยบาย Response Cache เพื่อไม่ให้แคชการตอบกลับข้อผิดพลาดเป็นเวลานาน อย่างไรก็ตาม เมื่อเซิร์ฟเวอร์/ทรัพยากรแบ็กเอนด์พร้อมใช้งานอีกครั้ง เราจะต้องแก้ไขนโยบายเพื่อหลีกเลี่ยงการแคชการตอบกลับข้อผิดพลาด เนื่องจากหากเซิร์ฟเวอร์แบ็กเอนด์ขัดข้องชั่วคราว/เพียงครั้งเดียว เราจะแคชการตอบกลับและจะพบปัญหาตามที่อธิบายไว้ในสถานการณ์ที่ 1 ด้านบน
ผลกระทบ
- การแคชการตอบกลับข้อผิดพลาดอาจทำให้ระบบส่งการตอบกลับข้อผิดพลาดแม้ว่าปัญหาในเซิร์ฟเวอร์แบ็กเอนด์จะได้รับการแก้ไขแล้วก็ตาม
- ผู้ใช้อาจใช้ความพยายามอย่างมากในการแก้ปัญหาโดยไม่ทราบว่า สาเหตุเกิดจากการแคชการตอบกลับข้อผิดพลาดจากเซิร์ฟเวอร์แบ็กเอนด์
แนวทางปฏิบัติแนะนำ
- อย่าจัดเก็บการตอบกลับข้อผิดพลาดในแคชการตอบกลับ ตรวจสอบว่าได้ตั้งค่าองค์ประกอบ
<ExcludeErrorResponse>เป็นtrueใน นโยบาย ResponseCache เพื่อป้องกันไม่ให้แคชการตอบกลับข้อผิดพลาดตามที่แสดงในข้อมูลโค้ดด้านล่าง การกำหนดค่านี้จะแคชเฉพาะการตอบกลับสำหรับรหัสความสำเร็จเริ่มต้น 200 ถึง 205 (ยกเว้นกรณีที่แก้ไขรหัสความสำเร็จ)<!-- /antipatterns/examples/1-2.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache"> <DisplayName>TargetServerResponseCache</DisplayName> <CacheKey> <KeyFragment ref="request.uri" /> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutinSec ref="flow.variable.here">600</TimeoutinSec> </ExpirySettings> <CacheResource>targetCache</CacheResource> <ExcludeErrorResponse>true</ExcludeErrorResponse> </ResponseCache>
- หากคุณต้องการแคชการตอบกลับข้อผิดพลาดด้วยเหตุผลบางประการ คุณ
สามารถกำหนดระยะเวลาสูงสุด/ระยะเวลาที่แน่นอนที่อาจพบข้อผิดพลาด (หาก
เป็นไปได้) ได้ดังนี้
- กำหนดเวลาหมดอายุอย่างเหมาะสมเพื่อให้แน่ใจว่าคุณจะไม่แคชการตอบกลับข้อผิดพลาด นานกว่าระยะเวลาที่อาจพบข้อผิดพลาด
- ใช้นโยบาย ResponseCache เพื่อแคชการตอบกลับข้อผิดพลาดโดยไม่มีองค์ประกอบ
<ExcludeErrorResponse>
ทำเช่นนี้ ก็ต่อเมื่อคุณแน่ใจว่าเซิร์ฟเวอร์แบ็กเอนด์ขัดข้องไม่นาน/ชั่วคราว
- Apigee ไม่แนะนำให้แคชการตอบกลับ 5xx จากเซิร์ฟเวอร์แบ็กเอนด์