gRPC คืออะไร?

Rachanee Saengkrajai
3 min readFeb 4, 2021

--

This article also has an English version.

gRPC เป็น HTTP Protocol ตัวหนึ่งที่เกิดมาในปี 2016
ก่อนจะไปทำความรู้จักกับมันเรามาดูกันก่อนว่าทำไมมันถึงถูกคิดค้นขึ้นมา?
REST ที่เราใช้อยู่ปัจจุบันมีปัญหาอะไร? 😢

ทำไม gRPC จึงถูกคิดค้นขึ้นมา?

จากไทม์ไลน์ด้านล่างคงเห็นว่า เราใช้ HTTP/1.1 มากว่า 15 ปีแล้ว (ซึ่งถือว่านานมากเมื่อพูดถึงอะไรก็ตามที่เป็นไอที) ในช่วงเวลานี้มีโปรโตคอลมากมายถูกสร้างขึ้นมาใช้ หลักๆก็ เช่น REST และ GraphQL
และแล้ว..ในที่สุดในปี 2015 HTTP/2 ก็เปิดตัว เย้….🎉

HTTP/2 จะมาปฏิวัติวงการ❗️

เว็บไซต์ http://www.http2demo.io/ สาธิตว่า HTTP/2 เร็วกว่า HTTP/1.1 ประมาณ 3 เท่า

HTTP/2 มีการพัฒนาที่สำคัญหลายอย่าง เช่น

  • สื่อสารผ่าน Binary ไม่ใช่ JSON ซึ่งทำให้การรับส่งข้อมูลเร็วขึ้นมาก แถมยังประหยัด Bandwidth ด้วย
  • เป็น Multiplexed Protocol คือสามารถจัดการหลาย request พร้อมกันใน connection เดียว โดยไม่เกิดปัญหาการชนหรือบล็อคกัน
  • มีการบีบอัด (compress) request headers ซึ่งช่วยลดขนาดข้อมูลได้
  • Server สามารถส่งข้อมูลไปฝั่ง client ได้โดยที่ client ยังไม่ได้ร้องขอ ความสามารถนี้เรียกว่า Server push
  • รองรับการสตรีมแบบ client -> server, server -> client และแบบสองทิศทาง

คำถามคือ.. แล้วเราสามารถใช้ REST บน HTTP/2 ได้ไหม❓

คำตอบคือ.. ได้ ❗️

แล้ว REST มีปัญหาอะไรหล่ะ?

  • REST ไม่สามารถใช้ความสามารถของ HTTP/2 ได้อย่างเต็มประสิทธิภาพ
    - ยังใช้ JSON ในการสื่อสาร
    - การทำสตรีมมิ่งมีความซับซ้อน
    - ยิ่งสตรีมแบบสองทิศทางคือแทบเป็นไปไม่ได้เลย
  • จำเป็นต้องจัดการเรื่อง authentication, load balancing, tracing, health checking ฯลฯ เอง
  • ไม่มี API Contract ที่คอมพิวเตอร์สามารถอ่านได้
    - ดังนั้นจึงต้องใช้คนหรือ library เป็นตัวช่วยในการสร้าง client library
    - ลองนึกภาพว่าเราต้องสร้างและอัพเดท client library ประมาณ 5 ภาษาสำหรับ API ของเรา งานคงเยอะและน่าเบื่อน่าดู 😿

gRPC คืออะไร?

gRPC เป็น Open-source RPC framework ตัวหนึ่ง ที่มีความทันสมัยและประสิทธิภาพสูง

  • RPC ย่อมาจาก Remote Procedure Call framework เป็นชุดเครื่องมือที่ทำให้การเรียกใช้ Remote API ทำได้ง่ายเสมือน method นั่นเขียนอยู่ด้วยกันในเครื่องเดียวกัน จริงๆ RPC ไม่ใช้เรื่องใหม่ ในอดีตก็มี RPC framework หลายตัว เช่น SOAP, WCF, Thrift เป็นต้น
  • gRPC ถูกสร้างโดย Google เพื่อใช้งานภายใน ก่อนที่จะเปิดสู่สาธารณะในเวลาต่อมา
  • ปัจจุบัน gRPC เป็นส่วนหนึ่งของ Cloud Native Computing Foundation(CNCF)
  • มีบริษัทใหญ่ๆหลายที่ที่นำ gRPC มาใช้ใน production
https://grpc.io/about/

มันทำงานยังไง?

การสื่อสารของระบบผ่าน gRPC

จากแผนภาพด้านบน จะเห็นว่า

  • ฝั่ง server: ต้องใช้ gRPC Service middleware เพื่อจัดการ requests/response ซึ่งตัว middleware นี้ใช้ Proto Buffers สำหรับการ serializing/deserializing ข้อมูล
  • ฝั่ง client: middlerware นั้นเรียกว่า gRPC stub
  • การสื่อสารทั้งหมดเกิดบน HTTP/2
https://youtu.be/hNFM2pDGwKI

gRPC vs REST

สรุป

  1. อาจกล่าวได้ว่า HTTP/2 เป็นตัวพัฒนาของ HTTP/1 ในทางเดียวกัน gRPC ก็เป็นตัวพัฒนาของ REST
  2. เราอาจจะเริ่มลองใช้ gRPC ในโปรเจคเล็กๆก่อน
    - สำหรับ API ที่ใช้ภายใน: อาจจะเริ่มกับโปรเจคเล็กๆที่กำลังจะขึ้นใหม่ และเมื่อทุกฝ่ายคุ้นชินและมีความเชี่ยวชาญแล้ว ค่อยเริ่ม migrate โปรเจคเก่า
    - สำหรับ API ที่เปิดให้บุคคลภายนอกใช้: อาจจะต้องรอจนกว่า gRPC จะถูกใช้อย่างแพร่หลายหรือเปิดให้ใช้ gRPC API ควบคู่ไปกับ REST ซักระยะหนึ่งเพื่อให้ user ตามทันก่อน
    - อย่างไรก็ตาม GraphQL ก็ยังคงเป็นตัวเลือกที่ดีสำหรับบางกรณีอยู่ เช่น API ที่รองรับการ query หรือ aggregate data จากหลายที่

เพิ่มเติม

--

--

Rachanee Saengkrajai
Rachanee Saengkrajai

Written by Rachanee Saengkrajai

Senior Software Engineer and Team Lead

No responses yet