Sobes.tech
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: .proto dosyası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:

  1. API servisi, .proto dosyasında Protocol Buffers dili kullanılarak tanımlanır.
  2. protoc derleyicisi kullanılarak istenen dilde istemci ve sunucu kodu üretilir.
  3. Sunucu, oluşturulan servis arayüzünü uygular.
  4. İ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.