ในปี 2015 Uber สร้าง Microservice ขึ้นมาตัวหนึ่งชื่อ Geofence ซึ่งมีหน้าที่ทำ Geofence Lookup สำหรับแอป Uber ที่ต้องรองรับ Requests มากกว่า 1 แสน Query ต่อวินาที!
.
แต่ก่อนอื่น เรามาทำความรู้จักกันก่อนว่า Geofence Service คืออะไร?

Geofence Service คืออะไร?

Geofence คือการวางขอบเขตพื้นที่ต่างๆ ที่อยู่ในแผนที่ ว่าพื้นที่ไหนเป็นพื้นที่อะไร เช่น ขอบเขตพื้นที่นี้เป็นพื้นที่สนามบิน ขอบเขตพื้นที่นี้เป็นโรงเรียน ซึ่งข้อมูล Geofence นี้ก็สามารถเอามาใช้ประโยชน์ได้มากมาย เช่น การทำ Dynamic Pricing ที่มีการปรับราคาตามความต้องการของคนที่อยู่ในพื้นที่นั้นๆ เป็นต้น
.
โดยปกติแล้ว ทีม Uber จะใช้ Node.js ในการพัฒนาระบบ Service หลังบ้านเป็นภาษาหลัก แต่สำหรับกรณี Geofence Service นี้นั้น มีความแตกต่างที่ให้ทีม Uber เลือกภาษา Go ในการสร้าง Service นี้

ภาษา Go เหมาะกับ Geofence อย่างไรบ้าง?

1. High Throughput & Low Latency
Geofence นั้นจำเป็นต้องรองรับ Request จำนวนมหาศาล และไม่ใช่แค่เรื่องจำนวน Request เพียงอย่างเดียวเท่านั้น แต่ก็ต้องทำให้ Latency หรือเวลาที่ใช้ในการ Response นั้นต่ำกว่า 100 millisec สำหรับ 99% ของ Request ทั้งหมดอีกด้วย ซึ่ง Go ก็สามารถตอบโจทย์ทั้งสองเรื่องนี้ได้เป็นอย่างดี
2. CPU Intensive Workload
รูปแบบการทำงานของ Geofence Service นั้น เป็นงานประเภทที่ใช้ CPU ในการประมวลผลค่อนข้างเยอะ เพราะต้องมีการคำนวณโดยใช้ Point-In-Polygon Algorithm ซึ่ง Node.js ในเคสนี้นั้นอาจจะไม่เหมาะกับงานที่เน้น CPU เนื่องด้วยลักษณะที่เป็น Interpreted และ Dynamic Type ของภาษา JavaScript ทำให้ทำงานได้ช้ากว่า Compiled และ Static Type อย่างภาษา Go
3. Background Data Loading
Service Geofence เองนั้น ก็จำเป็นต้องมีการที่ต้อง Refresh ข้อมูลให้มีความอัปเดตอยู่ตลอดเวลา ซึ่งทำให้จำเป็นต้องมีการทำ Background Refreshing เพื่อทำการดึงข้อมูลจาก Sources ต่างๆ อยู่เรื่อยๆ ซึ่งสำหรับ Node.js ที่ทำงานแบบ Single Thread นั้น การที่ทำงานใน Background นั้นจะมีการดึง CPU อยู่ในระดับนึง โดยเฉพาะกับงานที่ต้องใช้ CPU เยอะ ซึ่งภาษา Go นั้น สามารถตอบโจทย์ในเรื่องนี้ได้ด้วย Goroutine ที่ทำให้ Service สามารถทำงานบน Multi-core ได้ โดยที่ไม่ดึง Resource จาก Thread หลัก
4. Developer Productivity
นอกจากนี้ การใช้ภาษา Go เองนั้นก็ช่วย Boost ความ Productive ของนักพัฒนาใน Uber ด้วยเช่นกัน เนื่องจากความเรียบง่ายของภาษา Go ที่สามารถเรียนรู้ได้ง่าย อ่านง่าย เข้าใจง่าย และ Maintain ได้ง่าย บวกกับ Type Safety ที่ช่วยให้ลด Error หลายๆ อย่างได้ตั้งแต่ Compile Time จากความเป็น Static Type ของภาษา Go
.
ซึ่งตอนนี้ที่ทาง Uber ในทีมต่างๆ ก็เริ่มมีการหันมาสร้าง Service ใหม่ๆ ด้วยภาษา Go กันมากขึ้น ซึ่งก็เป็นหนึ่งใน Choice ของภาษาที่ Uber เพิ่มเติมจาก Node.js และ Python

เรียนรู้เกี่ยวกับภาษา Go เพิ่มเติม

สำหรับผู้ที่อยากฝึกเขียน Go หรืออยากเป็น Go Developer มืออาชีพ ตอนนี้ทาง Skooldio ได้มีคอร์สซีรีส์ Golang Course Series ที่จะสอนตั้งแต่เริ่มต้นการใช้ภาษา Go ไปจนถึงระดับ Advanced และสามารถสร้าง Project จริงของตัวเองออกมาได้ด้วยภาษา Go สมัครเรียนพร้อมทำโปรเจกต์ในราคาพิเศษ ได้ที่นี่

More in:Technology

Comments are closed.