gRPC (HTTP / 2) เร็วกว่า REST ด้วย HTTP / 2 หรือไม่


96

มีเป้าหมายที่จะแนะนำการขนส่งและโปรโตคอลชั้นโปรแกรมที่ดีในของมันแฝงและเครือข่ายผ่าน ปัจจุบันแอปพลิเคชันใช้RESTกับHTTP / 1.1และเราพบว่ามีเวลาแฝงสูง ฉันต้องการที่จะแก้ไขปัญหาความล่าช้านี้และผมเปิดให้ใช้อย่างใดอย่างgRPC (HTTP / 2)หรือREST / HTTP2

HTTP / 2:

  1. มัลติเพล็กซ์
  2. การเชื่อมต่อ TCP เดียว
  3. ไบนารีแทนข้อความ
  4. การบีบอัดส่วนหัว
  5. ดันเซิร์ฟเวอร์

ฉันตระหนักถึงข้อดีทั้งหมดข้างต้น คำถามที่ 1:หากฉันใช้REST กับ HTTP / 2ฉันมั่นใจว่าฉันจะได้รับการปรับปรุงประสิทธิภาพอย่างมีนัยสำคัญเมื่อเทียบกับREST ที่มี HTTP / 1.1แต่จะเปรียบเทียบกับgRPC (HTTP / 2) ได้อย่างไร

ฉันทราบด้วยว่า gRPC ใช้โปรโตบัฟเฟอร์ซึ่งเป็นเทคนิคการจัดลำดับไบนารีที่ดีที่สุดสำหรับการส่งข้อมูลที่มีโครงสร้างบนสาย โปรโตบัฟเฟอร์ยังช่วยในการพัฒนาวิธีการไม่เชื่อเรื่องพระเจ้าทางภาษา ฉันเห็นด้วยกับสิ่งนั้นและฉันสามารถใช้คุณสมบัติเดียวกันใน REST โดยใช้ graphQL แต่ข้อกังวลของฉันอยู่ที่การทำให้เป็นอนุกรม: คำถามที่ 2:เมื่อHTTP / 2ใช้คุณสมบัติไบนารีนี้การใช้โปรโตบัฟเฟอร์จะให้ประโยชน์เพิ่มเติมจาก HTTP / 2 หรือไม่

คำถามที่ 3:ในแง่ของการสตรีมกรณีการใช้งานแบบสองทิศทาง gRPC (HTTP / 2) เปรียบเทียบกับ (REST และ HTTP / 2) อย่างไร

มีจำนวนมากดังนั้นบล็อก / วิดีโอออกในอินเทอร์เน็ตที่เปรียบเทียบ gRPC (HTTP / 2) กับ (REST และ HTTP / 1.1) เช่นนี้ ตามที่ระบุไว้ก่อนหน้านี้ฉันต้องการทราบความแตกต่างประโยชน์ของการเปรียบเทียบ GRPC (HTTP / 2) และ (REST กับ HTTP / 2)


คุณใช้อะไร? มีกรอบสำหรับ HTTP2 + REST หรือไม่
knocte

@knocte ฉันลงเอยด้วยการใช้ gPRC มันลดเวลาแฝงได้ดีทีเดียว เกี่ยวกับ HTTP / 2 + REST ไม่มีเฟรมเวิร์กเฉพาะเป็นการตั้งค่าที่คุณต้องเปลี่ยนในเซิร์ฟเวอร์ที่คุณใช้ สมมติว่าคุณใช้ nginx ดูในเอกสารเพื่อดูขั้นตอนในการตั้งค่า HTTP / 2
Lakshman Diwaakar

และคุณต้องตรวจสอบให้แน่ใจว่า HTTP / 1.1 ใช้การเชื่อมต่อซ้ำ มิฉะนั้นให้ค้นหา "tcp cold start" gRPC ใช้การเชื่อมต่อซ้ำตามค่าเริ่มต้น
bohdan_trotsenko

คำตอบ:


93

gRPC ไม่เร็วกว่า REST บน HTTP / 2 โดยค่าเริ่มต้น แต่จะให้เครื่องมือที่ทำให้เร็วขึ้น มีบางสิ่งที่อาจเป็นเรื่องยากหรือเป็นไปไม่ได้ที่จะทำกับ REST

  • การบีบอัดข้อความที่เลือก ใน gRPC สตรีม RPC สามารถตัดสินใจที่จะบีบอัดหรือไม่บีบอัดข้อความได้ ตัวอย่างเช่นหากคุณสตรีมข้อความและรูปภาพแบบผสมผ่านสตรีมเดียว (หรือเนื้อหาที่บีบอัดได้แบบผสมจริงๆ) คุณสามารถปิดการบีบอัดสำหรับรูปภาพได้ วิธีนี้ช่วยให้คุณประหยัดจากการบีบอัดข้อมูลที่บีบอัดแล้วซึ่งจะไม่เล็กลง แต่จะทำให้ CPU ของคุณไหม้
  • การจัดสรรภาระงานชั้นหนึ่ง แม้ว่าจะไม่ใช่การปรับปรุงการเชื่อมต่อแบบจุดต่อจุด แต่ gRPC สามารถเลือกแบ็กเอนด์ที่จะส่งทราฟฟิกไปได้อย่างชาญฉลาด (นี่คือคุณลักษณะของไลบรารีไม่ใช่คุณลักษณะ Wire Protocol) ซึ่งหมายความว่าคุณสามารถส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์ที่โหลดน้อยที่สุดโดยไม่ต้องใช้พร็อกซี นี่คือการชนะในเวลาแฝง
  • ปรับให้เหมาะสมอย่างมาก gRPC (ไลบรารี) อยู่ภายใต้เกณฑ์มาตรฐานอย่างต่อเนื่องเพื่อให้แน่ใจว่าไม่มีการถดถอยความเร็ว เกณฑ์มาตรฐานเหล่านี้มีการปรับปรุงอย่างต่อเนื่อง อีกครั้งสิ่งนี้ไม่ได้เกี่ยวข้องกับ gRPC โปรโตคอล แต่โปรแกรมของคุณจะเร็วขึ้นเมื่อใช้ gRPC

ดังที่ nfirvine กล่าวคุณจะเห็นการปรับปรุงประสิทธิภาพส่วนใหญ่ของคุณเพียงแค่ใช้ Protobuf แม้ว่าคุณจะสามารถใช้โปรโตกับ REST ได้ แต่ก็รวมเข้ากับ gRPC ได้เป็นอย่างดี ในทางเทคนิคคุณสามารถใช้ JSON กับ gRPC ได้ แต่คนส่วนใหญ่ไม่ต้องการจ่ายต้นทุนประสิทธิภาพหลังจากคุ้นเคยกับโปรโตส


ขอบคุณ @Carl สำหรับคำตอบ คุณสามารถแบ่งปันลิงก์ / เอกสารที่อธิบายสิ่งต่างๆข้างต้นและลิงก์สำหรับการเปรียบเทียบได้หรือไม่
Lakshman Diwaakar

3
ฉันอัปเดตการตอบกลับเพื่อเชื่อมโยงไปยังแดชบอร์ด ฉันไม่มีเอกสารที่อธิบายสิ่งเหล่านี้โดยตรง แต่ฉันเป็นผู้สนับสนุนหลัก
Carl Mastrangelo

โปรดระบุlibraryลิงก์การ
จัดสรร

15

ฉันไม่ใช่ผู้เชี่ยวชาญในเรื่องนี้ แต่อย่างใดและฉันไม่มีข้อมูลที่จะสำรองข้อมูลนี้

"คุณลักษณะไบนารี" ที่คุณกำลังพูดถึงคือการแสดงไบนารีของ HTTP / 2 เฟรม เนื้อหาเอง (เพย์โหลด JSON) จะยังคงเป็น UTF-8 คุณสามารถบีบอัด JSON และตั้งค่าได้Content-Encoding: gzipเช่นเดียวกับ HTTP / 1

แต่ gRPC จะบีบอัด gzip ด้วย เรากำลังพูดถึงความแตกต่างระหว่างโปรโตบัฟที่บีบอัดด้วย gzip กับ gzip

อย่างที่คุณสามารถจินตนาการได้ว่า protobufs ที่บีบอัดควรเอาชนะ JSON ที่บีบอัดได้ทุกวิถีทางไม่เช่นนั้น Protobufs ก็ล้มเหลวตามเป้าหมาย

นอกเหนือจากความแพร่หลายของ JSON เทียบกับ protobufs แล้วข้อเสียเพียงอย่างเดียวที่ฉันเห็นในการใช้ protobufs คือคุณต้องใช้ .proto เพื่อถอดรหัสพวกเขาพูดในสถานการณ์ tcpdump


1
ขอบคุณ @nfirvine สำหรับความคิดเห็นของคุณเกี่ยวกับคำถาม คุณลักษณะการทำให้เป็นอนุกรมนั้นสมเหตุสมผล คุณสามารถเพิ่มรายละเอียด / คำอธิบายเพิ่มเติมเกี่ยวกับการทำให้อนุกรมเกิดขึ้นใน REST และ gRPC ได้อย่างไร มันจะดีมากถ้าคุณสามารถแชร์ลิงก์ในเดียวกันได้
Lakshman Diwaakar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.