ด้วยการค้นพบการลงทะเบียนบริการ Eureka, Hystrix Circuit Breaker, Ribbon Service Call Balancing และศูนย์การกำหนดค่าคลัสเตอร์สปริงคลาวด์ดูเหมือนว่าเฟรมเวิร์ก Microservice เสร็จสมบูรณ์สุดท้าย แต่ไม่ท้ายสุด
Spring Cloud Zuul Routing เป็นส่วนสำคัญของสถาปัตยกรรม Microservice ที่ให้บริการขอบเช่นการกำหนดเส้นทางแบบไดนามิกการตรวจสอบความยืดหยุ่นความปลอดภัย ฯลฯ Zuul เป็นตัวโหลดบาลานซ์ตามการกำหนดเส้นทาง JVM และฝั่งเซิร์ฟเวอร์ที่ผลิตโดย Netflix
รู้เบื้องต้นเกี่ยวกับ Zuul
Zuul เล่นบทบาทของ "Gateway Intelligent Gateway" ตลอดทั้งกรอบ Microservices Spring Cloud ในอีกด้านหนึ่ง Zuul เป็นเกตเวย์การเข้าถึงซึ่งมีบทบาทของพร็อกซีย้อนกลับและเป็นทางเข้าเพียงอย่างเดียวสำหรับผู้บริโภคภายนอกเพื่อขอบริการภายใน ในทางกลับกัน Zuul ยังมีฟังก์ชั่นการกรอง โดยการฉีดกฎตัวกรองที่รันไทม์สามารถตระหนักถึงการตรวจสอบสิทธิ์ของผู้ใช้การกำหนดเส้นทางแบบไดนามิกการเปิดตัวสีเทาการทดสอบ A/B การ จำกัด การ จำกัด ปัจจุบันและฟังก์ชั่นอื่น ๆ
ฟังก์ชั่นส่วนใหญ่ของ Zuul เสร็จสมบูรณ์ผ่านฟังก์ชั่นการกรอง Zuul สามารถให้การกรองมาตรฐานสี่ประเภทดังแสดงในรูปด้านล่าง:
1) ก่อน: กฎการกรองทำงานก่อนกำหนดเส้นทาง คุณสามารถใช้ตัวกรอง "pre" เพื่อให้ได้การรับรองความถูกต้องของผู้ใช้บันทึกการร้องขอบันทึก ฯลฯ ;
2) การกำหนดเส้นทาง: กฎการกรองมีผลเมื่อกำหนดเส้นทาง การกำหนดเส้นทางแบบไดนามิก, การเปิดตัวสีเทา, การทดสอบ A/B, การ จำกัด การโหลดกระแสไฟฟ้า ฯลฯ สามารถนำมาใช้เพื่อให้ได้การกำหนดเส้นทางแบบไดนามิกการเปิดตัวสีเทาและอื่น ๆ
3) โพสต์: กฎการกรองมีผลหลังจากการกำหนดเส้นทาง ตัวกรอง "โพสต์" สามารถใช้ในการรวบรวมสถิติและตัวชี้วัดเขียนไมโครไซต์ที่สอดคล้องกันไปยังการตอบสนอง HTTP และส่งกลับไปยังผู้บริโภคบริการ
4) ข้อผิดพลาด: มันจะเกิดขึ้นเมื่อเกิดข้อผิดพลาดในระหว่างกระบวนการกำหนดเส้นทางของกฎการกรอง คุณสามารถใช้ตัวกรองข้อผิดพลาดเพื่อบันทึกบันทึกข้อผิดพลาดและดำเนินการประมวลผลข้อผิดพลาดที่สอง ฯลฯ
ส่งข้อความระหว่างตัวกรองด้วย requestcontext เนื้อหาที่เก็บไว้ใน RequestContext รวมถึงที่อยู่เป้าหมายการกำหนดเส้นทางข้อมูลข้อผิดพลาดข้อมูลคำขอข้อมูลการตอบกลับ ฯลฯ กฎการกรองของ Zuul สามารถเขียนด้วยภาษาที่ใช้ JVM รวมถึง Java, Python, Groovy ฯลฯ
1. ตัวอย่าง Zuul
จากการสาธิตก่อนหน้านี้เราจะแสดงให้เห็นถึงบริการ Zuul Gateway
1. สร้างคลาสเกตเวย์
@enablezuulproxy @springcloudapplication // รวม @springbootapplication, @enablecoverycovery, @enablecircuitbreaker คลาสสาธารณะ Zuulapplication -
2. เพิ่มคุณสมบัติการกำหนดค่าคุณสมบัติ
Spring.application.name = Api-Gateway Server.port = 5555 zuul.routes.api-a.path =/api-a/** zuul.routes.api-a.serviceid = compute-service zuul.routes.api-b.path =/api-b/** Eureka.client.serviceurl.defaultzone = http: // localhost: 1111/Eureka/
นอกจากนี้ยังชี้ไปที่ที่อยู่ศูนย์ลงทะเบียนบริการยูเรก้า, API-A.ServiceID, B-ServiceID Point ไปยังชื่อผู้ให้บริการ
3. เอฟเฟกต์การเข้าถึง
ในขั้นต้นอินสแตนซ์บริการคำนวณ-บริการถูกเข้าถึงโดยตรงผ่าน http: // compute-service/add? a = 10 & b = 20 ลิงก์ ตอนนี้คุณสามารถเข้าถึงบริการคำนวณได้โดยตรงโดย LocalHost: 5555/API-A/ADD? A = 1 & B = 2 ที่อยู่เกตเวย์ ในทำนองเดียวกัน Zuul Gateway ยังมีฟังก์ชั่นการปรับสมดุลการโหลดบริการส่งคำขอทั้งหมดไปยังอินสแตนซ์บริการบริการ
2. เกตเวย์คืออะไร? ทำไมคุณต้องใช้เกตเวย์?
ผ่านรูปด้านบนอินเทอร์เฟซ API จะสัมผัสโดยตรงกับผู้โทรบริการโดยไม่มีเกตเวย์ เมื่อจำนวนผู้โทรเพิ่มขึ้นผู้โทรธุรกิจที่แตกต่างกันจะแตกต่างกันและสิทธิ์การเข้าถึงที่กำหนดเองการตรวจสอบและ logics อื่น ๆ จะถูกเพิ่มเข้ามา หลังจากเพิ่ม API Gateway ผนังจะถูกสร้างขึ้นระหว่างผู้โทรบุคคลที่สามและผู้ให้บริการ ผนังนี้สื่อสารโดยตรงกับผู้โทรเพื่อควบคุมการอนุญาตจากนั้นคำขอจะสมดุลกับเซิร์ฟเวอร์แบ็กเอนด์ เช่นเดียวกับที่ไม่จำเป็นต้องเข้าถึงวิธีการเพิ่มของบริการคำนวณโดยตรงคำขอจะถูกส่งผ่านไปยังอินสแตนซ์บริการผ่านลิงก์ API-A/ADD Zuul เป็นเกตเวย์ API ที่ให้การปรับสมดุลโหลดพร็อกซีย้อนกลับและการรับรองความถูกต้องอนุญาต
เช่นเดียวกับ Nginx การเพิ่มกำแพงป้องกันที่ส่วนหน้าของบริการแอปพลิเคชันการปรับสมดุลโหลดของ Zuul สำหรับการแจกจ่ายคำขอไปยังบริการหรืออินสแตนซ์บริการในคลัสเตอร์ ริบบิ้นที่แนะนำก่อนหน้านี้ยังมุ่งเน้นไปที่ฟังก์ชั่นโหลดบริการซึ่งมีวัตถุประสงค์เพื่อให้ผู้บริโภคบริการแจกจ่ายคำขอการโทรไปยังอินสแตนซ์การให้บริการเฉพาะ ทั้งสองเป็นโหลดบาลานซ์ซึ่งดำเนินการจริงในระดับต่าง ๆ ของระบบ
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น