GRPC Protokol Tabanlı İletişimin Gücü

Eren Aydın
Etiya
Published in
4 min readSep 7, 2023

Günümüzde yazılım geliştirme dünyası, hızlı ve güvenilir iletişim gereksinimlerini karşılamak için yeni teknolojilere ihtiyaç duymaktadır. Bu noktada, GRPC (gRPC olarak da yazılır), modern uygulamalarınız için güçlü bir iletişim protokolü sunarak devreye giriyor.

GRPC Nedir?

GRPC, Google tarafından geliştirilen açık kaynaklı bir iletişim protokolüdür. Temel olarak, istemci ve sunucu arasındaki etkili ve hızlı iletişimi sağlar. GRPC, HTTP/2 tabanlı bir protokol üzerine inşa edilmiştir ve çoklu veri akışı (multiplexing) özelliği sayesinde birden fazla veri akışını aynı bağlantı üzerinden iletebilir.

GRPC Avantajları

GRPC’nin sağladığı avantajlar şunları içerir:

Performans: GRPC, HTTP/2'nin sunduğu hızlı ve verimli iletişim imkanıyla uygulamalarınızı hızlandırır.

Dil Bağımsızlığı: Protobuf (Protocol Buffers) kullanarak veri yapılarını tanımlayabilir ve bu tanımlamalardan otomatik olarak istemci ve sunucu kodlarını üretebilirsiniz. Bu, farklı programlama dilleri arasında iletişimi kolaylaştırır.

Kod Otomasyonu: Protobuf tanımlamaları, otomatik olarak seri hale getirme (serialization) ve ters-serileştirme (deserialization) işlemlerini yapar, böylece geliştirme sürecini hızlandırır.

Güvenlik: GRPC, güvenli iletişim için TLS kullanımını destekler. Bu sayede verileriniz güvende olur.

Hata Yönetimi: Detaylı hata kodları ve durumlar, hata yönetimini kolaylaştırır.

Protobuf Kullanımı

Protobuf, GRPC’nin temelini oluşturan veri yapısı tanımlamaları için kullanılır. Aşağıda daha ayrıntılı bir Protobuf syntax örneği verilmiştir:

syntax = "proto3";

message Person {
string name = 1;
int32 age = 2;
repeated string email = 3;
}

message Address {
string street = 1;
string city = 2;
string zip_code = 3;
}

message ContactInfo {
string phone = 1;
repeated Address addresses = 2;
}

Yukarıdaki örnek, Protobuf dilinin temel özelliklerini göstermektedir. “Person” adında bir mesaj (message) tanımlanmıştır ve bu mesaj içinde “name,” “age,” ve “email” alanları bulunmaktadır. “Address” ve “ContactInfo” adında başka mesajlar da tanımlanmıştır ve “repeated” anahtar kelimesi ile birden fazla değer içerebilecek alanlar tanımlanmıştır.

gRPC Konseptleri ve Client/Server Arasındaki İletişim Tipleri Nelerdir?

gRPC (Google Remote Procedure Call), istemci ve sunucu arasında iletişim kurma konusunda oldukça güçlü ve verimli bir iletişim protokolüdür. gRPC’nin temelinde, Protocol Buffers (Protobuf) adı verilen veri serileştirme formatı kullanılır ve HTTP/2 tabanlı bir iletişim kanalı üzerinden çalışır. İşte gRPC’nin ana konseptleri ve istemci ile sunucu arasındaki iletişim tipleri:

gRPC Konseptleri:

Protobuf (Protocol Buffers): gRPC’nin temel veri serileştirme formatıdır. Protobuf, veri yapılarını ve iletişimlerin nasıl yapılacağını tanımlayan dil bağımsız bir yöntem sunar. Bu, farklı programlama dilleri arasında iletişimi kolaylaştırır.

Service Tanımları: gRPC servisleri, .proto dosyalarında tanımlanır. Her servis, kullanılabilir metotları ve bu metotların girdi ve çıktı türlerini tanımlar.

Metotlar (RPC): gRPC servislerinin işlevselliği, metotlar (RPC — Remote Procedure Call) aracılığıyla sağlanır. Metotlar, istemci ve sunucu arasında iletişim kurma şeklini tanımlar.

Sunucu ve İstemci: gRPC ile iletişim kuran iki ana taraf vardır. Sunucu, metotları sağlar ve istemcilerden gelen isteklere yanıt verir. İstemci, sunucuya istek gönderir ve sunucudan yanıt alır.

HTTP/2: gRPC, HTTP/2 protokolünü temel alır. Bu protokol, tek bir bağlantı üzerinden birden fazla isteği ve yanıtı destekler. Bu da performansı artırır.

Client/Server Arasındaki İletişim Tipleri:

gRPC, dört farklı iletişim tipi sunar, bu iletişim tipleri istemci ve sunucu arasındaki etkileşimin nasıl gerçekleşeceğini tanımlar:

Unary RPC (Server Streaming): Unary RPC, istemci tarafından sunucuya tek bir isteği gönderip sunucudan tek bir yanıt beklenen en basit iletişim tipidir. Örneğin, bir kullanıcının adını ve yaşını sunucuya gönderip, sunucudan bu kullanıcının kimlik bilgilerini alabilirsiniz.

Server Streaming RPC (Client Streaming): Server Streaming RPC, istemci tarafından sunucuya tek bir istek gönderilip, sunucunun ardışık olarak birden fazla yanıt gönderdiği bir iletişim tipidir. Örneğin, bir istemci, sunucudan sürekli bir veri akışı bekliyorsa bu tip kullanılır.

Client Streaming RPC (Server Streaming): Client Streaming RPC, istemci tarafından ardışık olarak birden fazla istek gönderilip, sunucunun tek bir yanıt döndürdüğü bir iletişim tipidir. Örneğin, bir istemci, birden çok veriyi sunucuya gönderip, sunucudan tek bir sonuç almak istiyorsa bu tip kullanılır.

Bidirectional Streaming RPC (Bidirectional Streaming): Bidirectional Streaming RPC, istemci ve sunucu tarafından bir arada birden fazla istek ve yanıt gönderilip alındığı en karmaşık iletişim tipidir. Bu tip, gerçek zamanlı ve sürekli iletişim gerektiren senaryolar için uygundur.

Bu iletişim tipleri, farklı kullanım senaryolarına ve gereksinimlere uygun olarak seçilir ve gRPC’nin esnekliğini yansıtır. İstemci ve sunucu arasındaki iletişim tipini doğru bir şekilde belirlemek, uygulamanızın performansını ve etkileşimini optimize etmede önemlidir.

Bir GRPC Uygulaması Geliştirmek

GRPC ile uygulama geliştirmek oldukça basittir. İşte temel adımlar:

Protobuf Tanımları: İletişim için kullanılacak veri yapılarını .proto dosyalarında tanımlayın.

Kod Üretme: Protobuf tanımlamalarını kullanarak istemci ve sunucu kodlarını otomatik olarak üretin.

İstemci ve Sunucu Kodları: İstemci ve sunucu kodlarını, üretilen kodları kullanarak yazın.

İletişim Kurma: İstemci tarafından sunucuya veri gönderme ve sunucunun yanıtını alma işlemlerini uygulayın.

Güvenlik ve Güvenilirlik

GRPC, güvenlik konusunda hassastır. TLS kullanarak iletişimi şifreleyebilirsiniz. Ayrıca, hata yönetimi ve geri bildirim süreçleri sayesinde güvenilir uygulamalar geliştirebilirsiniz.

Gerçek Dünya Kullanım Senaryoları

GRPC, birçok büyük şirket ve projenin altyapısında kullanılıyor. Örneğin, Netflix, Square ve Dropbox gibi teknoloji liderleri GRPC’yi tercih ediyor. Bu, GRPC’nin gerçek dünya kullanımının ne kadar yaygın olduğunun bir göstergesidir.

Kaynak:

ChatGPT

https://www.gencayyildiz.com/blog/grpc-nedir-ne-amacla-ve-nasil-kullanilir/

https://dev.to/penthaapatel/a-concise-guide-to-grpc-for-beginners-49bc

https://protobuf.dev/programming-guides/proto3/

--

--