Implementasi RPC
Pada bagian ini akan dibahas, bahasa yang digunakan
pada RPC, port mapper untuk prosedur RPC, pemodelan RPC pada layer, dan cara
kerja RPC. Remote Procedure Call (RPC) adalah sebuah metode yang memungkinkan
kita untuk mengakses sebuah prosedur yang berada di komputer lain. Untuk dapat
melakukan ini sebuah server harus menyediakan layanan remote procedure.
Pendekatan yang dilakuan adalah sebuah server membuka socket, lalu menunggu
client yang meminta prosedur yang disediakan oleh server. Bila client tidak tahu
harus menghubungi port yang mana, client bisa me- request kepada sebuah
matchmaker pada sebuah RPC port yang tetap. Matchmaker akan memberikan port apa
yang digunakan oleh prosedur yang diminta client.
RPC masih menggunakan cara primitif dalam pemrograman,
yaitu menggunakan paradigma procedural programming. Hal itu membuat kita sulit
ketika menyediakan banyak remote procedure. RPC menggunakan socket untuk
berkomunikasi dengan proses lainnya. Pada sistem seperti SUN, RPC secara
default sudah ter- install kedalam sistemnya, biasanya RPC ini digunakan untuk
administrasi sistem. Sehingga seorang administrator jaringan dapat mengakses
sistemnya dan mengelola sistemnya dari mana saja, selama sistemnya terhubung ke
jaringan.
Bahasa RPC
Bahasa RPC (RPC Language - RPCL) merupakan bahasa
yang dikembangkan dari bahasa XDR. Bahasa RPC memiliki kemiripan dengan bahasa
XDR namun dengan beberapa penambahan yaitu program definisi. Implementasi
layanan protokol dan rutin menggunakan command rpcgen yang berkorespondensi
dengan bahasa pemprograman C. Deskripsi dari bahasa RPC meliputi:
1. Definition
File dengan bahasa RPC memiliki beberapa definisi,
diantaranya adalah enum, struct, union, typedef, const, dan program.
2. Structure
Struktur pada bahasa RPC dideklarasikan seperti pada
pendeklarasian struktur dalam bahasa C.
3. Union
Union pada bahasa RPC berbeda dengan bahasa C.
Kemiripan lebih ditunjukkan dengan variasi pada bahasa Pascal.
4. Enumeration
Enumerasi pada bahasa ini memiliki syntax yang sama
dengan bahasa C.
5. TypeDef
Tipe Definisi (Typedef) pada bahasa ini memiliki
syntax yang sama dengan typedef pada bahasa C.
6. Constant
Constant pada bahasa ini dapat digunakan jika
variabel integer konstan dibutuhkan.
7. Program
Program RPC dideklarasikan dengan syntax berikut
secara berurutan: program definiton, version-list, version, procedure-list,
procedure.
8. Declarations
Dalam bahasa ini, terdapat empat jenis tipe
deklarasi yaitu: simple declarations, fixed-length array declarations,
variable-length declaration, dan pointer declaration.
Lapisan RPC
Bagian antar-muka (interface) dari RPC dibagi
menjadi 3 lapisan/bagian (layer) yaitu:
1. Lapisan Tertinggi (Highest Layer)
Lapisan ini merupakan lapisan yang bersentuhan
langsung dengan sistem operasi, mesin dan jaringan tempat RPC berjalan. Layer
ini umumnya banyak digunakan pada pembuatan dan pemprograman RPC karena penggunaan
layer ini sama saja dengan penggunaan RPC. Banyak servis/layanan pada layer ini
yang berhubungan langsung dengan informasi yang banyak dibutuhkan.
2. Lapisan Menengah (Intermediate Layer)
Lapisan ini merupakan implementasi dari RPC
sesungguhnya. Pada layer ini, seorang user tidak harus berhubungan dengan
soket, sistem operasi atau implementasi lo-level lainnya. Pada layer ini,
seorang user hanya melakukan proses remote pada suatu mesin. Layer ini
merupakan layer yang digunakan untuk semua program RPC.
3. Lapisan Terendah (Lowest Layer)
Lapisan ini merupakan lapisan yang mengatur tentang
soket dan sistem call. Lapisan ini tidak memberikan data dan servis secara
detail untuk dapat digunakan. Umumnya program yang dibuat untuk lapisan ini
merupakan program yang paling efisien. Permasalahan yang timbul pada sistem ini
berkaitan dengan penyesuaian implementasi RPC untuk sistem operasi yang
berbeda.
Model dan Cara Kerja RPC
Prosedur call umumnya berkaitan dengan penggunaan
stack, penyimpanan parameter yang diterima dalam stack tersebut dan
pengalokasian ruang untuk lokal variabel. Namun selain itu ada yang disebut
dengan Prosedur Call remote, yang berarti pelaksanaan proses diatas namun pada
suatu sistem lain yang berhubungan melalui suatu jaringan. Sistem
prosedurremote ini memiliki cara kerja yang sedikit banyak mirip, namun berbeda
dengan prosedurcall biasa. Berikut adalah gambar cara kerja dari RPC.
Client procedure calls client stub in normal
way.
Client's OS sends message to remote OS.
Remote OS gives message to server stub.
Server stub unpacks parameters, calls server.
Server does work, returns result to the stub.
Server stub packs it in message, calls local
OS.
Server's OS sends message to client's OS.
Client's OS gives message to client stub.
Stub unpacks result, returns to client.
Tiap prosedur yang dipanggil dalam RPC, harus
berkoneksi dengan server remote dengan mengirimkan semua parameter yang
dibutuhkan, menunggu balasan dari server dan melakukan proses kemudian selesai.
Proses di atas disebut juga dengan stub pada sisi klien.
Sedangkan Stub pada sisi server adalah proses
menunggu tiap message yang berisi permintaan mengenai prosedur tertentu.
(Newmarch, 1995). Server harus membaca tiap parameter yang diberikan, kemudian
memberikan prosedur lokal yang sesuai dengan permintaan dan parameter. Kemudian
setelah eksekusi, server harus mengirimkan hasil kepada pihak pemanggil proses.
Berikut ini adalah diagram yang akan menjelaskan
secara rinci mengenai proses yang terjadi pada klien dan server dalam eksekusi
suatu prosedur RPC.
Berikut penjelasan dari diagram diatas:
Klien memanggil prosedur stub lokal. Prosedur Stub
akan memberikan parameter dalam suatu paket yang akan dikirim ke jaringan.
Proses ini disebut sebagai marshalling.
Fungsi Network pada O/S (Operating System - Sistem Operasi)
akan dipanggil oleh stub untuk mengirim suatu message.
Kemudian Kernel ini akan mengirim message ke sistem
remote. Kondisi ini dapat berupa connectionless atau connection-oriented.
Stub pada sisi server akan melakukan proses
unmarshals pada paket yang dikirim oleh network.
Stub pada server kemudian mengeksekusi prosedur
panggilan lokal.
Jika eksekusi prosedur ini telah selesai, maka
eksekusi diberikan kembali ke stub pada server.
Stub server akan melakukan proses marshals lagi dan
mengirimkan message nilai balikan (hasilnya) kembali ke jaringan.
Message ini akan dikirim kembali ke klien.
Stub klien akan membaca message ini dengan
menggunakan fungsi pada jaringan.
Proses unmarshalled kemudian dilakukan pada message
ini dan nilai balikan akan diambil untuk kemudian diproses pada proses
lokal.

