Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

สร้างระบบ Distributed Tracing ของระบบที่พัฒนาด้วย Spring Boot

$
0
0

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 [gist id="0dc2fa11d8cf397b33a105faa24f99ab" file="1.java"] จากนั้นทำการ 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 นั่นเอง [gist id="0dc2fa11d8cf397b33a105faa24f99ab" file="2.java"] ขั้นตอนที่ 2 ทำการ configuration URL ของ Zipkin server ในไฟล์ application.properties [gist id="0dc2fa11d8cf397b33a105faa24f99ab" file="2.properties"] และกำหนดชื่อของ service ไว้ในไฟล์ bootstrap.properties [gist id="0dc2fa11d8cf397b33a105faa24f99ab" file="bootstrap2.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 [gist id="0dc2fa11d8cf397b33a105faa24f99ab" file="Service2Client.java"] ขั้นตอนที่ 2 สร้าง Service [gist id="0dc2fa11d8cf397b33a105faa24f99ab" file="service1.java"] ขั้นตอนที่ 3 ทำการ configuration URL ของ Zipkin server ในไฟล์ application.properties [gist id="0dc2fa11d8cf397b33a105faa24f99ab" file="2.properties"] จากนั้นทำการ package และ run service เมื่อเราทำการเรียกใช้งาน endpoint ของ service 1 แล้ว ข้อมูลการทำงานถูกส่งไปยัง Zipkin service ด้วย ผลการทำงานเป็นดังนี้ เข้าไปดูรายละเอียดของแต่ละกลุ่มของ request หรือ Span ในรายละเอียดของแต่ละ Span มันลงรายละเอียดของการทำงานเลยทีเดียว ทั้ง class และ method เพียงเท่านี้เราก็ได้ระบบ tracing ของ service ต่าง ๆ ที่พัฒนาด้วย Spring Boot แล้วนะ น่าจะช่วยทำให้นักพัฒนาเห็นการทำงานที่ชัดเจน รวมทั้งหาปัญหาได้ง่ายขึ้น ตัวอย่าง source code อยู่ที่ Github:Up1 ขอให้สนุกกับการ coding ครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles