คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
การกำหนดค่า TargetEndpoint จะกำหนดวิธีที่ Apigee Edge เชื่อมต่อกับ บริการแบ็กเอนด์หรือ API ส่งคำขอและรับการตอบกลับไปยัง/จาก บริการแบ็กเอนด์ บริการแบ็กเอนด์อาจเป็นเซิร์ฟเวอร์ HTTP/HTTPS, NodeJS หรือเป้าหมายที่โฮสต์ก็ได้
สามารถเรียกใช้บริการแบ็กเอนด์ใน TargetEndpoint ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- กำหนด URL โดยตรงไปยังเซิร์ฟเวอร์ HTTP หรือ HTTPS
- ScriptTarget ไปยังสคริปต์ Node.js ที่โฮสต์บน Edge
- HostedTarget ไปยัง NodeJS ที่ทำให้ใช้งานได้ในสภาพแวดล้อมเป้าหมายที่โฮสต์
- การกำหนดค่า TargetServer
ในทำนองเดียวกัน คุณสามารถใช้นโยบายคำขอราคาเสนอบริการเพื่อเรียกบริการภายนอก จากขั้นตอนพร็อกซี API นโยบายนี้รองรับการกำหนด URL เป้าหมาย HTTP/HTTPS ในนโยบายโดยตรงหรือใช้การกำหนดค่า TargetServer
การกำหนดค่า TargetServer
การกำหนดค่า TargetServer จะแยก URL ปลายทางที่เป็นรูปธรรมออกจาก การกำหนดค่า TargetEndpoint หรือในนโยบายคำขอราคาเสนอบริการ เซิร์ฟเวอร์เป้าหมายคือ มีการอ้างอิงตามชื่อแทนที่จะเป็น URL ใน TargetEndpoint การกำหนดค่า TargetServer จะมีชื่อโฮสต์ของบริการแบ็กเอนด์ หมายเลขพอร์ต และรายละเอียดอื่นๆ
ตัวอย่างการกำหนดค่า TargetServer มีดังนี้
<TargetServer name="target1"> <Host>www.mybackendservice.com</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
TargetServer ช่วยให้คุณกำหนดค่าที่แตกต่างกันสำหรับแต่ละสภาพแวดล้อมได้ คุณกำหนดค่านโยบายคำขอราคาเสนอ TargetEndpoint/Service ด้วย TargetServers อย่างน้อย 1 รายการที่มีชื่อได้ โดยใช้ LoadBalancer การรองรับการจัดสรรภาระงานในตัวจะช่วยยกระดับความพร้อมใช้งาน API และเฟลโอเวอร์ในอินสแตนซ์เซิร์ฟเวอร์แบ็กเอนด์ที่กำหนดค่าไว้
ตัวอย่างการกำหนดค่า TargetEndpoint โดยใช้ TargetServers มีดังนี้
<TargetEndpoint name="default"> <HTTPTargetConnection>> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
MaxFailures
การกำหนดค่า MaxFailures
ระบุจำนวนสูงสุดของคำขอที่ล้มเหลว
ไปยังเซิร์ฟเวอร์เป้าหมาย หลังจากนั้นเซิร์ฟเวอร์เป้าหมายจะถูกทำเครื่องหมายเป็นหยุดทำงานและลบออก
ไม่ให้หมุนเวียนสำหรับคำขอต่อๆ มาทั้งหมด
ตัวอย่างการกำหนดค่าที่ระบุ MaxFailures
มีดังนี้
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
ในตัวอย่างข้างต้น หากคำขอติดต่อกัน 5 ครั้งล้มเหลวสำหรับ "target1" ตามด้วย "target1" จะถูกลบออกจากการหมุนเวียน และคำขอที่ตามมาทั้งหมดจะส่งไปยัง target2 เท่านั้น
ลาย Antipattern
การมี TargetServer เดี่ยวในการกำหนดค่า LoadBalancer
ของพารามิเตอร์
ตั้งค่านโยบายปลายทางปลายทางหรือนโยบายข้อความไฮไลต์บริการที่มีการตั้งค่า MaxFailures
เป็น
ไม่แนะนำให้ใช้ค่าที่ไม่ใช่ 0 เนื่องจากอาจมีผลกระทบที่ไม่พึงประสงค์
ลองดูตัวอย่างการกำหนดค่าต่อไปนี้ที่มี TargetServer เดียว
ชื่อ "target1" โดยตั้งค่า MaxFailures
เป็น 5 (ค่าที่ไม่ใช่ 0):
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection>
หากคำขอที่ส่งไปยัง TargetServer "target1" ล้มเหลว 5 ครั้ง (จำนวนที่ระบุใน MaxFailures
)
นำ TargetServer ออกจากการหมุนเวียนแล้ว เนื่องจากไม่มี TargetServer อื่นให้ตรวจสอบแล้ว
คำขอที่ตามมาทั้งหมดที่ส่งไปยังพร็อกซี API ที่มีการกำหนดค่านี้จะล้มเหลว
ข้อผิดพลาด 503 Service Unavailable
รายการ
แม้ว่า TargetServer "target1" กลับสู่สถานะปกติและสามารถ การส่งการตอบกลับที่สำเร็จ คำขอไปยังพร็อกซี API จะยังคง แสดงข้อผิดพลาด 503 เนื่องจาก Edge ไม่ได้ใส่ TargetServer โดยอัตโนมัติ หมุนเวียนไปเรื่อยๆ แม้ว่าเป้าหมายจะพร้อมใช้งานอีกครั้ง วิธีแก้ไขปัญหานี้ ต้องทำให้พร็อกซี API ใช้งานได้อีกครั้งสำหรับ Edge เพื่อกำหนด TargetServer กลับเข้าสู่การหมุนเวียน
หากใช้การกำหนดค่าเดียวกันในนโยบายคำขอราคาเสนอบริการ API คำขอจะได้รับ 500 เกิดข้อผิดพลาดหลังคำขอที่ส่งไปยัง TargetServer "target1" ล้มเหลว 5 ครั้ง
ผลกระทบ
การใช้ TargetServer รายการเดียวในการกำหนดค่า LoadBalancer
ของ
นโยบายปลายทางปลายทางหรือนโยบายคำขอราคาเสนอบริการที่มีการตั้งค่า MaxFailures
เป็นสาเหตุที่ไม่ใช่ 0
- คำขอ API จะล้มเหลวโดยมีข้อผิดพลาด 503/500 อย่างต่อเนื่อง (หลังจากที่คำขอล้มเหลวสำหรับ MaxFailures ครั้งแล้ว) จนกระทั่งพร็อกซี API ใช้งานได้อีกครั้ง
- การหยุดทำงานที่นานขึ้นเนื่องจากเป็นการดำเนินการที่ยุ่งยากและอาจใช้เวลามากขึ้นในการวินิจฉัยสาเหตุของปัญหานี้ (โดยไม่ทราบข้อมูลเกี่ยวกับรูปแบบลดลงนี้มาก่อน)
แนวทางปฏิบัติแนะนำ
- มี TargetServer มากกว่า 1 รายการในการกำหนดค่า
LoadBalancer
เพื่อความพร้อมใช้งานที่สูงขึ้น กำหนด Health Monitor เสมอเมื่อ
MaxFailures
มีค่าที่ไม่ใช่ 0 ระบบจะนำเซิร์ฟเวอร์เป้าหมายออกจากการหมุนเวียนเมื่อ จำนวนความล้มเหลวถึงจำนวนที่ระบุไว้ในMaxFailures
การมี HealthMonitor ช่วยให้ TargetServer กลับมาหมุนเวียนได้ตามปกติ ทันทีที่เซิร์ฟเวอร์เป้าหมายพร้อมใช้งานอีกครั้ง หมายความว่ามี ไม่จำเป็นต้องทำให้พร็อกซีใช้งานได้อีกครั้งเพื่อให้แน่ใจว่ามีการตรวจสอบประสิทธิภาพการทำงานกับหมายเลขพอร์ตเดียวกับที่ Edge ใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์เป้าหมาย Apigee จึงขอแนะนำให้คุณละ
<Port>
องค์ประกอบย่อยใต้<TCPMonitor>
เว้นแต่จะ แตกต่างจากพอร์ต TargetServer โดยค่าเริ่มต้น<Port>
จะเหมือนกับพอร์ต TargetServerตัวอย่างการกำหนดค่าด้วย HealthMonitor
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <Server name="target2" /> <MaxFailures>5</MaxFailures> </LoadBalancer> <Path>/test</Path> <HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <TCPMonitor> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> </TCPMonitor> </HealthMonitor> </HTTPTargetConnection> </TargetEndpoint>
หากมีข้อจำกัดบางอย่าง เช่น TargetServer เพียงรายการเดียว และหาก HealthMonitor ไม่ได้ใช้ ดังนั้นอย่าระบุ
MaxFailures
ในการกำหนดค่าLoadBalancer
ค่าเริ่มต้นของ MaxFailures คือ 0 ซึ่งหมายความว่า Edge ทุกครั้ง จะพยายามเชื่อมต่อกับเป้าหมายสําหรับคําขอแต่ละรายการและไม่นําเซิร์ฟเวอร์เป้าหมายออกจากการหมุนเวียนเลย