# Uzaktan yordam çağrısı
Uzak yordam çağrısı (ya da uzak prosedür çağrısı; , bir diğer adres uzayı (genelde ağ paylaşımlı bilgisayarlar) üzerinde programcı açıkça bu uzaktan etkileşim detayları kodlama olmadan çalıştırmak için bir alt yordam veya prosedürü sağlayan bilgisayar programına izin veren süreçler arası iletişim teknolojisidir.
Sunucu üzerindeki servisleri kontrol ettiğimizde karşımıza çıkan RPC, arka plânda birçok şeyi gerçekleştiren bir servistir. RPC, temelde istemci ve sunucu arasında yapılan işlemlerin iletişimi için tasarlandı. Bir işlemin gerçekleşmesi için bir gönderici (sunucu) ve bir de istemci vardır.. Yani programcı, alt prosedür ister çalışan programın yerelinde ister uzağında olsun, temelde aynı kodu yazar. Bu bir tür istemci-sunucu etkileşimidir (çağıran istemci, çalıştıran sunucudur) ve tipik olarak bir istek-yanıt mesaj geçirme sistemi aracılığıyla uygulanır. Nesne yönelimli programlama modelinde, RPC'ler uzaktan yöntem çağırma (RMI) ile temsil edilir. RPC modeli bir konum şeffaflığı seviyesini ifade eder, yani çağrı prosedürleri yerel ya da uzak olsun büyük ölçüde aynıdır, ancak genellikle aynı değildirler, bu nedenle yerel çağrılar uzak çağrılardan ayırt edilebilir. Uzak çağrılar genellikle yerel çağrılardan çok daha yavaş ve daha az güvenilirdir, bu nedenle bunları ayırt etmek önemlidir.
RPC'ler süreçler arası iletişimin (IPC) bir şeklidir, çünkü farklı süreçler farklı adres alanlarına sahiptir: aynı ana makine üzerindeyseler, fiziksel adres alanı aynı olsa bile farklı sanal adres alanlarına sahiptirler; farklı ana makinelerdeyseler, fiziksel adres alanı farklıdır. Bu kavramı uygulamak için birçok farklı (genellikle uyumsuz) teknoloji kullanılmıştır.


## Tarihi ve kökeni.
İstek-yanıt protokolleri 1960'ların sonlarında bilgi işlemin ilk dönemlerine, ağ işlemleri modeli olarak uzaktan yordam çağrılarının teorik önerileri 1970'lere ve pratik uygulamaları 1980'lerin başlarına dayanmaktadır. Bruce Jay Nelson genellikle 1981 yılında "uzaktan yordam çağrısı" terimini ortaya atmasıyla tanınır. Modern işletim sistemlerinde kullanılan uzak yordam çağrılarının kökleri, süreç senkronizasyonu için bir istek-yanıt iletişim protokolü kullanan RC 4000 çoklu programlama sistemine dayanmaktadır. Ağ işlemlerini uzak yordam çağrıları olarak ele alma fikri, en azından 1970'lerde ARPANET'in ilk belgelerine kadar uzanmaktadır. 1978'de Per Brinch Hansen, süreçler arasındaki yordam çağrılarından oluşan "harici isteklere" dayalı dağıtık bilgi işlem için bir dil olan Dağıtık Süreçleri önermiştir.
İlk pratik uygulamalardan biri 1982 yılında Brian Randell ve arkadaşları tarafından UNIX makineleri arasında Newcastle Connection için yapılmıştır. Bunu kısa süre sonra Xerox PARC'daki Cedar ortamında Andrew Birrell ve Bruce Nelson tarafından yapılan "Lupine" takip etmiştir. Lupine otomatik olarak taslaklar oluşturmuş, tip açısından güvenli bağlar sağlamış ve iletişim için verimli bir protokol kullanmıştır. RPC'nin ilk iş kullanımlarından biri 1981 yılında Xerox tarafından "Courier" adı altında yapılmıştır. RPC'nin Unix üzerindeki ilk popüler uygulaması, Ağ Dosya Sistemi (NFS) için temel olarak kullanılan Sun'ın RPC'siydi (şimdi ONC RPC olarak adlandırılıyor).
1990'larda, nesne yönelimli programlamanın popülerleşmesiyle birlikte, Common Object Request Broker Architecture (CORBA, 1991) ve Java uzaktan yöntem çağırma gibi alternatif bir uzaktan yöntem çağırma (RMI) modeli yaygın olarak uygulanmıştır. RMI'lar ise internetin yükselişiyle birlikte, özellikle 2000'li yıllarda popülerliğini yitirmiştir.


## Mesaj geçişi.
RPC bir istek-yanıt protokolüdür. RPC, istemci tarafından başlatılır ve bu, sağlanan parametrelerle belirtilen bir yordamı yürütmek için bilinen bir uzak sunucuya bir istek mesajı gönderir. Uzaktaki sunucu istemciye bir yanıt gönderir ve uygulama işlemine devam eder. Sunucu çağrıyı İşlerken, istemci sunucuya eşzamansız bir istek göndermediği sürece, istemci engellenir (yürütmeye devam etmeden önce sunucu işlemeyi bitirene kadar bekler). Çeşitli uygulamalarda birçok varyasyon ve incelik vardır, bu da çeşitli farklı RPC protokolleriyle sonuçlanır.
Uzaktan prosedür ile yerel prosedürün en önemli farkı, yerel prosedürün öngörülemeyen ağ problemlerinde hatayla karşılaşmasıdır. Ayrıca, arayanlar genellikle uzaktan yordamın gerçekten çağrılıp çağrılmadığını bilmeden bu tür arızalarla ilgilenmelidir. İdempotent prosedürler (birden fazla çağrılırsa ek etkisi olmayanlar) kolayca ele alınır, ancak uzak prosedürleri çağırmak için kodun genellikle dikkatlice yazılmış düşük seviyeli alt sistemlerle sınırlı olması için yeterli zorluk kalır.


### RPC yapımında temel adımların sırası.
  - İstemci, istemci sapmasını çağırır. Çağrı parametrelerin yığına normal şekilde itildiği yerel bir yordam çağrısıdır.
  - İstemci taslağı parametreleri bir mesaja paketler ve mesajı göndermek için bir sistem çağrısı yapar. Paketlenmiş parametreler marshalling diye adlandırılır.
  - İstemcinin yerel işletim sistemi, istemci makineden sunucu makineye mesajı yollar.
  - Sunucu makinesindeki yerel işletim sistemi, gelen paketleri sunucu saplamasına geçirir.
  - Sunucu saplaması, parametreleri iletiden açar. Parametrelerin açılmasına unmarshalling denir.
  - Son olarak, sunucu saplaması sunucu yordamını çağırır. Yanıt, ters yönde aynı adımları izler.


## Güvenlik.
Dağıtılmış uygulamaların kullanımının artmasıyla beraber uygulamaların istemci-sunucu iletişiminde güvenliğin önemi de artmaktadır. Uzaktan Yordam Çağrısı (RPC)  çalışma zamanı kitaplığı, hem istemciler hem de sunucular için kimlik doğrulama hizmetlerine yönelik standartlaştırılmış bir arabirim sağlar.  Uygulamalar, tüm çağrıların yetkili istemcilerden geldiğinden emin olmak için kimliği doğrulanmış uzaktan yordam çağrıları kullanır.


## Uygulanabilirlik.
Uzaktan yordam çağrısı, Windows işletim sistemlerini temel alan tüm istemci/sunucu uygulamalarında kullanabilirsiniz. Unix ve Apple gibi işletim sistemlerini içeren heterojen ağ ortamları için istemci ve sunucu programları oluşturmak için de kullanılabilir.


## Standart iletişim mekanizmaları.
Sunucuya farklı istemcilerin erişmeleri için standart RPC sistemleri oluşturulmuş olmalıdır.
RPC, C/C++ programcıları tarafından kullanılmak üzere tasarlanmıştır. Microsoft Arabirim Tanım Dili (MIDL) ve MIDL derleyicisine aşinalık gereklidir.
Çoğunda arayüz tanımlama dili (interface description language (IDL)) kullanılır.
Arayüz tanımlama dili birçok platforma izin verir.
Arayüz tanımlama dili (IDL) istemci ve sunucu arasındaki arayüz kodunu düzeltmede kullanılabilir.
Bu iş için genelde RPCGEN kullanılır.


## Avantajları ve dezavantajları.
Uzaktan Yordam Çağrısının(RPC) avantajları aşağıdaki şekilde sıralanabilir. 
  - İstemcilerin sunucu ile her zamanki sistem çağrıları ve prosedürler ile iletişimde bulunmasına fayda sağlar.
  - Dahili mesaj aktarımı işlemlerini kullanıcıdan gizli olarak yapar.
  - Hem dağıtık hem de yerel sistemlerde kullanılır.
  - Eşzamanlı olarak farklı programlar tarafından kullanılabilir.
Bu avantajların yanında belli dezavantajları da bulunmaktadır.
  - RPC sistemleri büyük miktarda veri aktarımı için uygun değildir.
  - RPC, bir iletişim sistemini, başka bir makineyi ve başka bir işlemi içerdiği için arızaya karşı oldukça savunmasızdır.
  - RPC için tek tip bir standart yoktur  çeşitli şekillerde uygulanabilir.
  - RPC yalnızca etkileşim tabanlıdır ve bu nedenle, donanım mimarisi söz konusu olduğunda herhangi bir esneklik sunmaz.