ระบบของ 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 ตัวมาเปรียบเทียบกันคือ
ซึ่งแต่ละตัว ต่างมีข้อดีและข้อเสีย แต่สุดท้ายก็เลือก Kibana มาใช้งาน
ด้วยเหตุผลต่าง ๆ ดังนี้
- มีกราฟหลากหลายชนิดให้ใช้
- ยืดหยุ่นต่อการใช้งาน
- รองรับการ filter ข้อมูล
- สามารถใช้ query เพื่อดึงข้อมูลแบบง่าย ๆ
ส่วน Redash และ Grafana นั้นสามารถทำงานได้ดีมาก
เพียงแต่ไม่ตรงกับความต้องการ หรือ use case นี้เท่านั้นเอง
และอีกเหตุผลหนึ่งก็คือ
Kibana มันทำงานร่วมกับ Elasticsearch ได้
ซึ่งระบบของ Yelp นั้นใช้ Elasticsearch ในการเก็บข้อมูล feed อยู่แล้ว
เมื่อทุกอย่างพร้อมก็นำ Elasticsearch ไปติดตั้งบน AWS กันเลย
มาดูโครงสร้างของระบบ แสดงดังรูป
การทำงานประกอบไปด้วย 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 เก่านะครับ)
สุดท้ายแล้ว
จะเห็นได้ว่า ระบบดังกล่าวนี้
สร้างขึ้นมาช่วยแก้ไขปัญหาทาง business เป็นหลัก
ส่วนเรื่องของเทคโนโลยี และ เครื่องมือ ก็เลือกให้เหมาะสมกับงาน ว่าต้องการอะไร ?
เห็นใช่ไหมว่า เรานำเทคโนโลยีมาสนับสนุน business นะครับ
คำถาม
ถ้าเป็นคุณล่ะ จะแก้ไขปัญหานี้อย่างไรกันบ้าง ?