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.
4. gRPC ile Rest Kıyaslaması
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.
6. gRPC Kullanmanın Avantajları
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.
Projeyi oluşturduktan sonra şu şekilde bir folder yapısı karşımıza çıkmaktadır;
Proto dosyamızdaki kodlar şu şekildedir;
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;
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/