gRPC Nedir ve Sağladığı Avantajlar Nelerdir?
gRPC, Google tarafından geliştirilmiş açık kaynaklı bir Remote Procedure Call (RPC) kütüphanesidir. Peki, RPC kütüphanesi nedir diye sorarsanız, şu şekilde açıklayabiliriz:
RPC, uzak bir prosedürü çağırmaya olanak tanıyan bir sistemdir. Yani, çalıştığınız kodun veya projenin kendi bilgisayarınızdaymış gibi uzaktaki bir fonksiyonu tetikleyebilmesini sağlar. RPC kütüphanesi ise bu tür uzak prosedür çağrılarını gerçekleştirmek için gerekli araçları sağlayan bir yazılım kitaplığıdır. İşte, RPC sistemleri bu şekilde çalışır.
İçindekiler
“g” Harfi Ne Anlama Gelmektedir?
Çoğu kişi “g” harfinin Google’ı temsil ettiğini düşünebilir, ancak durum böyle değildir. Google tarafından çıkarılan her sürümde “g” harfi farklı bir anlam taşır. Bu anlamlar her sürümle birlikte değişir ve bu, geliştiricilere biraz eğlenceli bir gizem sunmak için yapılmıştır.
Daha fazla bilgi edinmek isterseniz, detaylı açıklamaya aşağıdaki bağlantıdan ulaşabilirsiniz:
https://grpc.github.io/grpc/core/md_doc_g_stands_for.html
RPC’ye tekrar dönersek: Daha önce de belirttiğimiz gibi, Uzak Yordam Çağrısı (Remote Procedure Call) anlamına gelir.
RPC Nedir?
RPC, uzak bir sunucudaki metotları, sanki kendi uygulama ortamınızın bir parçasıymış gibi çağırmanıza olanak sağlayan bir sistemdir. Bu, karmaşık ağ işlemlerini geliştirici açısından oldukça basitleştirir.
gRPC ve HTTP/2
gRPC, veri taşımak ve iletişim sağlamak için HTTP/2 protokolünü kullanır. Bu nedenle, gRPC’yi anlamadan önce HTTP/2’nin ne olduğunu ve HTTP/1 ile HTTP/2 arasındaki farkları kavramak önemlidir.
HTTP/2 protokolü, gRPC’nin daha hızlı, verimli ve modern bir iletişim altyapısı sunmasının temel nedenidir.
HTTP/1
HTTP/1 protokolü, her bir statik dosya (.css, .js, .png vs.) için ayrı ayrı istekler gönderir. Bu durum, her dosya için yeni bir bağlantı açılmasına neden olur ve hem sunucuda hem de istemci tarafında yükü ve maliyeti artırır. Sonuç olarak, bu süreç bekleme süresinin uzamasına ve sayfa yükleme hızının yavaşlamasına yol açar.
HTTP/2
HTTP/2 protokolü, aynı anda birden fazla dosya için tüm istekleri tek bir bağlantı üzerinden toplu şekilde gerçekleştirebilir. Bu sayede açılış hızı artar ve bekleme süresi azalır.
Bu özelliğe Multiplexing adı verilir. Teknik olarak, tek bir TCP bağlantısı üzerinden birden fazla isteğin (request) ve yanıtın (response) paralel olarak iletilmesi anlamına gelir. Multiplexing, özellikle modern web uygulamalarında performansı artırmada kritik bir rol oynar.
HTTP/1
- Metin Tabanlı Protokol: HTTP/1, iletişimi metin tabanlı (text-based) olarak gerçekleştiren bir protokoldür.
- Header Gönderimi: Her istek (request) ile birlikte, header bilgileri sıkıştırılmamış şekilde gönderilir. Bu, fazladan veri transferine yol açar.
- Request-Response İlişkisi: Bir istek (request) gönderildiğinde, yalnızca bir yanıt (response) alınabilir. Yani, bir istek bir yanıtla sınırlıdır.
HTTP/2
- Binary Protokol: HTTP/2, istemci (client) ile sunucu (server) arasındaki iletişimi binary formatta, küçük çerçevelere (frames) ayırarak gerçekleştirir. Bu özellik, Binary Protokol olarak adlandırılır ve veri iletimini daha hızlı ve verimli hale getirir.
- Header Sıkıştırma: Her istekle birlikte gönderilen header bilgileri, HPACK algoritması ile sıkıştırılarak iletilir. Bu sürece Header Compression (Header Sıkıştırma) denir. Böylece veri transferi optimize edilir.
- Server Push: HTTP/2, bir istek karşılığında birden fazla yanıtın (response) alınmasına olanak tanır. Bu özellik, sunucunun istemci talep etmeden bazı kaynakları proaktif olarak göndermesini sağlayan Server Push olarak bilinir.
Bu geliştirmeler, HTTP/2’yi daha hızlı, güvenilir ve modern bir protokol haline getirir.
gRPC Neden Tercih Edilir?
gRPC, CPU, bellek (memory) ve bant genişliği (bandwidth) kullanımının kritik önem taşıdığı uygulamalarda, JSON yerine binary formatta çalıştığı için tercih edilebilecek bir teknolojidir.
Protobuf ve Binary Serialization
gRPC, verilerin transferi için Google tarafından geliştirilmiş bir binary serileştirme protokolü olan Protocol Buffers (Protobuf) kullanır. Bu sayede:
- Veriler, JSON veya XML gibi metin tabanlı formatlar yerine binary formata dönüştürülür.
- Verilerin serileştirilmesi (serialize) ve serileştirilmiş verilerin tekrar işlenmesi (deserialize) Protobuf aracılığıyla hızlı bir şekilde gerçekleştirilir.
Performans Avantajları
Binary format kullanımı sayesinde:
- Veri boyutu küçülür, bu da transfer sırasında daha az bant genişliği kullanımı sağlar.
- CPU ve bellek yükü azalır.
- JSON veya XML’e kıyasla hatırı sayılır derecede hız ve performans avantajı elde edilir.
Bu özellikler, gRPC’yi özellikle yüksek performans gerektiren, mikroservisler veya IoT gibi alanlarda ideal bir çözüm haline getirir.
Binary Format Avantajları
Binary format, JSON gibi insan tarafından okunabilir bir format olmamasına rağmen, birçok durumda tercih edilmektedir. Bunun temel nedenleri şunlardır:
- Daha Hızlı İşlenme:
Binary format, JSON’a kıyasla daha hızlı işlenebilir. Bunun nedeni, JSON gibi metin tabanlı formatlarda verilerin işlenmesi sırasında ekstra işlem gerektiren string parsing işlemlerinin binary formatta olmamasıdır. - Daha Az Kaynak Kullanımı:
Binary format, JSON’a göre daha az CPU ve bellek tüketimi sağlar. Veriler direkt olarak binary formatta işlendiği için, dönüştürme ve ayrıştırma işlemlerine gerek kalmaz. - Verimlilik:
Binary format, JSON’a kıyasla daha kompakt bir yapıya sahiptir. Bu, özellikle büyük veri setlerinde veya kısıtlı bant genişliğine sahip sistemlerde performans açısından büyük avantaj sağlar.
Bu nedenlerle, gRPC gibi performans odaklı teknolojilerde binary format tercih edilmektedir.
gRPC, temel olarak binary format üzerinden çalışsa da ihtiyaçlar doğrultusunda JSON gibi metin tabanlı (text-based) formatları da destekleyebilmektedir.
Bu esneklik, farklı kullanım senaryolarında gRPC’nin daha geniş bir alanda kullanılmasını sağlar. Örneğin:
- Binary Format:
Performansın ve kaynak verimliliğinin önemli olduğu durumlarda kullanılır. Özellikle mikroservis mimarileri veya IoT gibi yüksek veri akışına ihtiyaç duyan sistemlerde idealdir. - JSON Format:
İnsan tarafından okunabilir bir format gerektiğinde veya sistemin diğer bileşenlerinin JSON ile uyumlu olduğu durumlarda tercih edilebilir. Özellikle debug işlemleri sırasında veya veri yapılarının daha kolay analiz edilmesi gereken ortamlarda avantaj sağlar.
Nasıl Desteklenir?
gRPC’nin JSON gibi metin tabanlı formatları desteklemesi, genellikle gRPC Gateway gibi ek araçlarla mümkündür. Bu araçlar, gRPC üzerinden gelen binary formatlı mesajları JSON’a çevirerek HTTP REST API gibi sistemlerle uyumlu hale getirir.
Sonuç olarak, gRPC, hem performans hem de esneklik açısından ihtiyaçlara uygun şekilde farklı veri formatlarını destekleme yeteneğine sahiptir.
Neden gRPC Kullanmalıyız?
Günümüzde, yoğun bir şekilde benimsenen mikroservis mimarisi, sistemin geliştirme süreçlerini daha dinamik hale getirse de, servisler arası iletişim hızını geleneksel monolitik yapılara kıyasla oldukça düşürmektedir. Bu durum, klasik RESTful mimariden daha hızlı bir altyapı ihtiyacını beraberinde getirmekte ve iletişim hızını artıracak yeni teknolojilere yönelmemize neden olmaktadır.
RESTful Servislerin Sınırları
- Dışarıdan Erişim İçin Daha Uygun: RESTful servisler, genellikle harici bir istemci (external client) tarafından tüketilmek üzere tasarlanmıştır.
- Text-Based Mesajlaşma: JSON veya XML gibi metin tabanlı mesajlaşmaya dayanır. Bu formatlar, okunabilirlik açısından avantaj sağlasa da, servisler arası iletişimde hız açısından dezavantajlıdır.
- Internal Servis İletişimi: RESTful servisler, mikroservislerin kendi iç iletişimlerinde genellikle optimal bir seçenek değildir, çünkü bu senaryolarda performans ön plandadır.
gRPC’nin Avantajları
gRPC, özellikle binary tabanlı mesajlaşma yapısıyla, servisler arası iletişimde monolitik yapılara en yakın hız seviyesine ulaşmayı mümkün kılar.
- Performans Odaklı: Binary tabanlı iletişim, JSON veya XML’e göre çok daha hızlıdır ve daha az bant genişliği kullanır.
- Internal Projelerde Daha Etkili: Mikroservislerin dış dünya ile etkileşime girmediği, tamamen içe dönük iletişim ihtiyaçlarında gRPC, hız ve verimlilik açısından RESTful’dan daha üstün bir alternatiftir.
- HTTP/2 Kullanımı: gRPC’nin HTTP/2 protokolüne dayalı olması, paralel istekleri daha verimli bir şekilde gerçekleştirme ve header sıkıştırması gibi avantajlar sağlar.
- Protobuf ile Verimlilik: gRPC, Protocol Buffers (Protobuf) sayesinde hızlı serileştirme ve düşük boyutlu veri transferi yapar.
Harici istemciler tarafından erişilmesi gerekmeyen, tamamen internal iletişim odaklı projelerde, RESTful yerine gRPC kullanmak, iletişim hızını ve verimliliği artırır. Böylece, mikroservisler arası etkileşimde monolitik yapılara en yakın performansı elde etmek mümkün olur. Bu, özellikle yüksek performans gereksinimi olan projelerde gRPC’yi öncelikli bir tercih haline getirir.
gRPC ve RESTful: Birbirini Tamamlayan Teknolojiler
gRPC’nin gelişimi ve sağladığı avantajlar göz önüne alındığında, RESTful mimarinin etkisini tamamen yitirdiğini düşünmek yanıltıcı olacaktır. Her iki teknoloji de farklı ihtiyaçlara yönelik çözümler sunar ve doğru bağlamda kullanıldığında oldukça etkilidir.
RESTful Mimarisinin Gücü
- External Clientlar İçin İdeal: RESTful mimari, harici istemciler (external clients) tarafından tüketilen uygulamalarda en kolay, kullanışlı ve etkili çözüm olmaya devam etmektedir.
- Geniş Çapta Destek: JSON tabanlı ve HTTP protokolü üzerine kurulu olan RESTful, neredeyse tüm istemci dilleri ve platformları tarafından desteklenir. Bu durum, RESTful’u evrensel bir çözüm haline getirir.
- Okunabilir ve Kolay Anlaşılır: JSON gibi metin tabanlı formatlar, insan tarafından okunabilir olması ve debug işlemlerini kolaylaştırmasıyla dikkat çeker.
- Basit ve Kullanıcı Dostu: RESTful, özellikle API tasarımı ve dökümantasyonu açısından oldukça basit ve hızlı bir şekilde benimsenebilir.
gRPC’nin Tamamlayıcı Rolü
- Internal İletişim İçin Avantajlı: gRPC, özellikle mikroservisler arasında yüksek hızlı ve verimli bir iletişim için tasarlanmıştır. Bu durum, RESTful’un performans ve verimlilik açısından yeterli olmadığı senaryolarda öne çıkar.
- Performans ve Verimlilik: Binary tabanlı mesajlaşma ve HTTP/2 protokolü ile, gRPC daha hızlı ve daha az kaynak tüketen bir alternatif sunar.
Doğru Teknolojiyi Doğru Yerde Kullanmak
- RESTful’un Rolü: Harici istemcilerle iletişim kuran, geniş çapta erişilebilir API’lerde RESTful hala en etkili ve kolay çözümdür.
- gRPC’nin Rolü: Performansın kritik olduğu, tamamen içe dönük mikroservis iletişimlerinde (internal communication) gRPC öncelikli tercih
gRPC’nin yükselişi, RESTful’un önemini azaltmaz. Her iki teknoloji de farklı kullanım alanlarında en iyi çözümü sunar. Bu nedenle, RESTful ve gRPC’yi birbirini tamamlayan teknolojiler olarak görmek ve ihtiyaca göre doğru tercihi yapmak en doğru yaklaşımdır.



