gRPC Nedir, Neden Kullanılır?

Oğuzhan Dinç
ParamTech
Published in
3 min readMar 27, 2023

gRPC nedir?

gRPC, açılımı Google Remote Procedure Call’ dir. Ölçeklenebilir ve hızlı API’ler oluşturmak için kullanılan açık kaynaklı bir RPC çerçevesidir. Ağ bağlantılı sistemlerin geliştirilmesine ve gRPC istemcisi ile sunucu uygulamaları arasında açık iletişime olanak tanır. gRPC, Google, IBM, Netflix, CISCO ve daha fazlası dahil olmak üzere birçok önde gelen teknoloji şirketi tarafından benimsenmiştir. gRPC; optimum API koruması, yüksek performanslı uzaktan prosedür çağrıları ve ölçeklenebilirlik için HTTP/2, protokol arabellekleri ve daha fazlası gibi en son teknoloji yığınlarına bağlıdır. gRPC, sunucu ve istemci arasındaki .proto (ProtoBuf) dosyalarıyla iletişim kurmaktadır.

gRPC neden geliştirildi?

Daha fazla işletme entegrasyon için kanallar açtıkça, bu tür yazılımları birbirine bağlamak zorlaşıyor. RPC API’leri, dahili özellikleri ifşa edebilecekleri için entegre edilmesi zor ve dağıtılması risklidir. Birçok programlama dilinde geliştirildiler ve temel çerçeveye yakından bağlılar.

Bu sorun giderildi ve 2000 yılında REST API kullanıma sunulduğunda API erişilebilirliği artırıldı. Özellikle, kullanıcılara GET, PUT, POST ve diğerleri gibi standart HTTP tekniklerini kullanan varlıklar aracılığıyla dolaylı olarak bilgi almaları için tutarlı bir yol sağladı.

REST API, birçok uygulamayla başa çıkmak için gelişmiş bir format sunmasına rağmen, çok fazla meta veri ürettiği için basit ve hafif RPC yerini tamamen alamazdı. Bu, sonunda Facebook’un GraphQL ve Google’ın gRPC hizmetlerinin ortaya çıkmasına neden oldu.

Google, çeşitli tekniklerle yapılan çok sayıda mikro hizmet mimarisini birbirine bağlamak için RPC çerçevesine ek olarak 2015 yılında gRPC ye geçti. Başlangıçta Google’ın temel altyapısıyla yakından ilgiliydi, ancak sonunda açık kaynak haline getirildi ve genel halk tarafından kullanılmak üzere standartlaştırıldı.

gRPC avantajları nelerdir?

  • Http/1’e nazaran Http/2’yi kullanmaktadır. Böylece Http/2 stream desteği verebilmektedir.
  • TCP socket haberleşmesi sağlayabilmektedir.
  • Http/2 sayesinde binary serialization kullanmaktadır. Böylece text-based mesajlaşmaya nazaran oldukça hızlıdır.
  • Yapılan optimizasyonlar neticesinde Http/1 kullanan Restfull servislere nazaran 2.5 kat daha hızlı olduğu tespit edilmiştir.
  • Aynı bağlantı üzerinden birden fazla paralel request desteği sağlanmaktadır. Http/1’de ise bir request’e nazaran bir response söz konusudur.
  • Client ile server arasında çift yönlü iletişim vardır.
  • Yukarıdaki özelliklerle birlikte birçok niteliğinden dolayı yüksek performanslıdır.
  • Default olarak Protocol Buffers kullanarak dilden bağımsız olacak şekilde birçok uygulama tarafından kullanılabilmektedir.

Protocol Buffer (ProtoBuf) Nedir?

Protocol Buffers ( Protobuf), Google tarafından geliştirilen bir veri serileştirme biçimidir. Yapılandırılmış verileri verimli ve kompakt bir şekilde ikili biçimde depolayarak ağ bağlantıları üzerinden daha hızlı aktarıma olanak tanır. Protobuf, çok çeşitli seçilmiş programlama dillerini destekler ve platformdan bağımsızdır; bu, onu kullanarak yazılan programların kolayca diğer platformlara taşınabileceği anlamına gelir.

gRPC ile ProtoBuf

  • Dil bağımsızdır. Herhangi bir dile kolayca entegre olabilir
  • Veriler binary şeklinde ve serialized konumdadır. HTTP 1.1'de ise açık metin olarak gönderilmektedir.
  • Aynı servis bağlantısı üzerinden birden çok paralel istek gönderebilmek için çoğullama (Multiplexing) desteği mevcuttur. HTTP 1.1’de bir seferde bir istek / yanıt sınırlaması mevcuttur.
  • Bidirectional full-duplex yani aynı anda client isteklerini ve server yanıtlarını gönderip alabilmek için çift yönlü iletişim desteği sunar.
  • Streaming özelliği ile birlikte büyük-veri alışverişlerine uygundur.

Streaming

gRPC HTTP 2.0 üzerinde çalışır ve HTTP 2.0'ın tüm stream özelliklerini destekler:

  • Unary: Client’ın servera tek bir istek gönderdiği ve tek bir yanıt aldığı en basit RPC türüdür.
  • Server’dan Client’a Streaming: Bir client’ın istek attıktan sonra isteğine yanıt olarak serverın stream başlatıp, istek atılan tüm mesajların client’a aktarılmasını içermektedir.
  • Client‘dan Server’a Streaming: Client bir stream oluşturarak tüm mesajları server’a gönderir, mesaj gönderimi bitince server tek bir mesaj halinde cevap döner.
  • Çift yönlü Streaming (Bi-directional streaming): Client ve server birbirlerine tek bir mesaj ya da stream oluşturabilir. İki streamde birbirinden bağımsız işler. Client ve server mesajları herhangi bir sırayla okuyabilir ve yazabilir.

Cancelling an RPC

Client yada server istedikleri bir anda RPC’yi cancel edebilirler ve bu anlık olur.

Deadlines/Timeouts

gRPC client’lara bir timeout süresi set edebilmelerini ve server’larında herhangi bir RPC’nin timeout olup olmadığını sorgulayabilmelerine olanak sağlar.

Bir sonraki yazımda .Net Core ile gRPC kullanımını aktarmaya çalışacağım.
Yeniden görüşmek üzere…

Kaynaklar;
https://grpc.io/docs/what-is-grpc/introduction/
https://grpc.io/docs/what-is-grpc/core-concepts/
https://protobuf.dev/programming-guides/proto3/

--

--