วิธีสร้าง Microservice Ecosystem ด้วย API Gateway, Cloud Config และ Zipkin Distributed Tracing

May 01 2023
บทความนี้จะสอนวิธีสร้างไมโครเซอร์วิสด้วย Spring Boot 3 และคอมโพเนนต์ Spring Cloud Microservice เป็นรูปแบบสถาปัตยกรรมที่จัดโครงสร้างแอปพลิเคชันเป็นชุดของบริการขนาดเล็ก อิสระ และเชื่อมโยงกันอย่างหลวมๆ

บทความนี้จะสอนวิธีสร้างไมโครเซอร์วิสด้วย Spring Boot 3 และคอมโพเนนต์ Spring Cloud

Microserviceเป็นรูปแบบสถาปัตยกรรมที่จัดโครงสร้างแอปพลิเคชันเป็นชุดของบริการขนาดเล็ก อิสระ และเชื่อมโยงกันอย่างหลวมๆ บริการแต่ละรายการในแอปพลิเคชันที่ใช้ไมโครเซอร์วิสได้รับการออกแบบเพื่อดำเนินการตามความสามารถทางธุรกิจที่เฉพาะเจาะจง และสามารถพัฒนา ปรับใช้ และจัดการได้อย่างอิสระ บริการเหล่านี้สื่อสารระหว่างกันผ่าน API หรือโปรโตคอลที่กำหนดไว้อย่างดี

ในการใช้สถาปัตยกรรม microservice ข้างต้น จำเป็นต้องใช้ Eureka Server, API Gateway , Spring Cloud Configและ Zipkin หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้จะกล่าวถึงในรายละเอียดพร้อมตัวอย่างด้านล่าง

สร้างเซิร์ฟเวอร์ยูเรก้า:

Eureka Server เป็นรีจิสทรีของบริการที่ใช้สำหรับค้นหาและค้นหาบริการในระบบแบบกระจาย ลูกค้าของ Eureka ลงทะเบียนกับเซิร์ฟเวอร์และสามารถค้นหาและสื่อสารกับบริการอื่น ๆ ในรีจิสทรีโดยไม่ต้องอ้างอิงชื่อโฮสต์และข้อมูลพอร์ตภายในบริการ

เพิ่มการพึ่งพาเซิร์ฟเวอร์ Eureka ใน POM.XML:

กำหนดค่าไฟล์ appication.yaml:

เราจำเป็นต้องระบุหมายเลขพอร์ตสำหรับแอปพลิเคชันนี้เพื่อใช้ พอร์ตเริ่มต้นสำหรับเซิร์ฟเวอร์ Spring Cloud Eureka คือ8761เราไม่จำเป็นต้องลงทะเบียนเซิร์ฟเวอร์เองกับ Eureka ดังนั้นเราจะตั้งค่าeureka.client.register-with-eurekaค่าเป็นเท็จและตั้ง ค่า eureka.client.fetch- registry เป็นเท็จ

เพิ่มคำอธิบายประกอบ @EnableEurekaServerในคลาส ServirceRegistryApplication เพื่อตั้งค่านี้เป็นเซิร์ฟเวอร์ Eureka

ตอนนี้เริ่มเรียกใช้แอปพลิเคชันและเรียกใช้http://localhost:8761/บนเบราว์เซอร์ แดชบอร์ด Eureka จะโหลด ขณะนี้ไม่มีการลงทะเบียนอินสแตนซ์กับ Eureka

สร้าง Discovery Service (แผนก-บริการ):

เพิ่มการพึ่งพาไคลเอนต์ Eureka ใน POM.XML:

เพิ่มคำอธิบายประกอบ @EnableDiscoveryClientในคลาส DepartmentServiceApplication เพื่อตั้งค่าเป็นเซิร์ฟเวอร์ Eureka

กำหนดค่าไฟล์ appication.yaml:

ตอนนี้เริ่มเรียกใช้แอปพลิเคชันแผนกบริการและเรียกใช้http://localhost:8761/บนเบราว์เซอร์ แอปพลิเคชันบริการแผนกควรแสดงในแดชบอร์ดของยูเรก้า

API เกตเวย์

API Gatewayมีหน้าที่รับผิดชอบในการกำหนดเส้นทางคำขอ การจัดองค์ประกอบ และการแปลโปรโตคอล คำขอทั้งหมดจากลูกค้าจะต้องผ่าน API Gateway ก่อน จากนั้นจะส่งคำขอไปยังไมโครเซอร์วิสที่เหมาะสม API Gatewayมักจะจัดการคำขอโดยการเรียกใช้ไมโครเซอร์วิสหลายตัวและรวบรวมผลลัพธ์

โดยมีจุดเริ่มต้นเดียวสำหรับแอปพลิเคชันไคลเอนต์เพื่อเข้าถึงบริการแบ็กเอนด์หลายรายการ

การใช้เกตเวย์ API:

เพิ่ม การขึ้นต่อกัน ของสปริงคลาวด์เกตเวย์ใน POM.XML:

กำหนดค่าไฟล์ application.yaml:

เมื่อไคลเอนต์ส่งคำขอไปยังเกตเวย์ API ไคลเอ็นต์ จะค้นหา IP และ PORT ของบริการที่ถูกต้องโดยใช้รีจิสทรีของบริการเพื่อสื่อสารและกำหนดเส้นทางคำขอ

  • id — นี่เป็นเพียงการระบุเส้นทางเท่านั้น
  • URI — ที่นี่ เราสามารถใช้ URL http://localhost:808 1หรือ lb://DEPARTMENT-SERVICE ก็ได้ แต่ถ้าเราจำเป็นต้องใช้โหลดบาลานซ์ในตัวบนเซิร์ฟเวอร์ Netflix Eureka เราควรใช้ lb://DEPARTMENT-SERVICE จากนั้นรีจิสทรี API จะเข้าควบคุมคำขอและแสดงปลายทางคำขอโหลดบาลานซ์ไปยังเกตเวย์ API
  • เพรดิเคต — ที่นี่เราสามารถกำหนดเส้นทางได้หลายเส้นทางเพื่อระบุปลายทางการกำหนดเส้นทางที่ถูกต้อง เช่น:- หากเกตเวย์ API ได้รับและร้องขอเช่นhttp://localhost:8060/department/ 1เกตเวย์นั้นจะถูกส่งไปยังhttp://localhost:8081/department/ 1

การทดสอบการใช้งานเกตเวย์ API โดยใช้บุรุษไปรษณีย์:

Department Service ทำงานบนพอร์ต: http://localhost:8081

บริการเกตเวย์ API ทำงานบนพอร์ต: http://localhost:8060

ฉันกำลังบันทึกข้อมูลผ่านพอร์ตแผนกบริการ

ตอนนี้ฉันกำลังดึงข้อมูลแผนกตามรหัสแผนกผ่าน api-gateway

API Gateway กำหนดเส้นทางคำขอจากhttp://localhost:8060/departments/1 ไปยังhttp://localhost:8081/departments/1

API Gateway กำหนดเส้นทางคำขอจากhttp://localhost:8060/departments/with-employees ไปยังhttp://localhost:8081/departments/with-employees

การกำหนดค่าคลาวด์แบบรวมศูนย์

Spring Cloud Config ให้การจัดการการกำหนดค่าแบบรวมศูนย์สำหรับแอปพลิเคชันแบบกระจาย ช่วยให้คุณสามารถจัดเก็บข้อมูลการกำหนดค่าในตำแหน่งส่วนกลาง เช่น ที่เก็บ Gitและจัดเตรียม UI และ API ของเว็บสำหรับการเข้าถึงและจัดการข้อมูลการกำหนดค่า

ด้วย Spring Cloud Config คุณสามารถกำหนดโปรไฟล์การกำหนดค่าสำหรับสภาพแวดล้อมต่างๆ เช่น การพัฒนา การจัดเตรียม และการผลิต และจัดการแยกกันได้ จากนั้นแอปพลิเคชันสามารถดึงข้อมูลการกำหนดค่าจากที่เก็บส่วนกลางตามโปรไฟล์

เก็บคุณสมบัติทั่วไปทั้งหมดของฉันไว้ในไฟล์ git repository application.properties

โปรดอ่านบทความนี้: การรวมศูนย์การกำหนดค่าสำหรับไมโครเซอร์วิสด้วย Spring Cloud Config

คำอธิบายโดยละเอียดและการนำไปใช้มีอยู่ในบทความด้านบน

Zipikin กระจายการติดตาม

Distributed Tracing มีความสำคัญต่อการแก้ปัญหาและทำความเข้าใจไมโครเซอร์วิส มีประโยชน์มากเมื่อเราต้องการติดตามคำขอที่ส่งผ่านไมโครเซอร์วิสหลายตัว สามารถใช้การติดตามแบบกระจายเพื่อวัดประสิทธิภาพของไมโครเซอร์วิสได้

ไม่ใช่เรื่องง่ายที่จะระบุว่าไมโครเซอร์วิสใดล้มเหลวหรือมีปัญหาด้านประสิทธิภาพ เมื่อใดก็ตามที่มีการเรียกใช้บริการหลายครั้งภายในคำขอเดียว

Zipkin ทำงานโดยการติดตามการไหลของคำขอผ่านระบบแบบกระจาย และรวบรวมข้อมูลเวลาในแต่ละจุดในเส้นทางคำขอ เมื่อมีการร้องขอ จะมีการสร้างตัวระบุเฉพาะและแนบไปกับคำขอเมื่อมันไหลผ่านระบบ แต่ละบริการที่จัดการคำขอจะเพิ่มข้อมูลเวลาให้กับตัวระบุ ช่วยให้คุณสามารถติดตามการไหลของคำขอผ่านระบบได้

เพิ่มการพึ่งพาที่จำเป็นใน POM.XML ให้กับไมโครเซอร์วิสทั้งหมด:

กำหนดค่าไฟล์ application.properties สำหรับ microservices ทั้งหมด:

ติดตั้งเซิร์ฟเวอร์ Zipkin และเรียกใช้คำสั่งด้านล่างในพรอมต์คำสั่ง:

เปิด URL:http://localhost:9411/zipkinในเบราว์เซอร์ โฟลว์ของ API ที่ดำเนินการทั้งหมดควรแสดงในแดชบอร์ด Zipkin

ตอนนี้คุณได้เรียนรู้วิธีสร้างไมโครเซอร์วิสด้วย API Gateway, Cloud Config และ Zipkin Distributed Tracing แล้ว

หมายเหตุ: หากคุณต้องการโค้ด GitHub ที่ใช้งานได้ของการใช้งานตั้งแต่ต้นจนจบ โปรดติดตามฉันและแสดงความคิดเห็น ID อีเมลของคุณ ฉันจะส่งลิงค์ซอร์สโค้ดไปยังอีเมลของคุณ

javinpaul Domenico Nicoli Java Techie Trey Huffine Arslan Ahmad Soma Mehmet Ozkaya ทีมการศึกษา