คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
การแคชเป็นกระบวนการจัดเก็บข้อมูลไว้ชั่วคราวในพื้นที่เก็บข้อมูลที่เรียกว่าแคชสำหรับอนาคต ข้อมูลอ้างอิง ข้อมูลการแคชให้ประโยชน์ด้านประสิทธิภาพหลายประการเนื่องจาก
- ช่วยให้ดึงข้อมูลได้เร็วขึ้น
- ลดเวลาในการประมวลผลโดยหลีกเลี่ยงการสร้างข้อมูลซ้ำแล้วซ้ำอีก
- ป้องกันไม่ให้คำขอ API เข้าถึงเซิร์ฟเวอร์แบ็กเอนด์ ซึ่งเป็นการลดค่าใช้จ่ายใน เซิร์ฟเวอร์แบ็กเอนด์
- ทำให้ใช้ทรัพยากรของระบบ/แอปพลิเคชันได้ดียิ่งขึ้น
- ปรับปรุงเวลาตอบสนองของ API
เมื่อใดก็ตามที่เราต้องเข้าถึงข้อมูลที่ไม่เปลี่ยนแปลงบ่อยนัก เรามักจะ ขอแนะนำให้ใช้แคชเพื่อจัดเก็บข้อมูลนี้
Apigee Edge ให้คุณจัดเก็บข้อมูลในแคชขณะรันไทม์เพื่อความต่อเนื่องและรวดเร็วยิ่งขึ้น การดึงข้อมูล ฟีเจอร์แคชพร้อมให้ใช้งานผ่านนโยบาย PopulateCache นโยบาย LookupCache นโยบาย CacheateCache และนโยบาย ResponseCache
ในส่วนนี้ เรามาดูนโยบายแคชการตอบกลับกัน นโยบายแคชการตอบกลับใน Apigee Edge ช่วยให้คุณแคชการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์ได้ หากแอปพลิเคชันไคลเอ็นต์ ส่งคำขอไปยังทรัพยากรแบ็กเอนด์เดียวกันซ้ำๆ และทรัพยากรนั้นได้รับการอัปเดต เราสามารถแคชคำตอบเหล่านี้เป็นระยะๆ โดยใช้นโยบายนี้ นโยบายแคชการตอบกลับ ช่วยในการแสดงผลการตอบกลับที่แคชไว้ ซึ่งจะหลีกเลี่ยงการส่งต่อคำขอ ไปยังเซิร์ฟเวอร์แบ็กเอนด์โดยไม่จำเป็น
นโยบายแคชการตอบกลับ
- ลดจำนวนคำขอที่ไปถึงแบ็กเอนด์
- ลดแบนด์วิดท์ของเครือข่าย
- ปรับปรุงประสิทธิภาพและเวลาในการตอบสนองของ API
ลาย Antipattern
นโยบาย ResponseCache ให้คุณแคชการตอบกลับ HTTP กับรหัสสถานะที่เป็นไปได้ โดยค่าเริ่มต้น ซึ่งหมายความว่าระบบสามารถแคชทั้งการตอบกลับที่สำเร็จและข้อผิดพลาดได้
ตัวอย่างนโยบายแคชการตอบกลับที่มีการกำหนดค่าเริ่มต้นมีดังนี้
<!-- /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>
นโยบายแคชการตอบกลับจะแคชการตอบกลับที่มีข้อผิดพลาดเป็นค่าเริ่มต้น การกำหนดค่า อย่างไรก็ตาม เราไม่แนะนำให้ใช้แคชการตอบกลับโดยไม่มีข้อผิดพลาด จะพิจารณาผลกระทบที่ไม่พึงประสงค์ เนื่องจาก:
- สถานการณ์ 1: ความล้มเหลวเกิดขึ้นชั่วคราวและไม่ทราบช่วงเวลา
อาจยังคงส่งการตอบกลับข้อผิดพลาด
เนื่องจากการแคชหลังจากที่ปัญหาได้รับการแก้ไขแล้ว
หรือ
- สถานการณ์ 2: ความล้มเหลวจะสังเกตเห็นเป็นระยะเวลาหนึ่ง เราจะต้องแก้ไขโค้ดเพื่อหลีกเลี่ยงการแคชคำตอบเมื่อแก้ไขปัญหาแล้ว
เรามาอธิบายเรื่องนี้โดยดู 2 สถานการณ์นี้อย่างละเอียดมากขึ้นกัน
สถานการณ์ที่ 1: แบ็กเอนด์/ทรัพยากรล้มเหลวชั่วคราว
พิจารณาว่าความล้มเหลวในเซิร์ฟเวอร์แบ็กเอนด์เกิดจากสาเหตุใดสาเหตุหนึ่งต่อไปนี้
- การขัดข้องของเครือข่ายชั่วคราว
- เซิร์ฟเวอร์แบ็กเอนด์ไม่ว่างมากและไม่สามารถตอบสนองต่อคำขอสำหรับ มหัพภาค
- ทรัพยากรแบ็กเอนด์ที่ขออาจถูกนำออก/ไม่สามารถใช้งานได้เป็นระยะเวลาหนึ่ง
- เซิร์ฟเวอร์แบ็กเอนด์ตอบสนองช้าเนื่องจากมีเวลาประมวลผลสูงเป็นระยะเวลาชั่วคราว อื่นๆ
ในกรณีเหล่านี้ ความล้มเหลวอาจเกิดขึ้นได้โดยไม่ทราบระยะเวลา เราจึงอาจเริ่ม ได้รับคำตอบที่ประสบความสำเร็จ หากเราแคชการตอบกลับข้อผิดพลาด เราอาจส่ง การตอบกลับข้อผิดพลาดไปยังผู้ใช้ แม้ว่าปัญหาของเซิร์ฟเวอร์แบ็กเอนด์จะได้รับการแก้ไขแล้ว
สถานการณ์ที่ 2: ความล้มเหลวของแบ็กเอนด์/ทรัพยากรที่ยืดขยายหรือแก้ไข
เราทราบว่าความล้มเหลวในแบ็กเอนด์เป็นระยะเวลาหนึ่ง ตัวอย่างเช่น คุณทราบว่า:
- ทรัพยากรแบ็กเอนด์ที่เฉพาะเจาะจงจะใช้งานไม่ได้เป็นเวลา 1 ชั่วโมง
หรือ
- เซิร์ฟเวอร์แบ็กเอนด์ถูกนำออก/ไม่พร้อมใช้งานเป็นเวลา 24 ชั่วโมงเนื่องจากเว็บไซต์ล้มเหลวอย่างกะทันหัน ปัญหาการปรับขนาด การบำรุงรักษา การอัปเกรด และอื่นๆ
เมื่อมีข้อมูลนี้ เราก็จะสามารถตั้งเวลาหมดอายุของแคชในแคชการตอบกลับได้อย่างเหมาะสม เพื่อให้ระบบไม่แคชการตอบกลับข้อผิดพลาดเป็นเวลานานขึ้น อย่างไรก็ตาม เมื่อ เซิร์ฟเวอร์/ทรัพยากรแบ็กเอนด์พร้อมใช้งานอีกครั้ง เราจะต้องแก้ไขนโยบายเพื่อหลีกเลี่ยงการแคช การตอบกลับข้อผิดพลาด ทั้งนี้เนื่องจากหากมีความล้มเหลวชั่วคราว/ครั้งเดียวจากแบ็กเอนด์ เราจะแคชการตอบกลับและจบลงด้วยปัญหาที่อธิบายในสถานการณ์ 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 จากเซิร์ฟเวอร์แบ็กเอนด์