Evolution of Uber's Tech Stack: ทำไมถึงต้องสร้าง RAMEN เพื่อจัดการ 1.5M+ Concurrent Connections?

วันนี้เราจะมาทำความรู้จักกับ RAMEN เบื้องหลังความเร็วระดับปีศาจของ Uber ที่ไม่ใช่บะหมี่ แต่คือ Frameowork XD
uber-deep-drive-ramen-stack-cover-image

เคยสงสัยไหมครับ? เวลาเรากดเรียกรถ Uber หรือดูเดลิเวอรี่ ทำไมรถขยับสมูทมาก? แจ้งเตือนเด้งปุ๊บปั๊บเหมือนอยู่ข้างๆ ทั้งที่บางทีเน็ตมือถือเราก็แกว่งจะเป็นจะตาย?

เบื้องหลังความเทพนี้ ไม่ใช่แค่เรื่อง Internet เร็ว แต่คือสถาปัตยกรรมที่ชื่อว่า RAMEN ครับ

วันนี้ผมจะพาไปแกะรอยดูว่า Uber แก้โจทย์ Real-time Communication ระดับล้านคนพร้อมกันยังไง ให้ลื่นไหลและเสถียรสุดๆ

1. ลืมวิธี Polling ไปได้เลย

สมัยก่อน (หรือแอปทั่วไป) เวลาอยากรู้ว่า รถขยับยัง? แอปในมือถือต้องคอยยิงคำถามไปหา Server ซ้ำๆ ทุก 1-2 วินาที (Polling)

  • ปัญหาคือ: 80% ของคำถามที่ยิงไป คำตอบคือ ยังไม่ขยับทำให้เปลืองเน็ตฟรี เปลืองแบตมือถือ และ Server ทำงานหนักโดยใช่เหตุ

Image
Image

2. กำเนิด RAMEN: เปลี่ยนจาก polling เป็น Push

Uber สร้างระบบ RAMEN (Real-time Asynchronous Messaging Network) ขึ้นมาปฏิวัติวงการ

  • Concept: แทนที่จะให้มือถือคอยถาม Server เปลี่ยนเป็นให้ Server Push ลงมาเองทันทีที่มีข้อมูลใหม่
  • ผลลัพธ์: ลด Latency ได้มหาศาล และลดภาระ Server ลงไปเยอะมาก เพราะส่งเฉพาะตอนจำเป็นเท่านั้น
Image

3. เบื้องหลังความไว: พลังของ gRPC และ Bi-directional Stream

ในเวอร์ชันล่าสุด (Next-Gen) RAMEN ไม่ได้แค่ส่ง Push ธรรมดา แต่ใช้เทคโนโลยี gRPC

  • เปรียบเหมือนการเปลี่ยนจากวิทยุสื่อสาร (ที่ต้องผลัดกันพูด กดปุ่มแล้วรอ) มาเป็น สายโทรศัพท์ดิจิทัล ที่คุยสวนกันได้ตลอดเวลา
  • Bi-directional: ท่อเดียวจบ! Server ส่งพิกัดลงมา (Downstream) ส่วนมือถือก็ส่งสัญญาณยืนยัน (Ack) กลับขึ้นไป (Upstream) ได้ในท่อเดียวกันทันที ไม่ต้องเปิด Connection ใหม่

4. Fireball สมองกลผู้คัดกรอง

ความเจ๋งอีกอย่างคือ ไม่ใช่ทุกการขยับจะถูกส่งมาที่มือถือเราครับ ในระบบ RAMEN จะมีบริการชื่อ Fireball คอยเป็นยามเฝ้าประตู

  • มันจะเช็คว่า ตำแหน่งใหม่ กับ ตำแหน่งเก่า ต่างกันเยอะไหม?
  • ถ้าขยับแค่นิดเดียว (เช่น GPS แกว่ง) Fireball จะตัดทิ้ง ไม่ส่งไปกวนมือถือเรา
  • ช่วยประหยัดเน็ตผู้ใช้ และลดขยะข้อมูลในระบบ
Image

สรุป

RAMEN สอนให้เรารู้ว่า การทำ Real-time App ระดับโลก ไม่ใช่แค่การใช้ WebSocket แล้วจบ แต่ต้องคิดถึง

  1. Battery Efficiency: เลี่ยง Polling ให้ได้มากที่สุด
  2. Payload Size: ส่งเฉพาะสิ่งที่จำเป็น (ผ่านการกรอง)
  3. Reliability: ระบบต้องจัดการเรื่อง "เน็ตหลุด" ได้ (At-least-once delivery)

ใครกำลังปวดหัวกับการทำระบบ Real-time Notification หรือ Chat ลองศึกษา Architecture ของ RAMEN ดูครับ เป็น Case Study ที่ดีมากๆ!

👇 ใครเคยใช้ gRPC ทำโปรเจกต์จริงแล้วบ้าง? ยากง่ายยังไงมาแชร์กันครับ!

#SoftwareEngineering #SystemDesign #UberEngineering #RAMEN #gRPC #RealTime #Developer #SandwichedDeveloper

sandwiched-developer-author
s
เขียนโดย

sirawich

อ่านต่อ