gRPC
Nedir?
Client uygulamaların,server uygulamadaki bir fonksiyonu sanki Client içinde tanımlıymış gibi uzaktan çağırmasına denir. HTTP/2 Protokolünde çalışan bir RPC (Remote Procedure Call) Framework’ü denilebilir. Protobuf formatından dolayı iletişim çok daha hızlıdır. HTTP/2 protokolü üzerinden çalıştığından dolayı minimum TCP bağlantısına ihtiyaç duyar. (HTTP/1 head-of-line-blocking problem)
HTTP/2 Multiplexing
Birden fazla analog veya dijital sinyalin birleştirilip tek bir sinyal haline getirilmesidir. (Telefon görüşmelerinin tek fiziki kablo üzerinden geçmesi)
Protobuf (.proto)
Dil ve platformdan bağımsız Google tarafından geliştirilmiş bir dildir. Proto dosyaları uzaktan çalıştırılması gereken kodlar için alt yordam desteği sunar. Dilden bağımsız olduğundan dolayı desteklediği diller üzerinden objelere dönüştürülür. Bu da serialize/deserialize işlemlerinin çok hızlı gerçekleştirilmesini sağlar.
Örnek bir .proto dosyası:
Protobuf - Desteklenen Tipler
(NOT: Tüm tipler default olarak nullabledır)
double, float, int32, int64, uint32, uint64, sint32, sint64, fixed32, fixed64, sfixed32, sfixed64, bool, string, bytes
Protobuf - Desteklenen Advanced Tipler
Enumurations:
Diğer Message alanlarının kullanılması:
Nested:
Unknown Fields:
OneOf:
Map:
Proto Generate Class
protoc --proto_path=IMPORT_PATH --csharp_out=DST_DIR
CLI: http://google.github.io/proto-lens/installing-protoc.html
Dezavantajları
Okunabilir bir çıktısı bulunmamaktadır.
Çok detaylı bir dökümantasyonu bulunmamaktadır.
Oldukça küçük bir community’si bulunmaktadır. StackOverflow’da açılan soru sayısı oldukça düşük.
Benchmark
Compressing karşlaştırması:
Microsoft MSDN’in gRPC dökümantasyonu:
Java-to-java:
Serialize / Deserialize:
REST / gRPC:
Yönlendirmeler
https://itnext.io/using-grpc-with-tls-golang-and-react-no-envoy-92e898bf8463
http://google.github.io/proto-lens/installing-protoc.html