Middle
gRPC nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
gRPC, Google tarafından geliştirilen, dağıtık uygulamalar ve mikroservisler oluşturmak için kullanılan yüksek performanslı, açık kaynaklı bir uzak prosedür çağrısı (RPC) çerçevesidir. Taşıma için HTTP/2 protokolüne dayanır ve arayüz tanımlama dili ve serileştirme mekanizması olarak Protocol Buffers (Protobuf) kullanır.
gRPC'nin temel özellikleri:
- HTTP/2: Çoklu istek, başlık sıkıştırma ve çift yönlü akış gibi HTTP/2 avantajlarını kullanır, bu da HTTP/1.1 üzerinde geleneksel istemci-sunucu protokollerine göre daha yüksek performans sağlar.
- Protocol Buffers (Protobuf): Verileri yapılandırmaya ve çeşitli dillerde serileştirme ve deserialize kodu üretmeye olanak tanıyan veri tanımlama dilidir. Protobuf, mesaj boyutu ve işlem hızında etkilidir.
- Akış (Streaming): Dört tür akış destekler:
- Unary: Klasik RPC (bir istek - bir yanıt).
- Sunucu tarafı Akışı: İstemci istek gönderir, sunucu mesaj akışıyla yanıt verir.
- İstemci tarafı Akışı: İstemci mesaj akışı gönderir, sunucu tek bir mesajla yanıt verir.
- İki yönlü Akış: İstemci ve sunucu aynı anda mesaj akışlarını değiş tokuş eder.
- Çok dilli: Protobuf ile gRPC, çok sayıda programlama dili için istemci ve sunucu kodu üretir.
- Kod üretimi:
.protodosyasına dayalı otomatik kod oluşturma, manuel kodlamayı azaltır. - Meta veriler: İstekler ve yanıtlarla birlikte anahtar-değer çiftleri halinde meta verilerin iletimini destekler.
- Araya girenler (Interceptors): Ek mantık yürütmek için istekleri ve yanıtları yakalama imkanı sağlar (örneğin, günlük kaydı, kimlik doğrulama).
gRPC nasıl çalışır:
- API servisi,
.protodosyasında Protocol Buffers dili kullanılarak tanımlanır. protocderleyicisi kullanılarak istenen dilde istemci ve sunucu kodu üretilir.- Sunucu, oluşturulan servis arayüzünü uygular.
- İstemci, sunucudaki servis metodlarını çağırmak için oluşturulan kodu kullanır.
.proto dosyasına örnek:
syntax = "proto3";
package greeting;
// Servis tanımı
service Greeter {
// Birim RPC metodu
rpc SayHello (HelloRequest) returns (HelloReply) {}
// Sunucu tarafı akış metodu
rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}
// Mesajların tanımı
message HelloRequest {
string name = 1; // 1 numaralı alan
}
message HelloReply {
string message = 1;
}
REST ile karşılaştırma (JSON/XML kullanan):
| Özellik | gRPC (Protobuf) | REST (JSON/XML) |
|---|---|---|
| Taşıma protokolü | HTTP/2 | HTTP/1.1 veya HTTP/2 |
| Veri serileştirmesi | Protobuf (ikili) | JSON, XML (metin) |
| Performans | Yüksek (ikili format, HTTP/2) | Daha düşük (metin formatı, ek yük) |
| API tanımlama dili | Protocol Buffers (.proto) |
OpenAPI/Swagger |
| API sözleşmesi | Katı, Protobuf tabanlı | Daha az katı |
| Veri tipleri | Katı ( .proto içinde tanımlanır) |
Zayıf (çalışma zamanında doğrulama) |
| Kod üretimi | Dahili | Üçüncü araçlar gerektirir |
| Akış desteği | Dahili | Ek mekanizmalar gerekebilir (örneğin, WebSockets) |
| Okunabilirlik | .proto olmadan zor okunur |
İnsan tarafından kolayca okunur |
gRPC, dağıtık sistemlerde, mikroservislerde, büyük veri transferinde, performans ve katı API sözleşmesinin önemli olduğu durumlarda oldukça uygundur.