yelp-big1-1920-800x450
ระบบของ Yelp นั้นมี service ให้บริการข้อมูลกับ partner รายใหญ่ ๆ
เช่น Apple, Microsoft และ Yahoo เป็นต้น
ซึ่งผู้ใช้งานสามารถทำการจัดการข้อมูลต่าง ๆ ได้เอง
ดังนั้นสิ่งที่ทางทีมพัฒนาของ Yelp ต้องสร้างมา คือ
ระบบที่มีความน่าเชื่อถือ
สามารถรองรับข้อมูลจำนวนมากได้
โดยในตอนนี้มีข้อมูลมากกว่า 50 ล้าน และยังเพิ่มขึ้นอย่างต่อเนื่อง
รวมทั้งดูสถิติต่าง ๆ ของข้อมูลได้

นี่คือปัญหาที่ทีมพัฒนาได้รับมา
ดังนั้นมาดูว่ามีวิธีการแก้ไขปัญหาเหล่านี้อย่างไร ?

สามารถดูข้อมูลเพิ่มเติมได้ที่นี่
Know Thyself: My Internship Quest to Build a Framework to Analyze Our Yelp Feed

ปล. วิธีการต่อไปนี้เกิดขึ้นจากการฝึกงานนะ !!

ในการสร้างระบบจึงสามารถใช้เครื่องมือ และ framework อะไรก็ได้
ซึ่งได้ข้อสรุปว่าจะใช้

  • Elasticsearch สำหรับข้อมูล feed
  • Kibana สำหรับแสดงข้อมูลในรูปแบบ graphic
  • ElastAlert เป็น opensource ของ Yelp นั่นเอง สำหรับกำหนดรูปแบบข้อมูลที่ต้องการ
  • Amazon S3 สำหรับเก็บข้อมูล
  • Amazon EMR สำหรับจัดการ job process ในการ import  ข้อมูล

เริ่มด้วย Architecture ของระบบ

เป้าหมายหลักของระบบนี้ เพื่อสร้างระบบ Visualization เพื่ออธิบายการใช้งานข้อมูล
ดังนั้นเครื่องมือที่เลือกใช้ต้องสามารถนำข้อมูลไปแสดงในรูปแบบของ graphic ได้ง่าย
โดยมี 3 ตัวมาเปรียบเทียบกันคือ

  1. Kibana
  2. Redash
  3. Grafana

ซึ่งแต่ละตัว ต่างมีข้อดีและข้อเสีย แต่สุดท้ายก็เลือก Kibana มาใช้งาน
ด้วยเหตุผลต่าง ๆ ดังนี้

  • มีกราฟหลากหลายชนิดให้ใช้
  • ยืดหยุ่นต่อการใช้งาน
  • รองรับการ filter ข้อมูล
  • สามารถใช้ query เพื่อดึงข้อมูลแบบง่าย ๆ

ส่วน Redash และ Grafana นั้นสามารถทำงานได้ดีมาก
เพียงแต่ไม่ตรงกับความต้องการ หรือ use case นี้เท่านั้นเอง

และอีกเหตุผลหนึ่งก็คือ
Kibana มันทำงานร่วมกับ Elasticsearch ได้
ซึ่งระบบของ Yelp นั้นใช้ Elasticsearch ในการเก็บข้อมูล feed อยู่แล้ว
เมื่อทุกอย่างพร้อมก็นำ Elasticsearch ไปติดตั้งบน AWS กันเลย

มาดูโครงสร้างของระบบ แสดงดังรูป

yelp_framework_analyst_feed

การทำงานประกอบไปด้วย 2 ขั้นตอน ดังนี้

ขั้นตอนที่ 1 :: Data feed transformation
ทำการดึงข้อมูลของ feed ที่เก็บไว้บน Amazon S3 ขึ้นมา
ทำงานผ่าน Amazon EMR Job เพื่อกรองเอาเฉพาะข้อมูลที่ต้องการใช้เท่านั้น
ผลที่ได้จะเรียกว่า Data Metrics ซึ่งจะบันทึกมาไว้ที่ Amazon S3 เหมือนเดิม

ขั้นตอนที่ 2
ทำการดึงข้อมูล Data Metrics จาก Amazon S3 มาไว้ที่ Elasticsearch
ซึ่งจากนั้น Kibana ก็จะดึงไปแสดงผล

สิ่งที่น่าสนใจมาก คือ ระบบ Monitoring

หลังจากที่ระบบได้ Data Metrics แล้ว
สิ่งที่ต้องการคือ วิธีการ monitoring ข้อมูลเหล่านั้นว่าเป็นอย่างไรบ้าง ?
ซึ่งทำให้ผู้ดูแลระบบเห็นปัญหาได้ทันที ไม่ต้องเสียเวลาไปหาปัญหา

ตัวอย่างเช่น
ข้อมูล feed ที่ส่งไปให้ partner นั้นมันสูงขึ้น หรือ ลดลง 10% จากเมื่อวานหรือไม่ ?

โดยเครื่องมือที่เลือกมาใช้งาน คือ ElastAlert
เป็น opensource project ที่ทางทีมพัฒนาของ Yelp สร้างขึ้นมาใช้เอง
สามารถกำหนด rule หรือ Spike Rule เองได้เลย

ปล. มันเหมือนกับ Elastic Watcher อย่างมากนะเออ

ผลที่ได้จากระบบ นำมาแสดงผลบน Kibana ( version เก่านะครับ)

image002

สุดท้ายแล้ว

จะเห็นได้ว่า ระบบดังกล่าวนี้
สร้างขึ้นมาช่วยแก้ไขปัญหาทาง business เป็นหลัก
ส่วนเรื่องของเทคโนโลยี และ เครื่องมือ ก็เลือกให้เหมาะสมกับงาน ว่าต้องการอะไร ?
เห็นใช่ไหมว่า เรานำเทคโนโลยีมาสนับสนุน business นะครับ

คำถาม
ถ้าเป็นคุณล่ะ จะแก้ไขปัญหานี้อย่างไรกันบ้าง ?