Google Protobuf ve gRPC Teknolojisi

Google Protobuf ve gRPC Teknolojisiblog-details

1. gRPC Nedir?

Günümüzde monolithic(yekpare) mimarilerin yerini, böl ve yönet (divide & conquer) mantığına daha yakın olan mikroservisler almaya başladı. Büyük ölçekteki yapılar yerine farklı servisleri konteynerize etmek yönetilebilirliği artırmış oldu. Dolayısıyla mikroservislerin birbirleriyle haberleşmesinde, RestFul uygulamalara bir alternatif olarak gRPC ortaya çıktı.

2. gRPC ‘nin Özellikleri

gRPC, Google tarafından açık kaynaklı olarak geliştirilen ve yüksek performanslı Uzak Yordam Çağırısı (Remote Procedure Call) çerçevesidir.​ Uzak Yordam Çağırısı, uzak bir sunucudaki bir işlevi, kendi servis bünyemize katmak için yapılan çağrıya denmektedir. RPC teknolojisi önceden beridir var olmasına karşın, HTTP 2.0 uyumuyla ve Google ‘ın desteğiyle daha da önem kazanmıştır. Alternatiflerinden farklı olarak, serialization işlemleri için, JSON veri tipi yerine dilden ve yapıdan daha bağımsız olan Google Protobuf haberleşme protokolünü kullanır. Protobuf haberleşme protokolüne yazımızın ilerleyen kısmında değineceğiz. Ayrıca gRPC üzerinden sağlanan iletişimlerde zaman aşımı süresi sağlanabilir; böylelikle; request(istek) gönderildikten belli bir zaman sonrasında response(yanıt) gelmezse; istek iptal olacaktır.

3. Google Protobuf

Protobuf, gRPC tarafından kullanılan mesaj formatlama yöntemidir diyebiliriz. XML ve JSON benzeridir fakat metin tabanlı olmadığından çok daha hızlıdır. Ayrıca geniş ölçekte dil desteğine de sahiptir. Aşağıda protobuf için bir mesaj yapısını görüyoruz. Burada önemli olan detaylardan biri de, her bir alan için unique bir indeksin olması gerekliliğidir. Genel kullanımda birer artırılarak id verilir.

blog-details

4. gRPC ile Rest Kıyaslaması

blog-details

5. Benchmark Testleri

Yapılan benchmark testlerinde gRPC ‘nin hız açısından açık ara önce olduğu görülmektedir. Aşağıdaki resimlerde yapılan bir uygulamanın benchmark özeti ve grafiksel gösterimi verilmiştir.

blog-detailsblog-details

6. gRPC Kullanmanın Avantajları

  • Yüksek performansa sahip, modern ve hafif bir framework olması.​
  • Dilden bağımsız olarak sözleşme(contract) usulüne önem veren bir altyapı sağlaması.​
  • Server, Client ve Çift Yönlü İletişim (full-duplex) desteği sunması.​
  • HTTP 2.0 ile birlikte, TCP üzerinden paralel istek gönderilebilmesi.​
  • Yüksek performanslı streaming özelliği sunması.
  • 7. Microsoft .NET Ortamında gRPC ‘ye Giriş

    gRPC oldukça bağımsız bir yapı sunduğundan C# ve .NET ile kullanmak mümkündür. Ayrıca .NET5 ile birlikte gRPC & .NET uyumluluğu daha da artırıldı. .NET ortamında gRPC projesi oluşturmak için Create a New Project ardından arama çubuğuna gRPC yazıyoruz.

    blog-details

    Projeyi oluşturduktan sonra şu şekilde bir folder yapısı karşımıza çıkmaktadır;

    blog-details

    Proto dosyamızdaki kodlar şu şekildedir;

    blog-details

    Burada dikkat edilmesi gereken ilk husus protonun farklı versiyonlarının olduğudur. Güncel sürüm proto3 sözdizimine sahiptir. Namespace ve proje için paket tanımlarının ardından servis tanımına geçiyoruz. Servisi belirtirken rpc ifadesinden sonra servisin adını, daha sonra gönderilecek parametreyi; ardından geri dönüş parametresi tipini belirtiyoruz. Aşağıdaki satırlarda ise, servisin kullanacağı mesaj tipleri belirtiliyor.

    Servis sınıfımız ise şu şekildedir;

    blog-details

    Gördüğümüz üzere SayHello adındaki metodumuz .proto dosyasında belirttiğimiz HelloRequest türünden bir mesaj alır ve geriye yine .proto dosyasında belirttiğimiz HelloReply türünden bir cevabı geriye döndürmektedir.

    Kaynakça

    https://medium.com/@EmperorRXF/evaluating-performance-of-rest-vs-grpc-1b8bdf0b22da https://betterprogramming.pub/understanding-grpc-60737b23e79e https://developers.google.com/protocol-buffers https://docs.microsoft.com/tr-tr/aspnet/core/grpc/?view=aspnetcore-6.0 https://grpc.io/