RPC
Uzak Yordam Çağrısı (Remote Procedure Call)
Kısaca
RPC, bir programın başka bir makinede çalışan fonksiyonu yerel bir fonksiyonmuş gibi çağırdığı ve aradaki ağı gizleyen bir iletişim stilidir.
RPC nedir?
Uzak yordam çağrısı, bir bilgisayardaki kodun başka bir bilgisayardaki fonksiyonu getUser(42) gibi sıradan bir fonksiyon çağrısı gibi görünen bir yolla çalıştırmasını sağlar. Perde arkasında argümanlar serileştirilir, ağ üzerinden gönderilir ve sunucuda yürütülür; sonuç geri gönderilir ve çağırana döndürülür. Fikir 1970'lerin sonu ve 1980'lerin başına uzanır ve dağıtık sistemlerin ve mikroservislerin birbirleriyle konuşma biçiminin büyük bölümünün temelinde hâlâ durur.
Bir RPC sistemi genellikle mevcut yordamları parametreleri ve dönüş tipleriyle listeleyen bir arayüz tanımıyla başlar. Bundan araçlar istemci stub'ları (serileştirme ve ağ işini üstlenen yerel fonksiyonlar) ile çağrıları alıp gerçek uygulamayı çağıran sunucu kodunu üretir. Popüler uygulamalar arasında HTTP/2 üzerinde Protocol Buffers kullanan gRPC, JSON mesajları gönderen hafif bir protokol olan JSON-RPC ve Apache Thrift bulunur. Örneğin JSON-RPC 2.0, kod editörlerinin kullandığı Language Server Protocol'ün ve yapay zekâ araçlarının kullandığı Model Context Protocol'ün arkasındaki mesaj biçimidir.
RPC, bir iş arkadaşınızı arayıp çeyrek toplamını hesaplamasını istemek gibidir: bir eylemi adıyla istersiniz ve nasıl yaptığını umursamadan yanıtı beklersiniz. İşin püf noktası, ağın asla tamamen görünmez olmamasıdır. Uzak bir çağrı yavaş olabilir, zaman aşımına uğrayabilir ya da yarıda başarısız olabilir; bu yüzden iyi RPC istemcileri zaman aşımı belirler, exponential backoff ile dikkatlice yeniden dener ve idempotent işlemleri tercih eder.
RPC en çok REST ile karşılaştırılır. RPC, createInvoice veya sendReminder gibi eylemler etrafında düzenlenir; REST ise standart HTTP metotlarıyla yönetilen /invoices/42 gibi kaynaklar etrafında. RPC, katı bir sözleşme içeren dahili servisten servise çağrılar için doğal hissettirir; REST ise herkese açık web API'lerinde daha yaygındır. gRPC'nin genel olarak RPC'nin eş anlamlısı değil, belirli bir RPC framework'ü olduğunu unutmayın.
Önemli noktalar
- RPC, başka bir makinedeki koda yapılan çağrıyı yerel bir fonksiyon çağrısı gibi gösterir.
- İstemci stub'ları argümanları serileştirir ve gönderir; sunucu fonksiyonu çalıştırır ve sonucu döndürür.
- gRPC, JSON-RPC ve Apache Thrift yaygın RPC uygulamalarıdır.
- Uzak çağrılar başarısız olabilir ya da zaman aşımına uğrayabilir, bu yüzden zaman aşımı ve dikkatli yeniden denemeler gerekir.
- RPC eylem odaklıdır; REST kaynak odaklıdır.
Örnek
// A minimal client stub: remote calls look like local ones
async function call(method, params) {
const res = await fetch("https://api.example.com/rpc", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", method, params, id: 1 }),
});
const reply = await res.json(); // {"jsonrpc":"2.0","result":{...},"id":1}
if (reply.error) throw new Error(reply.error.message);
return reply.result;
}
// The caller just names the procedure and passes arguments
const user = await call("getUser", { id: 42 });Sık sorulan sorular
RPC ile REST arasındaki fark nedir?
RPC, transferMoney gibi adıyla çağırdığınız eylemleri genellikle tek bir endpoint ya da üretilmiş bir istemci üzerinden sunar. REST ise kaynakları /accounts/42 gibi URL'lerde sunar ve onlar üzerinde işlem yapmak için standart HTTP metotlarını ve durum kodlarını kullanır.
gRPC ile RPC aynı şey midir?
Hayır. RPC, uzak fonksiyonları çağırmanın genel fikridir; gRPC ise mesajlar için Protocol Buffers'ı, taşıma için HTTP/2'yi kullanarak bunu uygulayan açık kaynaklı bir framework'tür.
RPC senkron müdür?
Kavramsal olarak çağıran, normal bir fonksiyon çağrısı gibi sonucu bekler. Pratikte modern RPC kütüphaneleri çağrıları asenkron fonksiyonlar ya da promise'ler olarak sunar; böylece çağıran engellenmez ve bazıları streaming ile tek yönlü bildirimleri de destekler.
İlgili sayfalar
- gRPCBackend ve API'ler, s. 19gRPC, uzak sunucudaki fonksiyonları yerelmiş gibi çağırmaya yarayan açık kaynaklı framework'tür; Protocol Buffers ve HTTP/2 ile hızlı, tipli mesajlar taşır.
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- SerileştirmeBackend ve API'ler, s. 42Serileştirme, bellekteki veri yapılarını JSON ya da bayt gibi bir biçime dönüştürme işlemidir; böylece veriler saklanabilir veya ağ üzerinden gönderilebilir.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- SOAPBackend ve API'ler, s. 44SOAP, her isteği ve yanıtı genellikle resmi bir WSDL sözleşmesiyle tanımlanan katı bir zarfa saran, XML tabanlı bir web servisi mesajlaşma protokolüdür.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin