gRPC คืออะไร?
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/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
มันทำงานยังไง?
จากแผนภาพด้านบน จะเห็นว่า
- ฝั่ง server: ต้องใช้ gRPC Service middleware เพื่อจัดการ requests/response ซึ่งตัว middleware นี้ใช้ Proto Buffers สำหรับการ serializing/deserializing ข้อมูล
- ฝั่ง client: middlerware นั้นเรียกว่า gRPC stub
- การสื่อสารทั้งหมดเกิดบน HTTP/2
gRPC vs REST
สรุป
- อาจกล่าวได้ว่า HTTP/2 เป็นตัวพัฒนาของ HTTP/1 ในทางเดียวกัน gRPC ก็เป็นตัวพัฒนาของ REST
- เราอาจจะเริ่มลองใช้ gRPC ในโปรเจคเล็กๆก่อน
- สำหรับ API ที่ใช้ภายใน: อาจจะเริ่มกับโปรเจคเล็กๆที่กำลังจะขึ้นใหม่ และเมื่อทุกฝ่ายคุ้นชินและมีความเชี่ยวชาญแล้ว ค่อยเริ่ม migrate โปรเจคเก่า
- สำหรับ API ที่เปิดให้บุคคลภายนอกใช้: อาจจะต้องรอจนกว่า gRPC จะถูกใช้อย่างแพร่หลายหรือเปิดให้ใช้ gRPC API ควบคู่ไปกับ REST ซักระยะหนึ่งเพื่อให้ user ตามทันก่อน
- อย่างไรก็ตาม GraphQL ก็ยังคงเป็นตัวเลือกที่ดีสำหรับบางกรณีอยู่ เช่น API ที่รองรับการ query หรือ aggregate data จากหลายที่
เพิ่มเติม
- High-performance Services with gRPC in .NET Conf 2020
- https://grpc.io/ : ประวัติ gRPC, บริษัทไหนใช้บ้างและทำไม?, ภาษาที่รองรับ, รวมทั้งแบบฝึกหัด ฯลฯ
- วิดีโอจาก gRPC Conf 2020 : มีหัวข้อที่น่าสนใจมากมายจากบริษัทชั้นนำที่แบ่งปันประสบการณ์เกี่ยวกับ gRPC
- https://github.com/grpc/grpc-web: gRPC สำหรับบราว์เซอร์