มารู้จักกับ gRPC และ Go กัน
สามารถดู video ของหัวข้อนี้ก่อนได้ ดู video
รู้จักกับ gRPC
Ref: https://grpc.io/
gRPC (gRPC Remote Procedure Calls) เป็น framework การสื่อสารที่พัฒนาโดย Google ใช้สำหรับการสร้างระบบที่สามารถสื่อสารกันระหว่าง application ในเครือข่ายได้อย่างรวดเร็วและมีประสิทธิภาพมากขึ้น โดย gRPC ใช้ protocal HTTP/2 สำหรับการส่งข้อมูล และใช้ Protocol Buffers (protobuf) เป็นรูปแบบในการ serialize ข้อมูลเพื่อให้การรับส่งข้อมูลเกิดขึ้นอย่างรวดเร็วมากขึ้น
ref: https://trends.stackoverflow.co/?tags=rest,graphql,grpc,websocket,openai-api
อย่างที่เราทราบกัน ในปัจจุบันถ้าพูดถึง API protocal การส่งข้อมูลที่เป็นที่นิยมมากที่สุด ก็คงปฎิเสธไม่ได้ว่ามันคือ Rest API เนื่องจากเป็นมาตรฐานที่เป็นที่นิยมและ implement ได้ง่ายบน application รูปแบบต่างๆ ทีนี้ หากเรา ลองเทียบ ความแตกต่างระหว่าง gRPC กับ REST API ว่ามีความแตกต่างอะไรบ้าง เราจะเจอว่ามันมีความแตกต่างกันดังนี้
- Protocal การส่งข้อมูล
- REST API: ใช้ HTTP/1.1 ในการส่งข้อมูล โดยมีการส่ง request และ response แบบ text-based (JSON หรือ XML)
- gRPC: ใช้ HTTP/2 ซึ่งมีการส่งข้อมูลแบบ binary ที่บีบอัดด้วย Protocol Buffers (protobuf) ทำให้มีประสิทธิภาพในการรับส่งสูงขึ้น
- รูปแบบของข้อมูล
- REST API: ใช้ JSON หรือ XML ซึ่งเป็น text-based format ที่เข้าใจได้ง่าย แต่มีขนาดใหญ่และต้องใช้เวลาในการ parse มากกว่า
- gRPC: ใช้ Protocol Buffers ซึ่งเป็น binary format ที่มีขนาดเล็กกว่าและประมวลผลได้เร็วกว่า JSON
- การสนับสนุนการเรียกแบบ asynchronous
- REST API: การทำงานแบบ synchronous เป็นพื้นฐาน การทำงานแบบ asynchronous สามารถทำได้ แต่ต้องจัดการผ่าน Backend Application ในแต่ละภาษาเพิ่มเติม
- gRPC: สนับสนุนการทำงานแบบ asynchronous และมี built-in support สำหรับการทำงานแบบ bidirectional streaming (สามารถส่ งและรับข้อมูลระหว่าง client และ server ได้ในเวลาเดียวกัน)
- การใช้งานแบบหลายภาษา
- REST API: รองรับทุกภาษาโปรแกรมเนื่องจากทำงานบน HTTP และ JSON ซึ่งทุกภาษาสามารถทำงานได้
- gRPC: มีเครื่องมือที่สามารถสร้าง client และ server code ในหลายภาษา เช่น Go, Java, Python, C++ เป็นต้น ด้วยการใช้ protobuf แต่ทั้งนี้ก็จะขึ้นอยู่กับภาษาที่ support ด้วยเช่นกัน
- Configuration
- REST API: ตั้งค่าง่ายกว่า และมีการใช้งานทั่วไปมากกว่า เหมาะกับกรณีที่ไม่ต้องการการเชื่อมต่อแบบ realtime
- gRPC: มีความซับซ้อนในการตั้งค่าเริ่มต้นมากกว่า โดยเฉพาะการจัดการ protobuf และ HTTP/2 แต่เหมาะสมกับ application ที่ต้องการประสิทธิภาพสูงและการเชื่อมต่อแบบ real-time
ข้อดีของ gRPC:
- มีประสิทธิภาพสูง เนื่องจากใช้ binary format ในการสื่อสาร
- สนับสนุนการทำงานแบบ bidirectional streaming ซึ่ง REST API ไม่สามารถทำได้
- สามาร ถใช้ในระบบที่ต้องการ latency ต่ำ
ข้อดีของ REST API:
- เข้าใจง่ายและตั้งค่าใช้งานง่ายกว่า
- เข้ากันได้กับ HTTP ทั่วไปและมีการใช้งานแพร่หลาย
เพราะฉะนั้น gRPC ไม่ได้ถูกสร้างมาเพื่อแทน Rest API แต่มันถูกสร้างมาเพื่อ “รีด” ประสิทธิภาพการส่งข้อมูลสูงสุดออกมา โดยปกติ use case ที่มักจะใช้ gRPC จะมีตั้งแต่
- Microservices Communication ใช้สำหรับการสื่อสารระหว่าง microservices เนื่องจากประสิทธิภาพสูงและ latency ต่ำ
- Real-Time Data Streaming เหมาะสำหรับระบบที่ต้องการการส่งข้อมูลแบบ real-time เช่น video streaming หรือ IoT data
- Low-Latency Systems ใช้ในระบบที่ต้องการ latency ต่ำ เช่น trading systems หรือเกมออนไลน์
- Distributed Systems ใช้ในระบบ distributed เพื่อให้การสื่อสารระหว่าง node เป็นไปอย่างมีประสิทธิภาพ
ทีนี้ เรามาลองทำความเข้าใจหลักการของ gRPC เพิ่มเติมกัน