Quantcast
Viewing all articles
Browse latest Browse all 2045

สวัสดีกับ Jaeger ระบบ Distributed Tracing จาก Uber

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.
หลังจากใช้งาน Zipkin มาสักพัก ก็มีเจอสิ่งที่คล้าย ๆ กันและน่าสนใจมาก ๆ คือ Jaeger จาก Uber โดยมีแรงบันดาลใจมาจาก Dapper และ OpenZipkin เป้าหมายหลักของเครื่องมือตัวนี้ คือทำการ tracing การทำงานต่าง ๆ ของระบบงาน ไม่ว่าจะอยู่ในรูปแบบไหนก็ตาม แน่นอนว่าทุก ๆ ระบบน่าจะมีหรือคิดหรือทำไว้บ้าง เพื่อทำการ monitoring การทำงานของระบบ เพื่อช่วยวิเคราห์เรื่อง dependency ต่าง ๆ ของระบบ เพื่อช่วยหา root cause ของปัญหาต่าง ๆ เพื่อช่วยดู performance การทำงานของส่วนต่าง ๆ ของระบบ

โดยที่ Jaeger ก็มีเป้าหมายเช่นเดียวกัน

แต่เขียนว่าสร้างมาเพื่อ Microservice เลยนะ พร้อมกับรูปแบบก็เข้ากันกับ OpenTracing นั่นหมายความว่าจะไปใช้พวก ZipKin ก็เปลี่ยนได้สบาย ๆ แถมมี Client library หลายตัวเลย เช่น Go, Java, NodeJS, Python และ C++ ดังนั้นคิดว่าทุกอย่างน่าจะพร้อม

ส่วนโครงสร้างของ Jaeger เป็นดังนี้

  • Frontend พัฒนาด้วย React
  • Backend พัฒนาด้วยภาษา Go
  • ในส่วนของที่จัดเก็บข้อมูลประกอบไปด้วย Cassandra และ Elasticsearch
  • มี Spark สำหรับ aggregation ข้อมูลจากหลาย ๆ ที่ด้วย

สิ่งที่ควรรู้ไว้บ้าง เพื่อทำให้เข้าใจมากขึ้น

Span คือส่วนการทำงานต่าง ๆ ของระบบ ประกอบไปด้วยชื่อ เวลาเริ่มต้น และเวลาการทำงาน โดยที่ Span สามารถซ้อนการและเรียงลำดับ เหมือนกับการทำงานทั่วไปนั่นเอง ยกตัวอย่างเช่น web -> api -> caching -> database เป็นต้น Image may be NSFW.
Clik here to view.

ยังไม่พอนะ Jaeger มันมี component มากมาย

ดังรูป Image may be NSFW.
Clik here to view.

จะรออะไรมาลองใช้งานกันดีกว่า

Jaeger นั้นประกอบไปด้วย 3 ส่วนการทำงานหลักคือ
  1. Agent เป็น process ที่จะ run อยู่ที่ client หรือ host ต่าง ๆ ที่ต้องการจัดเก็บข้อมูล
  2. Collector เป็นส่วนการจัดเก็บข้อมูล ซึ่งมีทั้ง Cassandra และ Elasticsearch
  3. Query เป็นส่วนการดึงข้อมูลไปแสดงผล
สามารถติดตั้งง่าย ๆ ด้วย Docker แบบ all in one ดังนี้ [code] docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp \ -p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one:latest [/code] จากนั้นเข้า URL localhost:16686 สำหรับหน้าแสดงผลข้อมูลต่าง ๆ แสดงดังรูป Image may be NSFW.
Clik here to view.
แต่ถ้าต้องการ deploy ให้งานจริง ๆ ดูเพิ่มเติมจาก Deployment

มาลองเขียน code เพื่อ tracing การทำงานของระบบด้วย Jaeger กันดีกว่า

เป็นตัวอย่างของการเขียนด้วยภาษา Go ดังนั้นจึงใช้ Client library ชื่อว่า Jaeger client go สามารถเขียน code ง่าย ๆ ได้ดังนี้ ทำการสร้าง Jaeger tracer ขึ้นมาก่อน จากนั้นก็ระบบชื่อของ Span ไป ชื่อว่า service01 [gist id="6c85e901224cd1489972956e14fd72a3" file="main.go"] โดยในส่วนอื่น ๆ เราจะส่ง tracer นี้เข้าไปเช่นกัน จากนั้นก็กำหนดชื่อของ span ตามที่ต้องการ จะได้ผลการทำงานดังนี้ Image may be NSFW.
Clik here to view.
เพียงเท่านี้เราก็ได้ระบบ tracing ของระบบแบบง่าย ๆ แล้วครับ วันนี้เรา tracing ระบบกันอย่างไร ? ขอให้สนุกกับการเขียน code ครับ Referencen Websites https://eng.uber.com/distributed-tracing/

Viewing all articles
Browse latest Browse all 2045

Trending Articles