Jumat, 15 Maret 2013

Remote Procedure Call (RPC)

Arsitektur didefinisikan sebagai suatu rancangan untuk penyusunan komponen-komponen suatu sistem, dimana rancangan tersebut mengidentifikasi komponen serta fungsi masing-masing komponen, konektifitas antar komponen serta pemetaan fungsionalitas komponen.

Sistem terdistribusi merupakan bagian dari sistem yang komplek yang menghubungkan beberapa mesin. Untuk hal ini dibutuhkan pengorganisasian sistem yang baik. Ada dua hal dalam melihat pengorganisasian sistem terdistribusi, organisasi secara logis sebagai kumpulan perangkat lunak dan secara fisik.

Hampir semua pengorganisasian sistem terdistribusi terkait dengan komponen perangkat lunak. Arsitektur software ini menggambarkan bagaimana antar komponen perangkat lunak saling berinteraksi satu sama lain. Sedangkan untuk penerapan secara fisik yaitu bagaimana kita menempatkan komponen perangkat lunak pada mesin sesungguhnya. Inti dari arsitektur perangkat lunak adalah arsitektur sistemnya.

Salah satu dari sudut pandang Arsitektur Sistem Terdistribusi adalah melihat sistem terdistribusi dari sudut pandang secara logis. Komponen pada sistem terdistribusi merupakan alat penghubung yang dapat diganti mengikuti lingkungan sistemnya itu sendiri. Kesulitannya adalah bagaimana membuat interface agar hal tersebut bisa di lakukan di sistem yang berbeda.

Interface ini kita sebut sebagai connector, yaitu sebuah mekanisme yang menjembatani komunikasi, koordinasi dan kerjasama antar komponen. Salah satu contohnya adalah RPC atau Remote Procedure Call.

RPC adalah suatu protokol yang menyediakan suatu mekanisme komunikasi antar proses
yang mengijinkan suatu program untuk berjalan pada suatu komputer tanpa terasa adanya
eksekusi kode pada sistem yang jauh ( remote system ).

Protokol RPC digunakan untuk membangun aplikasi klien-server yang terdistribusi. Protokol ini didasarkan pada memperluas konsep konvensional dari suatu prosedur dimana nantinya prosedur ini dapat dipanggil dimana pemanggil tidak harus mempunyai alamat yang sama dengan yang lokasi dimana prosedur ini dipanggil. Dimana proses ini dapat dilakukan pada sistem yang sama atau sistem yang berbeda namun terhubung pada jaringan. Namun terdapat kelemahan didalam bagian dari RPC yang berhubungan dengan pertukaran message melalui TCP/IP. Kegagalan terjadi dikarenakan karena penanganan kesalahan pada message yang berisi informasi yang salah. Hasil dari kelemahan ini berakibat pada bagian antar-muka RPC, yaitu bagian yang mendengarkan port RPC yang di-enable. Bagian antar-muka ini menangani objek aktivasi dari DCOM ( Distributed Component Object Model ) yang dikirimkan oleh mesin klien ke server. Kelemahan ini umumnya dimanfaatkan oleh seorang penyerang untuk dapat menjalankan suatu kode dengan kewenangan Administrator sistem lokal pada sistem yang terinfeksi. Dengan demikian, maka sistem yang diserang ini dapat diubah-ubah termasuk pengkopian dan penghilangan data sampai pembuatan user baru dengan hak tidak terbatas.

  •   Operasi Dasar RPC

Pada RPC komputer yang memanggil remote procedure berstatus sebagai client sedangkan yang menyediakan prosedur yang dipanggil berstatus sebagai server. Berikut ini adalah rangkaian kejadian ketika sebuah remote procedure call terjadi:

1. Aplikasi yang berada di client memanggil prosedur yang disediakan oleh server.

2. Nama prosedur yang dipanggil dan parameter masukannya (jika diperlukan) sebelum dikirimkan melalui jaringan komputer terlebih dahulu diubah menjadi format yang sesuai untuk pengiriman melalui jaringan atau lebih dikenal sebagai proses marshalling. Proses marshalling ini dilakukan oleh suatu perangkat lunak yang dikenal sebagai client stub.

3. Client stub kemudian memanggil prosedur mengirim paket melalui jaringan yang disediakan dan menjadi tanggung jawab sistem operasi client.

4. Sistem operasi client mengolah pesan dari client stub dan menjadi paket jaringan dan dikirimkan ke komputer server.

5. Di sisi server pesan diterima oleh sistem operasi dan diberikan kepada server stub yang melakukan proses kebalikan dari marshalling yaitu unmarshalling. Proses unmarshalling mengubah pesan dari client stub menjadi bentuk awal berupa panggilan untuk prosedur tertentu dengan parameter masukannya.

6. Server akan memanggil prosedur yang diinginkan dengan parameter masukan yang diterima dari server stub kemudian mengembalikan hasil pemanggilan prosedur kepada server stub.

7. Server stub melakukan marshalling pesan berisi hasil dari prosedur yang dipanggil, kemudian memanggil layanan pengiriman data dari sistem operasi server.

8. Sistem operasi server mengolah pesan dari server stub menjadi paket jaringan dan dikirimkan ke komputer client.

9. Sistem operasi client menerima paket dari sistem operasi server dan menyampaikannya pada client stub.

10. Client stub melakukan unmarshalling dan memberikan hasil pemanggilan prosedur kepada yang aplikasi yang melakukan RPC.

Gambar 1.1 Basic RPC operation


  • RPC: Parameter Passing


Pada saat nama prosedur dan parameter masukan diubah menjadi pesan ada beberapa hal yang perlu diperhatikan, yaitu:
1. Client dan server sangat mungkin memiliki cara pembacaan data dengan urutan yang berbeda (little endian dan big endian).
2. Jika terjadi proses encoding maka client dan server harus sepakat mengenai encoding yang digunakan.
3. Representasi tipe data dasar seperti integer, float, dan string dalam bentuk biner dapat berbeda-beda antar komputer dan bahasa pemrograman.
4. Representasi tipe data kompleks seperti array, union, objek, dan sebagainya ke dalam bentuk biner juga dapat berbeda-beda.
Untuk menyelesaikan masalah-masalah tersebut client dan server harus mengubah pesan menjadi format representasi data yang tidak bergantung mesin maupun bahasa pemrograman.



Gambar 1.2 Remote computation through RPC


  • ASynchronous RPC


Pada umumnya proses yang melakukan remote procedure call akan berhenti sementara hingga mendapat hasil dari sisi server. Proses-proses tertentu seperti: memulai layanan di komputer lain, menransfer uang ke rekening lain, melakukan entri data pada basis data tidak perlu menunggu hasil tertentu dan dapat melanjutkan eksekusi intruksi berikutnya.
RPC asinkron (aSynchronous RPC) adalah teknik sedemikian sehingga proses yang memanggil remote procedure tidak menunggu hasil dari sisi server untuk melanjutkan mengeksekusi instruksi berikutnya. Pada RPC asinkron server langsung memberikan balasan ketika pesan dari client diterima tanpa memproses pesan terlebih dahulu dan begitu balasan dari server diterima client segera melanjutkan eksekusi instruksi berikutnya.


Gambar 1.3 Asynchronuos RPC. Bandingkan dengan operasi dasar RPC pada gambar 1.1

Pada kasus lain sebuah server dapat saja membutuhkan waktu untuk menjalankan prosedur yang dipanggil oleh client. Contohnya adalah permintaan melakukan pencarian data tertentu pada server yang dapat membutuhkan waktu cukup lama. Client tidak perlu menghabiskan waktu dengan menunggu jawaban hasil pencarian melainkan dapat langsung melanjutkan eksekusi instruksi selanjutnya. Pada saat jawaban sudah selesai disusun oleh server dan dikirimkan ke client proses yang memanggil prosedur pencarian akan diinterupsi agar mengetahui bahwa jawaban dari server telah datang dan dapat mengolah jawaban tersebut sesuai kebutuhannya. Teknik ini dikenal sebagai deferred Synchronous RPC.


Gambar 1.4 client dan server berinteraksi dengan 2 aSynchronous RPC

·       
  •   RPC pada Tataran Praktis: DCE

DCE atau Distributed Computer Environment adalah sebuah Middleware yang berfungsi untuk menjadi sebuah lapisan yang menyembunyikan kerumitan lapisan sistem operasi dan lapisan komunikasi jaringan dalam RPC. DCE awalnya dikembangkan untuk sistem operasi UNIX namun saat ini telah dibuat agar dapat dijalankan di berbagai sistem operasi terkenal termasuk Windows dan VMS.
Model pemrograman dalam lingkungan DCE adalah client-server. Proses milik pengguna bertindak sebagai client yang mengakses layanan jarak jauh yang disediakan oleh server. Beberapa layanan berasal dari sistem DCE itu sendiri tetapi lainnya adalah milik aplikasi-aplikasi di server yang dibuat oleh pemrogram aplikasi-aplikasi tersebut menggunakan fasilitas DCE. Semua komunikasi antara client dan server dilakukan melalui remote procedure call.
Sebuah sistem DCE terdiri dari beberapa komponen termasuk bahasa-bahasa pemrograman, pustaka-pustaka, daemon-daemon, program-program utilitas, dan lain-lain. Untuk memungkinkan client dan server mengerti satu sama lain digunakan sebuah definisi interface (antarmuka) yang disebut IDL atau Interface Definition Language. File IDL digunakan untuk menempatkan deklarasi prosedur dalam format yang mirip dengan ANSI C termasuk definisi tipe-tipe data, deklarasi konstanta, dan informasi lainnya yang dibutuhkan untuk melakukan marshalling pada parameter dan unmarshalling untuk hasil prosedur, Pembuat aplikasi juga dapat menuliskan komentar mengenai prosedur yang dideklarasikan dalam IDL.
Sebuah aplikasi client server dalam sistem DCE dibuat dengan urutan sebagai berikut:
1. Memanggil sebuah aplikasi bernama uuidgen yang akan membuat sebuah purwarupa (prototype) dari sebuah file IDL berisi sebuah identitas untuk interface prosedur yang dijamin tidak akan sama dengan interface lain yang dibuat dengan uuidgen yang sama. Identitas tersebut terjamin dikarenakan dalam pembuatannya waktu dan lokasi menjadi parameter yang diperhitungkan. Identitas tersebut terdiri dari sebuah bilangan biner 128 bit tertulis sebagai rentetan karakter ASCII atau dalam bentuk heksadesimal.
2. Mengisi nama prosedur dan parameter-parameternya dalam file IDL yang telah dibuat.
3. Mengkompilasi file IDL dengan IDL compiler yang menghasilkan:
a. Sebuah file header (contoh: interface.h dalam bahasa C),
b. Stub untuk client,
c. Stub untuk server.
4. Menulis kode sumber aplikasi di client dan server dan mengkompilasi keduanya. Hasil kompilasi ditautkan (linked) dengan stub dan menghasilkan binary executeable.


Gambar 1.5 langkah-langkah penulisan client dan server di DCE RPC

Setelah pembuatan aplikasi selesai client dapat mengakses layanan dari server dengan ketentuan dan urutan sebagai berikut:
1. Layanan di server tersebut harus mendapatkan nomor port tertentu agar dapat sistem operasi pada server dapat membedakannya dari proses-proses lain yang menjadi tujuan pesan-pesan yang datang. Pasangan layanan dan nomor portnya disimpan dalam sebuah tabel oleh DCE daemon.
2. Layanan didaftarkan pada sebuah layanan pencarian seperti directory service yang dapat dijangkau client.
3. Client yang akan melakukan RPC terlebih dahulu mencari alamat dari server yang memiliki nama prosedur yang dipanggil melalui directory service di mana server mendaftarkan layanannya.
4. Client yang menghubungi server yang telah diketahui alamatnya dan menanyakan kepada DCE daemon port yang sesuai dengan layanan yang diminta.
5. Setelah nomor port diketahui barulah client melakukan RPC.



Gambar 1.6 client-to-server binding in DCE


  • Kelebihan RPC
· Relatif mudah digunakan
Pemanggilan remote procedure tidak jauh berbeda dibandingkan pemanggilan local procedure. Sehingga pemrogram dapat berkonsentrasi pada software logic, tidak perlu memikirkan low level details seperti soket, marshalling & unmarshalling.
· Robust (Sempurna)
Sejak tahun 1980-an RPC telah banyak digunakan dalam pengembangan mission-critical application yg memerlukan scalability, fault tolerance & reliability.

  • Kekurangan RPC
- Tidak fleksibel terhadap perubahan.
- Static relationship between client & server at run-time.
- Berdasarkan prosedural/structured programming yang sudah ketinggalan jaman dibandingkan OOP.
· Kurangnya location transparency.
- Misalnya premrogram hanya boleh melakukan pass by value, bukan pass by reference.
- Komunikasi hanya antara 1 klien & 1 server (one-to-one at a time).
- Komunikasi antara 1 klien & beberapa server memerlukan beberapa koneksi yang terpisah.


Referensi:

  • Remote Procedure Call RPC, 2010
[tanggal akses 14 Maret 2013]

  • Periyadi, Zani Tafta, dkk. 2009. Sistem Tersebar. Bandung: Politeknik Telkom
Link:
[tanggal akses 14 Maret 2013]

  • Marki Tommy. 2006. Tugas Akhir EC5010 Keamanan Sistem Informasi Eksploitasi RPC pada Sistem Operasi Windows. Bandung: Sekolah Tinggi Elektro dan Informatika Institut Teknologi Bandung
Link:
[tanggal akses 14 Maret 2013]

2 komentar:

  1. permisi gan, saya ada sedikit tulisan mengenai protokol websocket dalam beberapa bahasa pemrograman berikut: http://datacomlink.blogspot.co.id/2015/11/implementasi-server-websocket-rfc-6455.html ditunggu feedback-nya ya gan, semoga menambah wawasan bersama.. terima kasih gan..

    BalasHapus
  2. Terimakasih kakak atas artikel nya, terus tulis artikel lainnya ya kak. O iya, perkenalkan nama saya putri1622520017 dari kampus ISB Atma Luhur

    BalasHapus