Tracing เป็นอีกเรื่องหนึ่งที่ service หรือระบบงานต่าง ๆ ต้องมีเสมอ
และมันมีประโยชน์ต่อระบบและทีมพัฒนาอย่างมาก
แต่เราพบว่าระบบงานส่วนใหญ่ไม่มี หรือ มีน้อยมาก ๆ
ดังนั้นเรามาลองสร้างระบบงานที่มีการ tracing การทำงานของระบบ

สิ่งที่ใช้ในการพัฒนาประกอบไปด้วย

  • Tracing server ใช้ Zipkin
  • พัฒนา Service ด้วย Spring Boot และ Spring Cloud
  • สร้าง Service 1 และ Service 2
  • โดยที่ Service1 จะเรียกใช้งาน Service 2

โครงสร้างของระบบงานที่ต้องการเป็นดังนี้

มาเริ่มพัฒนาระบบงานกันดีกว่า

1. สร้าง Zipkin service

ขั้นตอนการพัฒนา Zipkin service เป็นดังนี้

ทำการสร้าง Zipkin Service ด้วย Spring Boot

จากนั้นทำการ package และ run service
โดยค่า port default ของ service คือ 8080
เข้าใช้งานดังนี้ ซึ่งบอกว่า Zipkin server พร้อมใช้งานแล้ว

2. สร้าง Service 2

ความต้องการของ service 2 คือ

  • พัฒนา service ด้วย Spring Boot
  • มี endpoint ชื่อว่า /sleep/[time]

ขั้นตอนการพัฒนา Service 2 เป็นดังนี้

ขั้นตอนที่ 1 สร้าง Service
จะมี annotation NewSpan สำหรับกำหนดให้สร้างกลุ่มการทำงานใหม่
ที่จะจัดเก็บใน Zipkin
จากตัวอย่างถ้าไม่กำหนดชื่อ จะเป็นชื่อของ service คือ service2 นั่นเอง

ขั้นตอนที่ 2 ทำการ configuration URL ของ Zipkin server ในไฟล์ application.properties

และกำหนดชื่อของ service ไว้ในไฟล์ bootstrap.properties

จากนั้นทำการ package และ run service
เมื่อเราทำการเรียกใช้งาน endpoint ของ service 2 แล้ว
ข้อมูลการทำงานถูกส่งไปยัง Zipkin service ด้วย
ผลการทำงานเป็นดังนี้

เข้าไปดูรายละเอียดของแต่ละกลุ่มของ request หรือ Span

ในรายละเอียดของแต่ละ Span มันลงรายละเอียดของการทำงานเลยทีเดียว
ทั้ง class และ method

3. สร้าง Service 1 เพื่อเรียกใช้งาน Service 2

ความต้องการของ service 1 คือ

  • พัฒนา service ด้วย Spring Boot
  • มี endpoint ชื่อว่า /service1/

ขั้นตอนการพัฒนา Service 1 เป็นดังนี้

ขั้นตอนที่ 1 สร้างส่วนการเรียกใช้งาน service 2 ผ่าน Feign Client

ขั้นตอนที่ 2 สร้าง Service

ขั้นตอนที่ 3 ทำการ configuration URL ของ Zipkin server ในไฟล์ application.properties

จากนั้นทำการ package และ run service
เมื่อเราทำการเรียกใช้งาน endpoint ของ service 1 แล้ว
ข้อมูลการทำงานถูกส่งไปยัง Zipkin service ด้วย
ผลการทำงานเป็นดังนี้

เข้าไปดูรายละเอียดของแต่ละกลุ่มของ request หรือ Span

ในรายละเอียดของแต่ละ Span มันลงรายละเอียดของการทำงานเลยทีเดียว
ทั้ง class และ method

เพียงเท่านี้เราก็ได้ระบบ tracing ของ service ต่าง ๆ
ที่พัฒนาด้วย Spring Boot แล้วนะ
น่าจะช่วยทำให้นักพัฒนาเห็นการทำงานที่ชัดเจน รวมทั้งหาปัญหาได้ง่ายขึ้น

ตัวอย่าง source code อยู่ที่ Github:Up1

ขอให้สนุกกับการ coding ครับ