Tujuannya adalah untuk memperkenalkan protokol lapisan transport dan aplikasi yang lebih baik dalam latensi dan throughput jaringannya . Saat ini, aplikasi menggunakan REST dengan HTTP / 1.1 dan kami mengalami latensi tinggi. Saya perlu menyelesaikan masalah latensi ini dan saya terbuka untuk menggunakan gRPC (HTTP / 2) atau REST / HTTP2 .
HTTP / 2:
- Multiplexing
- Koneksi TCP Tunggal
- Biner, bukan tekstual
- Kompresi header
- Server Push
Saya menyadari semua keuntungan di atas. Pertanyaan No. 1: Jika saya menggunakan REST dengan HTTP / 2 , saya yakin, saya akan mendapatkan peningkatan kinerja yang signifikan jika dibandingkan dengan REST dengan HTTP / 1.1 , tetapi bagaimana ini dibandingkan dengan gRPC (HTTP / 2) ?
Saya juga mengetahui bahwa gRPC menggunakan buffer proto, yang merupakan teknik serialisasi biner terbaik untuk transmisi data terstruktur pada kabel. Buffer proto juga membantu dalam mengembangkan pendekatan agnostik bahasa. Saya setuju dengan itu dan saya dapat menerapkan fitur yang sama di REST menggunakan graphQL. Tetapi kekhawatiran saya adalah tentang serialisasi: Pertanyaan No. 2: Ketika HTTP / 2 mengimplementasikan fitur biner ini , apakah menggunakan buffer proto memberikan keuntungan tambahan di atas HTTP / 2?
Pertanyaan No. 3: Dalam hal streaming, kasus penggunaan dua arah , bagaimana gRPC (HTTP / 2) dibandingkan dengan (REST dan HTTP / 2)?
Ada begitu banyak blog / video di internet yang membandingkan gRPC (HTTP / 2) dengan (REST dan HTTP / 1.1) seperti ini . Seperti yang dinyatakan sebelumnya, saya ingin mengetahui perbedaan, manfaat membandingkan GRPC (HTTP / 2) dan (REST dengan HTTP / 2).
Jawaban:
gRPC tidak lebih cepat dari REST melalui HTTP / 2 secara default, tetapi ini memberi Anda alat untuk membuatnya lebih cepat. Ada beberapa hal yang akan sulit atau tidak mungkin dilakukan dengan REST.
Seperti yang dikatakan nfirvine, Anda akan melihat sebagian besar peningkatan kinerja Anda hanya dengan menggunakan Protobuf. Meskipun Anda dapat menggunakan proto dengan REST, proto terintegrasi dengan sangat baik dengan gRPC. Secara teknis, Anda dapat menggunakan JSON dengan gRPC, tetapi kebanyakan orang tidak ingin membayar biaya kinerja setelah terbiasa dengan foto.
sumber
library
LinkSaya bukan ahli dalam hal ini dengan cara apa pun dan saya tidak memiliki data untuk mendukung semua ini.
"Fitur biner" yang Anda bicarakan adalah representasi biner dari frame HTTP / 2. Konten itu sendiri (payload JSON) akan tetap UTF-8. Anda dapat mengompres JSON itu dan mengaturnya
Content-Encoding: gzip
, seperti HTTP / 1.Namun gRPC juga melakukan kompresi gzip. Jadi sungguh, kita berbicara tentang perbedaan antara JSON yang dikompresi dengan gzip vs protobuf yang dikompresi dengan gzip.
Seperti yang bisa Anda bayangkan, protobuf terkompresi harus mengalahkan JSON terkompresi dalam segala hal, atau protobuf gagal mencapai tujuannya.
Selain JSON vs protobufs di mana-mana, satu-satunya downside yang dapat saya lihat untuk menggunakan protobuf adalah Anda memerlukan .proto untuk mendekodekannya, katakanlah dalam situasi tcpdump.
sumber