Technology

Case Study: Microservices ภาษา Go ที่รองรับได้มากกว่า 1 แสน Request ต่อวินาที

ในปี 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 สมัครเรียนพร้อมทำโปรเจกต์ในราคาพิเศษ ได้ที่นี่

You may also like

Progressive Web App คืออะไร
Technology

Progressive Web Apps คืออะไร?

แค่เขียน Apps อย่างเดียวคงไม่พอ! เมื่อ Users เลือกดาวน์โหลด Apps เท่าที่จำเป็นเพื่อประหยัดพื้นที่ใช้งาน จากสถิติการใช้งานของ Users ที่ “ไม่ตัดสินใจติดตั้ง Apps” เพราะขั้นตอนที่ยุ่งยากและเลือกติดตั้งเฉพาะ Apps ...
Data

Apache Airflow คืออะไร แล้วทำไมองค์กรชั้นนำส่วนใหญ่ถึงเลือกใช้

Apache Airflow คือ 1 ใน Workflow Management ที่ได้รับความนิยม และองค์กรชั้นนำระดับโลกหลายๆ องค์กรเลือกใช้ โดยเฉพาะอย่างยิ่งในการสร้าง Data Pipelines เพื่อจัดการกับข้อมูลจำนวนมหาศาล ส่วนหนึ่งเพราะองค์กรต่าง ...

More in:Technology

8 เหตุผลทำไมควรเขียน Scala Technology

8 เหตุผลที่ Dev ควรลองเขียนภาษา Scala ตั้งแต่ตอนนี้

เราเคยเกริ่นถึงภาษา Scala ไปบ้างแล้วจากบทความ ภาษา Scala มีจุดเด่นอะไร? ทำไมกำลังมาแรงในสาย Developer และ Data Engineer แต่ในกลุ่มนักพัฒนาหลายคนยังสงสัยว่าภาษา Scala มีความเหมาะไปใช้ในงานแบบไหน? ทำไมถึงต้องหันมาศึกษา ...
ภาษา Scala คืออะไร Technology

ภาษา Scala มีจุดเด่นอะไร? ทำไมกำลังมาแรงในสาย Developer และ Data Engineer

Scala คือ ภาษา Programming ที่กำลังมาแรงและเริ่มมีความนิยมใช้กันขึ้นเรื่อย ๆ จุดเริ่มต้นภาษา Scala เรียกได้ว่าเป็นลูกอีกคนหนึ่งของภาษา Java เช่นเดียวกับภาษา Kotlin ที่พัฒนาต่อยอดมาเพื่อแก้ไขข้อบกพร่องบางอย่างของภาษา Java ในจุดประสงค์ที่แตกต่างกัน ...
Software Architecture Technology

3 Software Architecture Design ที่นิยมใช้พัฒนาระบบซอฟต์แวร์ขนาดใหญ่

ในการออกแบบซอฟต์แวร์ขนาดใหญ่ในองค์กร มักจะมีการทำงานร่วมกันโดยคนจำนวนมาก หากเราต่างคนต่างเขียนซอฟต์แวร์ไปในทางที่ตัวเองเห็นว่าดี ซอฟต์แวร์ที่แต่ละคนทำก็อาจจะทำงานร่วมกันไม่ได้หรือมีปัญหาตอนที่ Integrate เป็น Solution ใหญ่ ดังนั้น การทำซอฟต์แวร์ในระดับนั้นจึงจำเป็นต้องมีการแบ่งสันปันส่วน และมีการออกแบบ Software Architecture เพื่อให้ทำงานร่วมกันได้ดีและมองเห็นภาพรวมไปในทางเดียวกัน ทั้งระหว่างนักพัฒนาในทีมพัฒนากันเอง ...
Technology

สรุปเรื่อง Activity Lifecycle ของการพัฒนา Android app

Android Activity Lifecycle คืออะไร? ในการทำงานของแอปพลิเคชันจริง ๆ แล้วไม่ได้ทำงานเพียงแค่เฉพาะเวลาที่ผู้ใช้งานเปิดขึ้นมาบนหน้าจอเท่านั้น แต่ยังคงทำงานบางอย่างในขณะที่แอปพลิเคชันถูกย่อ หรือแม้กระทั่งตอนที่ผู้ใช้เปลี่ยนไปใช้แอปพลิเคชันอื่นอยู่ ซึ่งจริง ๆ แล้ว Android สามารถออกแบบกำหนดให้แอปพลิเคชันทำงานในสถานะต่าง ๆ ...

Comments are closed.