Aracılığıyla paylaş


gRPC

İpucu

Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Azure için Buluta Özel .NET Uygulamaları Tasarlama adlı e-Kitap'tan bir alıntıdır.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Şimdiye kadar bu kitapta REST tabanlı iletişime odaklandık. REST'in varlık kaynaklarına karşı CRUD tabanlı işlemleri tanımlayan esnek bir mimari stili olduğunu gördük. İstemciler, istek/yanıt iletişim modeliyle HTTP genelindeki kaynaklarla etkileşim kurar. REST yaygın olarak uygulansa da daha yeni bir iletişim teknolojisi olan gRPC, buluta özel topluluk genelinde muazzam bir ivme kazanmıştır.

gRPC nedir?

gRPC, eski uzaktan yordam çağrısı (RPC) protokolünü geliştiren modern, yüksek performanslı bir çerçevedir. Uygulama düzeyinde gRPC, istemciler ve arka uç hizmetleri arasında mesajlaşmayı kolaylaştırır. Google'dan kaynaklanan gRPC, açık kaynak ve buluta özel tekliflerin Cloud Native Computing Foundation (CNCF) ekosisteminin bir parçasıdır. CNCF, gRPC'yi bir inkübing projesi olarak kabul eder. Kuluçkaya inküp, son kullanıcıların teknolojiyi üretim uygulamalarında kullandığı ve projenin iyi durumdaki katkıda bulunan sayısı olduğu anlamına gelir.

Tipik bir gRPC istemci uygulaması, bir iş işlemi uygulayan yerel, işlem içi bir işlevi kullanıma sunar. Bu yerel işlev, kapakların altında uzak bir makinede başka bir işlev çağırır. Yerel bir çağrı gibi görünen şey, bir uzak hizmete saydam bir işlem dışı çağrıya dönüşür. RPC tesisatı, bilgisayarlar arasındaki noktadan noktaya ağ iletişimini, serileştirmeyi ve yürütmeyi soyutlar.

Buluta özel uygulamalarda geliştiriciler genellikle programlama dilleri, çerçeveler ve teknolojiler üzerinde çalışır. Bu birlikte çalışabilirlik , ileti sözleşmelerini ve platformlar arası iletişim için gereken tesisatı karmaşık hale getirmektedir. gRPC, bu endişeleri soyutlayan bir "tekdüzen yatay katman" sağlar. Geliştiriciler yerel platformlarında iş işlevselliğine odaklanırken gRPC iletişim tesisatını işler.

gRPC, Java, JavaScript, C#, Go, Swift ve NodeJS gibi en popüler geliştirme yığınlarında kapsamlı destek sunar.

gRPC Avantajları

gRPC, aktarım protokolü için HTTP/2 kullanır. HTTP 1.1 ile uyumlu olsa da HTTP/2 birçok gelişmiş özelliğe sahiptir:

  • Metin tabanlı HTTP 1.1'in aksine, veri aktarımı için ikili çerçeve protokolü.
  • Aynı bağlantı üzerinden birden çok paralel istek gönderme desteği : HTTP 1.1, işlemeyi aynı anda bir istek/yanıt iletisiyle sınırlar.
  • Hem istemci isteklerini hem de sunucu yanıtlarını aynı anda göndermek için çift yönlü tam çift yönlü iletişim.
  • Büyük veri kümelerinin zaman uyumsuz akışına yönelik istekleri ve yanıtları etkinleştiren yerleşik akış.
  • Ağ kullanımını azaltan üst bilgi sıkıştırma.

gRPC hafif ve yüksek performanslıdır. %60-80 daha küçük iletilerle JSON serileştirmeden 8 kat daha hızlı olabilir. Microsoft Windows Communication Foundation (WCF) ayrıştırmasında gRPC performansı, yüksek oranda iyileştirilmiş NetTCP bağlamalarının hızını ve verimliliğini aşıyor. Microsoft yığınını destekleyen NetTCP'nin aksine gRPC platformlar arasıdır.

Protokol Arabellekleri

gRPC, Protokol Arabellekleri adlı açık kaynaklı bir teknolojiyi benimser. Hizmetlerin birbirine gönderdiği yapılandırılmış iletileri seri hale getirmek için son derece verimli ve platformdan bağımsız bir serileştirme biçimi sağlar. Geliştiriciler, platformlar arası Arabirim Tanım Dili (IDL) kullanarak her mikro hizmet için bir hizmet sözleşmesi tanımlar. Metin tabanlı .proto bir dosya olarak uygulanan sözleşme, her hizmet için yöntemleri, girişleri ve çıkışları açıklar. Aynı sözleşme dosyası, farklı geliştirme platformlarında oluşturulan gRPC istemcileri ve hizmetleri için kullanılabilir.

Protobuf derleyicisi protocolan proto dosyasını kullanarak hedef platformunuz için hem istemci hem de hizmet kodu oluşturur. Kod aşağıdaki bileşenleri içerir:

  • bir iletinin hizmet işlemlerini ve veri öğelerini temsil eden, istemci ve hizmet tarafından paylaşılan, kesin olarak yazılan nesneler.
  • Uzak gRPC hizmetinin devralabileceği ve genişletebileceği gerekli ağ tesisatına sahip güçlü türe sahip bir temel sınıf.
  • Uzak gRPC hizmetini çağırmak için gerekli tesisatı içeren bir istemci saplaması.

Çalışma zamanında, her ileti standart bir Protobuf gösterimi olarak serileştirilir ve istemci ile uzak hizmet arasında değiştirilir. JSON veya XML'nin aksine, Protobuf iletileri derlenmiş ikili bayt olarak serileştirilir.

.NET'te gRPC desteği

gRPC, .NET Core 3.0 SDK ve üzeri ile tümleşiktir. Aşağıdaki araçlar bunu destekler:

  • ASP.NET ve web geliştirme iş yükünün yüklü olduğu Visual Studio 2022
  • Visual Studio Code
  • The dotnet CLI

SDK uç nokta yönlendirme, yerleşik IoC ve günlüğe kaydetme araçları içerir. Açık kaynak Kestrel web sunucusu HTTP/2 bağlantılarını destekler. Şekil 4-20'de gRPC hizmeti için bir iskelet proje iskelesi oluşturan visual studio 2022 şablonu gösterilmektedir. .NET'in Windows, Linux ve macOS'yi nasıl tam olarak desteklediğine dikkat edin.

gRPC Support in Visual Studio 2022

Şekil 4-20. Visual Studio 2022'de gRPC desteği

Şekil 4-21'de Visual Studio 2022'de bulunan yerleşik yapı iskelesinden oluşturulan iskelet gRPC hizmeti gösterilmektedir.

gRPC project in Visual Studio 2022

Şekil 4-21. Visual Studio 2022'de gRPC projesi

Önceki şekilde, proto açıklama dosyasını ve hizmet kodunu not edin. Kısa süre içinde göreceğiniz gibi Visual Studio hem Başlangıç sınıfında hem de temel alınan proje dosyasında ek yapılandırma oluşturur.

gRPC kullanımı

Aşağıdaki senaryolar için gRPC'yi tercih edin:

  • İşlemeye devam etmek için anında yanıt verilmesi gereken zaman uyumlu arka uç mikro hizmet-mikro hizmet iletişimi.
  • Karma programlama platformlarını desteklemesi gereken çok teknolojili ortamlar.
  • Performansın kritik olduğu düşük gecikme süresi ve yüksek aktarım hızı iletişimi.
  • Noktadan noktaya gerçek zamanlı iletişim - gRPC, yoklama yapmadan iletileri gerçek zamanlı olarak gönderebilir ve çift yönlü akış için mükemmel desteğe sahiptir.
  • Ağ kısıtlanmış ortamları – ikili gRPC iletileri her zaman eşdeğer bir metin tabanlı JSON iletisinden daha küçüktür.

Bu yazıda gRPC öncelikli olarak arka uç hizmetleriyle kullanılır. Modern tarayıcılar, ön uç gRPC istemcisini desteklemek için gereken HTTP/2 denetimi düzeyini sağlayamaz. Bununla birlikte, JavaScript veya Blazor WebAssembly teknolojilerle oluşturulmuş tarayıcı tabanlı uygulamalardan gRPC iletişimi sağlayan .NET ile gRPC-Web desteği vardır. gRPC-Web , tarayıcı uygulamalarında gRPC özelliklerini desteklemek için ASP.NET Core gRPC uygulamasını etkinleştirir:

  • Kesin olarak yazılan, kod tarafından oluşturulan istemciler
  • Sıkıştırılmış Protobuf iletileri
  • Sunucu akışı

gRPC uygulaması

Microsoft'un eShop on Containers mikro hizmet başvuru mimarisi, .NET uygulamalarında gRPC hizmetlerinin nasıl uygulanacaklarını gösterir. Şekil 4-22'de arka uç mimarisi gösterilir.

Backend architecture for eShop on Containers

Şekil 4-22. Kapsayıcılarda eShop için arka uç mimarisi

Önceki şekilde, eShop'un birden çok API ağ geçidini kullanıma sunarak Ön Uçlar için Arka Uç desenini (BFF) nasıl benimsediğine dikkat edin. Bu bölümün başlarında BFF desenini ele aldık. Web-Alışveriş API Ağ Geçidi ile arka uç Alışveriş mikro hizmetleri arasında yer alan Toplayıcı mikro hizmetine (gri) dikkat edin. Toplayıcı bir istemciden tek bir istek alır, bunu çeşitli mikro hizmetlere gönderir, sonuçları toplar ve istekte bulunan istemciye geri gönderir. Bu tür işlemler genellikle anında yanıt üretmek için zaman uyumlu iletişim gerektirir. eShop'ta Toplayıcı'dan gelen arka uç çağrıları Şekil 4-23'te gösterildiği gibi gRPC kullanılarak gerçekleştirilir.

gRPC in eShop on Containers

Şekil 4-23. Kapsayıcılar üzerinde eShop'ta gRPC

gRPC iletişimi hem istemci hem de sunucu bileşenlerini gerektirir. Önceki şekilde, Alışveriş Toplayıcısı'nın bir gRPC istemcisini nasıl uyguladığına dikkat edin. İstemci, arka uç mikro hizmetlere zaman uyumlu gRPC çağrıları (kırmızı) yapar ve bunların her biri bir gRPC sunucusu uygular. hem istemci hem de sunucu .NET SDK'sından yerleşik gRPC tesisatından yararlanıyor. İstemci tarafı saplamaları, uzak gRPC çağrılarını çağırmak için tesisat sağlar. Sunucu tarafı bileşenleri, özel hizmet sınıflarının devralabileceği ve kullanabileceği gRPC tesisatı sağlar.

Hem RESTful API'sini hem de gRPC iletişimlerini kullanıma sunan mikro hizmetler, trafiği yönetmek için birden çok uç nokta gerektirir. RESTful çağrıları için HTTP trafiğini dinleyen bir uç nokta ve gRPC çağrıları için başka bir uç nokta açabilirsiniz. gRPC uç noktası, gRPC iletişimi için gereken HTTP/2 protokolü için yapılandırılmalıdır.

Mikro hizmetleri zaman uyumsuz iletişim desenleriyle ayırmaya çalışırken, bazı işlemler doğrudan çağrılar gerektirir. gRPC, mikro hizmetler arasında doğrudan zaman uyumlu iletişim için birincil seçenek olmalıdır. HTTP/2 ve protokol arabelleklerini temel alan yüksek performanslı iletişim protokolü, bunu mükemmel bir seçim haline getirir.

İleriye bakma

İleriye baktığımızda gRPC, buluta özel sistemler için çekiş kazanmaya devam edecektir. Performans avantajları ve geliştirme kolaylığı ilgi çekicidir. Ancak REST büyük olasılıkla uzun süre buralarda olacaktır. Genel kullanıma sunulan API'ler ve geriye dönük uyumluluk nedenleriyle mükemmeldir.