grpc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
grpc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

gRPC mülakat soruları ve cevapları, Rest ile farkları,Örnek Java ve Spring Boot gRPC uygulama kodu



Aşağıda bir gRPC mülakatı için olası birkaç soru ve yanıtlarını bulabilirsiniz. Bu sorular, bir adayın gRPC'yi ne kadar iyi anladığını ve nasıl kullanabileceğini belirlemeye yardımcı olabilir.


Soru: gRPC nedir?

Yanıt: gRPC, Google tarafından geliştirilen açık kaynaklı bir yüksek performanslı uzaktan prosedür çağrısı (RPC) çerçevesidir. Bu çerçeve, istemci ve sunucu uygulamalarının aynı sistemde veya farklı sistemlerde bulunmasına bakılmaksızın birbirleriyle iletişim kurmasını sağlar. gRPC, HTTP/2 üzerinde çalışır ve Protobuf (Protocol Buffers) adı verilen bir veri formatını kullanır.


Soru: gRPC'nin anahtar özelliklerinden bazıları nelerdir?

Yanıt: gRPC'nin anahtar özelliklerinden bazıları şunlardır:


İstemci ve sunucu arasında düşük gecikmeli, yüksek hızlı iletişim.

HTTP/2 üzerinde çalışma yeteneği.

Protobuf veri formatı kullanma, bu da verilerin hızlı ve verimli bir şekilde serileştirilmesine ve tersine çevrilmesine olanak sağlar.

Tek yönlü, çift yönlü akış ve streaming desteği.

Çok dilli destek, yani çeşitli dillerde yazılmış servislerin birbiriyle iletişim kurabilmesi.

Soru: Protobuf (Protocol Buffers) nedir ve neden kullanılır?

Yanıt: Protobuf, Google'ın platformlar ve diller arasında veri alışverişi için geliştirdiği bir veri formatıdır. gRPC, Protobuf'u, veri serileştirmesi ve tersine çevirmesi hızlı ve verimli olduğu için kullanır. Bu, gRPC'nin yüksek performansını sağlar. Ayrıca, Protobuf dosyaları .proto dosyalarında tanımlanır ve bu dosyaları kullanarak otomatik olarak istemci ve sunucu kodu oluşturabiliriz.


Soru: gRPC'nin RESTful servislere göre avantajları nelerdir?

Yanıt: gRPC'nin RESTful servislere göre birkaç avantajı vardır. Öncelikle, Protobuf kullanımı sayesinde gRPC, JSON'a göre daha hızlı veri serileştirmesi ve tersine çevirme işlemi yapabilir. Ayrıca, HTTP/2 üzerinde çalışır, bu da daha verimli ağ kullanımı, daha düşük gecikme ve çift yönlü iletişim gibi avantajları beraberinde getirir. Son olarak, gRPC tek yönlü ve çift yönlü streaming'i desteklerken, RESTful API'lar genellikle bunu desteklemez.


Soru: gRPC'nin hangi durumlarda kullanılması uygundur?

Yanıt: gRPC genellikle aşağıdaki durumlarda kullanılır:


Mikroservisler arasında hızlı ve verimli iletişim gerektiğinde.

Poliglot (çok dilli) programlama gerektiren durumlarda, çünkü gRPC çeşitli dilleri destekler.

Tek yönlü veya çift yönlü veri akışı gerektiren durumlarda.

Soru: gRPC nasıl çalışır?

Yanıt: gRPC, Protobuf kullanarak istemci ve sunucu arasında veri aktarır. İstemci, bir RPC çağrısı yapar ve bu çağrı Protobuf kullanılarak serileştirilir ve HTTP/2 üzerinden sunucuya gönderilir. Sunucu, isteği alır, gerekli işlemleri yapar ve yanıtı Protobuf kullanarak serileştirir ve istemciye geri gönderir.


Soru: gRPC'de hata yönetimi nasıl gerçekleştirilir?

Yanıt: gRPC, hata durumlarını yönetmek için durum kodları kullanır. Bir RPC çağrısı başarısız olduğunda, sunucu bir durum kodu ve isteğe bağlı olarak bir hata mesajı döner. Durum kodları, gRPC belirtiminde standartlaştırılmıştır ve çeşitli durumları kapsarlar, örneğin "CANCELLED", "UNKNOWN", "INVALID_ARGUMENT", "DEADLINE_EXCEEDED" ve daha fazlası.


Soru: gRPC'nin "çift yönlü streaming" özelliği nedir?

Yanıt: Çift yönlü streaming, gRPC'nin bir istemci ve sunucunun birbirine bağımsız olarak ve istedikleri sırada mesaj göndermelerini sağlayan bir özelliğidir. Bu, iletişim için çok daha fazla esneklik sağlar. Çift yönlü streaming, HTTP/2'nin bu tür bağlantıları destekleme yeteneğini kullanır.


Soru: gRPC'nin HTTP/2 üzerinde çalışmasının avantajları nelerdir?

Yanıt: HTTP/2'nin kullanılmasının birkaç avantajı vardır. Öncelikle, HTTP/2, aynı anda birden çok isteği aynı bağlantı üzerinden gönderme yeteneği olan çoklu iletişim kanallarını (multiplexing) destekler. Bu, ağ kaynaklarını çok daha verimli bir şekilde kullanır ve gecikmeyi azaltır. İkincisi, HTTP/2 çift yönlü iletişimi destekler, bu da çift yönlü streaming'i mümkün kılar. Üçüncüsü, HTTP/2 sunucu tarafından itme (server push) özelliğini destekler, bu da sunucunun istemci tarafından açıkça istenmeyen verileri göndermesini sağlar.


Soru: gRPC'nin desteklediği dillerden bazıları nelerdir?

Yanıt: gRPC, C++, Java, Python, Go, Ruby, C#, Node.js, Android Java, Objective-C ve PHP gibi çeşitli dilleri destekler. Bu, farklı dillerde yazılmış uygulamaların birbirleriyle etkili bir şekilde iletişim kurabilmesini sağlar.


Soru: gRPC ile birlikte nasıl kimlik doğrulama yapılır?

Yanıt: gRPC, çeşitli kimlik doğrulama yöntemlerini destekler. Google'ın belirteci tabanlı (token-based) OAuth2'yi desteklemesi gibi, ayrıca SSL/TLS ve çift taraflı SSL/TLS'yi de destekler. İstemci ve sunucu arasında güvenli bir bağlantı kurmak için bu yöntemler kullanılabilir. SSL/TLS, istemci ve sunucu arasındaki veri aktarımını şifreler ve çift taraflı SSL/TLS, hem istemcinin hem de sunucunun kimliklerini doğrular.


Soru: gRPC'de deadline / timeout kavramı nedir?

Yanıt: Deadline ya da timeout, bir RPC çağrısının ne kadar süre içinde tamamlanması gerektiğini belirler. Eğer belirtilen süre içerisinde bir yanıt alınamazsa, gRPC çağrısı hata döner. Bu özellik, uzun sürebilecek veya belirsiz sürede tamamlanabilecek işlemler için önemlidir ve böylece bir uygulamanın asla yanıt gelmeyen bir istek nedeniyle bloke olmasını önler.


Soru: gRPC ve REST arasındaki farklar nelerdir?

Yanıt: gRPC ve REST arasında birkaç önemli fark vardır:


Veri Formatı: gRPC, Protobuf kullanır, bu da verinin küçük boyutlu ve hızlı bir şekilde serileştirilmesine olanak sağlar. REST genellikle JSON kullanır, bu da daha okunabilir ama daha büyük boyutludur.

HTTP Sürümü: gRPC, HTTP/2 kullanır, bu sayede aynı bağlantı üzerinden birden çok isteği aynı anda işlemek ve çift yönlü iletişim kurmak mümkündür. REST genellikle HTTP/1.1 üzerinde çalışır.

İletişim Şekli: gRPC, hem tek yönlü hem de çift yönlü akışları destekler. REST genellikle sadece istek/yanıt modelini kullanır.

API Tasarımı: gRPC, daha belirgin bir sözleşmeyle servislerin ve istek/yanıt mesajlarının açıkça tanımlandığı bir .proto dosyası kullanır. REST daha esnektir ve belirgin bir sözleşme zorunluluğu yoktur.

Soru: gRPC'deki Interceptor'lar nedir?

Yanıt: Interceptor'lar, gRPC çağrıları üzerinde özel bir mantığın çalıştırılmasına olanak sağlar. Bunlar, istemci ve sunucu tarafında, RPC'lerin gönderilmesi veya alınması sırasında uygulanabilir. Örneğin, Interceptor'lar, kimlik doğrulama, günlük kaydı (logging), metrik toplama ve hata işleme gibi görevler için kullanılabilir.


Soru: gRPC, hangi dillerdeki uygulamalar arasında iletişim kurabilir?

Yanıt: gRPC, çok dilli (polyglot) destek sunar, bu da birçok farklı programlama dilinde yazılmış uygulamaların birbirleriyle iletişim kurabileceği anlamına gelir. gRPC'nin desteklediği diller arasında Java, C#, Go, Python, Ruby, Dart, Kotlin ve daha pek çok dil bulunur. Bu, farklı dillerde yazılmış


Soru: gRPC'nin "idempotent" kavramı nedir ve neden önemlidir?

Yanıt: Idempotency, bir işlemin tekrarlanmasının sonucu değiştirmeyeceği anlamına gelir. Bu, ağ bağlantısı sorunları gibi durumlarda önemlidir: bir istemci, bir isteğin başarılı olup olmadığından emin olamazsa, aynı isteği güvenle tekrar gönderebilir. Eğer RPC idempotent olarak işaretlenmişse, bu işlem sonucu değiştirmeyecektir. gRPC'deki bazı metodlar idempotent olarak işaretlenebilir.


Soru: gRPC'deki "streaming" kavramı ne anlama gelir ve hangi türleri vardır?

Yanıt: gRPC'deki streaming, büyük veri setlerinin parçalar halinde aktarılabilmesini sağlar. Bu, gRPC'nin çok büyük veri setlerini işlemek için etkili bir şekilde ölçeklenebilmesini sağlar. gRPC'nin dört tür streaming'i destekler: tek yönlü (isteğe yanıt verme veya istemciye yanıt), sunucudan istemciye (sunucu birden çok yanıt gönderir), istemciden sunucuya (istemci birden çok istek gönderir) ve çift yönlü (hem istemci hem de sunucu birden çok mesaj gönderebilir).


Soru: gRPC servislerini nasıl tanımlarız ve nasıl kullanırız?

Yanıt: gRPC servisleri, .proto dosyaları kullanılarak tanımlanır. Bu dosyalar, servislerin ve istek/yanıt mesajlarının tanımlarını içerir. .proto dosyalarını kullanarak, gRPC otomatik olarak belirli bir dil için istemci ve sunucu kodu oluşturabilir. Bu kodu kullanarak, servislerle etkileşim kurabilir ve RPC çağrıları yapabiliriz.


Soru: gRPC'de "backoff" stratejisi nedir?

Yanıt: Bir backoff stratejisi, ağ hatalarının veya zaman aşımının ardından yeni bağlantı girişimlerinin sıklığını yönetir. Exponential backoff stratejisi gibi stratejiler, bir dizi başarısız bağlantı girişiminin ardından bağlantı girişimlerinin arasındaki süreyi sürekli olarak artırır. Bu, ağı gereksiz yere yüklemekten kaçınmak için kullanılır.


Soru: gRPC'de neden TLS/SSL kullanmalıyız?

Yanıt: TLS/SSL, gRPC trafiğini şifrelemek ve böylece istemci ve sunucu arasında iletilen verilerin gizliliğini ve bütünlüğünü korur.


Soru: gRPC'de neden TLS/SSL kullanmalıyız? (devamı)

Yanıt: (devamı)...nü korumak için kullanılır. Ayrıca, TLS/SSL, sunucunun kimliğini doğrulamak için de kullanılabilir, böylece istemcilerin kiminle iletişim kurduklarından emin olmalarını sağlar. Son olarak, gRPC'nin çift taraflı SSL/TLS desteği, istemcinin de kimliğini sunucuya doğrulamasına olanak sağlar. Bu, her iki tarafın da kiminle iletişim kurduklarını doğrulamalarını ve verilerin bütünlüğünü ve gizliliğini sağlamalarını sağlar.


Soru: gRPC'deki "circuit breaking" kavramı nedir ve neden önemlidir?

Yanıt: Circuit breaking, bir hizmetin istemcileri, aşırı yük veya hatalı durumların ağı tıkanmasına veya sistemlerin düzgün çalışmamasına yol açabileceği durumlarda koruma stratejisi sunar. Circuit breaker, başarısız olan bir hizmete yapılan çağrıları bir süre için durdurabilir ve bu süre zarfında hizmetin kendisini toparlamasını sağlar. Bu, özellikle dağıtılmış sistemlerde ve mikro hizmetlerde önemlidir.


Soru: gRPC'nin herhangi bir dezavantajı var mı?

Yanıt: gRPC'nin birkaç dezavantajı bulunmaktadır. İlk olarak, HTTP/1.1 ile tam uyumlu olmadığı için, bazı eski proxy ve firewall'larla uyumsuz olabilir. İkincisi, gRPC, Protobuf kullanırken daha az okunabilir olabilir ve bu da hata ayıklama sürecini zorlaştırabilir. Üçüncü olarak, gRPC genellikle JSON veya XML kullanılarak yapılan basit HTTP REST isteklerinden daha karmaşık bir kurulum ve kullanım gerektirir.


Soru: gRPC'nin sağladığı özelliklerden bazıları nelerdir?

Yanıt: gRPC'nin sunduğu özellikler arasında hızlı ve etkili Protobuf tabanlı iletişim, çok dilli destek, hızlı ve etkili HTTP/2 iletişim protokolü, çift yönlü ve tek yönlü streaming, idempotent ve non-idempotent işlemler, zaman aşımı ve deadline gibi özellikler, güçlü hata işleme ve durum kodları, geniş çapta kimlik doğrulama ve güvenlik seçenekleri bulunur.

Soru: gRPC ve GraphQL arasındaki farklar nelerdir?

Yanıt: gRPC ve GraphQL, servislerin iletişim kurmasına yardımcı olan iki farklı teknoloji olmasına rağmen, birkaç temel farkları vardır. gRPC, Protobuf kullanır ve genellikle daha hızlı ve daha verimli iletişim sağlar. Bu yüzden genellikle mikroservisler arasındaki iletişim için kullanılır. Öte yandan, GraphQL genellikle bir API Gateway olarak kullanılır ve istemcilerin spesifik veri ihtiyaçlarını karşılamak için veriye şekil verme yeteneği sağlar.


Soru: gRPC'nin "flow control" özelliği nedir?

Yanıt: Flow control, gRPC'nin HTTP/2 tabanlı bir özelliğidir. HTTP/2, veri akışını kontrol etmek ve böylece ağı tıkanmayı önlemek için bir mekanizma sağlar. Bu, hem istemci hem de sunucunun, bir seferde ne kadar veri gönderebileceğini veya alabileceğini kontrol etmesine olanak sağlar.


Soru: gRPC'nin yüksek performanslı olmasını sağlayan unsurlar nelerdir?

Yanıt: gRPC'nin yüksek performanslı olmasını sağlayan birkaç faktör vardır. Öncelikle, Protobuf iletişimi, veriyi sıkıştırmak ve ağı üzerinden hızlı bir şekilde taşımak için oldukça verimlidir. İkincisi, HTTP/2, aynı anda çoklu istekleri gönderme yeteneği sağlar, bu da ağ kaynaklarını daha etkili kullanılmasını sağlar. Üçüncüsü, gRPC, çeşitli özellikler ve optimizasyonlar sayesinde hem ağ trafiğini hem de CPU kullanımını optimize eder.


Soru: gRPC'nin sağladığı kimlik doğrulama seçenekleri nelerdir?

Yanıt: gRPC, çeşitli kimlik doğrulama seçenekleri sunar. Bu seçenekler arasında Google'ın belirteci tabanlı (token-based) OAuth2, SSL/TLS ve çift taraflı SSL/TLS bulunur. İstemci ve sunucu arasında güvenli bir bağlantı kurmak için bu yöntemler kullanılabilir. SSL/TLS, istemci ve sunucu arasındaki veri aktarımını şifreler ve çift taraflı SSL/TLS, hem istemcinin hem de sunucunun kimliklerini doğrular.


Soru: gRPC'de Load Balancing nasıl yapılır?

Yanıt: gRPC, çeşitli yük dengeleme stratejilerini destekler. Bu stratejiler, Round-robin, Least request,


Soru: gRPC'de Load Balancing nasıl yapılır? (devamı)

Yanıt: (devamı)...Random ve IP Hash gibi yaygın yük dengeleme algoritmalarını içerir. Load balancing, genellikle proxy veya yük dengeleyici gibi bir ağ öğesi tarafından gerçekleştirilir. gRPC, client-side ve server-side load balancing'i destekler.


Soru: gRPC üzerinde "health checking" nasıl yapılır?

Yanıt: Health checking, bir uygulamanın veya hizmetin düzgün çalışıp çalışmadığını kontrol etmek için kullanılır. gRPC'de, health checking genellikle bir "health checking" RPC servisi kullanılarak yapılır. Bu servis, istemcinin sunucunun durumunu düzenli aralıklarla sorgulamasına olanak sağlar. Eğer bir hizmet çalışmıyorsa, bu durumun belirlenmesi ve uygun tedbirlerin alınması sağlanır.


Soru: gRPC'deki "channel" kavramı nedir?

Yanıt: gRPC'deki bir "channel", istemci ve sunucu arasındaki iletişim kanalını temsil eder. Bir istemci, belirli bir sunucuya RPC çağrıları yapmak için bir channel oluşturur. Bu channel üzerinden, bir veya daha fazla RPC çağrısı gerçekleştirilebilir. Channel'lar genellikle uzun ömürlüdür ve birden çok RPC çağrısı için yeniden kullanılabilirler.


Soru: gRPC'deki "Metadata" nedir ve ne için kullanılır?

Yanıt: gRPC'deki metadata, bir RPC çağrısı ile ilgili ek bilgiler taşır. Metadata, genellikle HTTP/2 headerları ve trailerları aracılığıyla iletilir. Kimlik doğrulama bilgileri, lokalizasyon bilgisi, custom headers ve diğer benzeri bilgiler, metadata aracılığıyla iletilir. gRPC, hem standart HTTP/2 headerlarını hem de custom metadata'yı destekler.

Soru: gRPC'deki "Deadline" ve "Timeout" kavramları ne anlama gelir?

Yanıt: Deadline ve timeout, gRPC'deki iki önemli kavramdır. Deadline, bir RPC çağrısının ne kadar süre bekleyebileceğini belirtir. Eğer belirlenen süre içinde bir yanıt alınmazsa, çağrı otomatik olarak iptal edilir. Timeout, belirli bir işlem için beklenen maksimum süreyi belirtir. Eğer bu süre aşıldıysa, işlem hatalı kabul edilir. Bu iki kavram, sistemlerin hızlı ve yanıt verebilir bir durumda kalmasını sağlamak için kullanılır.


Soru: gRPC'nin sunduğu "Interceptors" özelliği nedir ve ne için kullanılır?

Yanıt: Interceptors, gRPC'deki RPC çağrılarına müdahale etme yeteneği sağlar. Bu, bir çağrının yürütülmesi sırasında belirli bir eylem gerçekleştirmek için kullanılabilir, örneğin loglama, metriklerin toplanması, kimlik doğrulama, hata işleme ve daha fazlası. Hem istemci hem de sunucu tarafında interceptors kullanılabilir.


Soru: gRPC'deki "reflections" özelliği ne anlama gelir?

Yanıt: gRPC reflections, bir gRPC sunucusunun .proto dosyalarını, çalışma zamanında yani runtime'da sorgulayabilme yeteneğidir. Bu, özellikle bir sunucu hizmetini dinamik olarak keşfetmek veya test etmek için kullanılır. Reflection özelliği, CLI (Command Line Interface) araçları ile sunucu hizmetlerini, metotları ve mesajları sorgulama olanağı sağlar.


Soru: gRPC'de error handling nasıl yapılır?

Yanıt: gRPC, genel ve özelleştirilmiş hataları işlemek için çeşitli mekanizmalar sunar. Genel hatalar, HTTP/2 hata kodları aracılığıyla döndürülür. Özel hata durumları ise genellikle, hata mesajını ve kodunu taşıyan bir hata nesnesi aracılığıyla iletir. Ayrıca, hatalı bir RPC çağrısı sonucunda geri dönen metadata, hata hakkında daha fazla bilgi sağlayabilir.



Örnek Java ve Spring Boot gRPC uygulama kodu


Aşağıda, gRPC'yi kullanarak basit bir "Hello World" uygulaması oluşturmak için bir Java ve Spring Boot örneği bulabilirsiniz. Bu örnek, bir gRPC server (sunucu) ve client (istemci) oluşturur.


Öncelikle, ProtoBuf tanımlarımızı yapalım. Bu dosyayı src/main/proto/helloworld.proto olarak oluşturabilirsiniz:


proto

Copy code

syntax = "proto3";


option java_multiple_files = true;

option java_package = "com.example.grpc";

option java_outer_classname = "HelloWorldProto";

option objc_class_prefix = "HLW";


package helloworld;


// The greeting service definition.

service Greeter {

  // Sends a greeting

  rpc SayHello (HelloRequest) returns (HelloReply) {}

}


// The request message containing the user's name.

message HelloRequest {

  string name = 1;

}


// The response message containing the greetings.

message HelloReply {

  string message = 1;

}

Sonra, gRPC sunucusunu oluşturalım. GreeterService.java dosyasını oluşturun:


package com.example.grpc;


import io.grpc.stub.StreamObserver;

import net.devh.boot.grpc.server.service.GrpcService;


@GrpcService

public class GreeterService extends GreeterGrpc.GreeterImplBase {


    @Override

    public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {

        HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build();

        responseObserver.onNext(reply);

        responseObserver.onCompleted();

    }

}

Spring Boot uygulamasını oluşturun. Application.java dosyasını oluşturun:


package com.example.grpc;


import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication

public class Application {


    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);

    }

}

Son olarak, bir gRPC istemcisini oluşturalım. GrpcClient.java dosyasını oluşturun:


package com.example.grpc;


import io.grpc.ManagedChannel;

import io.grpc.ManagedChannelBuilder;


public class GrpcClient {

    public static void main(String[] args) throws InterruptedException {

        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 9090)

                .usePlaintext()

                .build();


        GreeterGrpc.GreeterBlockingStub stub = GreeterGrpc.newBlockingStub(channel);


        HelloReply helloReply = stub.sayHello(HelloRequest.newBuilder()

                .setName("John")

                .build());


        System.out.println("Response received from server:\n" + helloReply);


        channel.shutdown();

    }

}

Bu örnekteki gRPC server ve client'ınız localhost üzerinde 9090 portunda çalışacaktır. Client "John" isimli bir HelloRequest gönderir ve server bu isteğe "Hello John" mesajını içeren bir HelloReply döndürür.


Bu örnek bir mikro servis mimarisi içinde yer alabilir ve gerçek hayatta birçok farklı servisi ve çok daha karmaşık Protobuf mesajlarını içerebilir.


Not: Bu örnekte "net.devh:grpc-spring-boot-starter" adlı bir kütüphanenin kullanılması gerekmektedir.

Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo