2.4.1 Komunikasi
Komunikasi antar proses adalah jantung dari sistem terdistribusi. Pertukaran informasi antar mesin yang berbeda merupakan hal yang sangat penting. Empat
model komunikasi yang sering digunakan adalah
Remote Procedure Call
RPC [27],
Remote Method Invocation
RMI [28],
Message-Oriented Middleware
MOM [29] dan
stream
[25]. Model komunikasi yang dipilih pada penelitian ini adalah RMI karena dapat diimplentasikan pada
platform
komputer yang berbeda. Ruang lingkup penelitian yang berupa jaringan komputer lokal juga menjadi pertimbangan pemilihan
RMI.
Gambar 2.4 Diagram Sekuensial Untuk
Remote Procedure Call
RPC [30] RMI merupakan pengembangan dari RPC yang mendukung
polymorphism
[31]. Pada level dasar, RMI mirip dengan mekanisme RPC seperti pada Gambar 2.4.
Komputer A
Komputer B
Jaringan Aplikasi
Klien Penyedia
Layanan
Program menunggu
respon
Program melanjutkan
eksekusi kode berikutnya
Memanggil layanan
Prosedur lokal dieksekusi dan
mengembalikan hasilnya
return
Universitas Sumatera Utara
RMI mempunyai beberapa kelebihan dibandingkan dengan RPC karena merupakan bagian dari pendekatan berorientasi objek dalam bahasa pemrograman java.
Konektivitas pada sistem menggunakan fungsi
native
, artinya RMI dapat menggunakan pendekatan yang alami
natural
, langsung dan sangat mendukung teknologi komputasi terdistribusi sehingga dapat ditambahkan fungsi java pada
sistem. Sedangkan RPC tidak dapat menyediakan fungsi yang tidak tersedia pada
platform
target. Untuk mengimplementasikan fitur
cross-platform
seperti pada java, RPC membutuhkan usaha yang lebih besar dibandingkan dengan RMI. RPC harus
mengkonversi argumen antar arsitektur sehingga masing-masing komputer dapat menggunakan tipe data
native
. Keterbatasan RMI dikarenakan pemanggilan fungsi hanya dapat dilakukan dengan java. Untuk memanggil fungsi dalam bahasa lain RMI
bergantung pada teknologi lain seperti JNI
Java Native Interface
[32], JDBC
Java DataBase Connectivity
[33], RMI-IIOP
Remote Method Invocation over Internet Inter-Orb Protocol
[34] dan lain-lain. Menurut Nester [35], pada implementasinya RMI akan lambat khususnya
untuk perhitungan yang membutuhkan performa tinggi. Hal ini dikarenakan RMI dirancang berdasarkan serialisasi objek yang lambat dan tidak mendukung performa
yang tinggi untuk komunikasi jaringan. Selain itu tambahan
byte-code
yang diinterpretasikan menggunakan JVM
Java Virtual Machine
[36] membuat RMI lebih lambat dibandingkan dengan RPC. Tetapi, performa yang lebih baik didapat
dari RMI pada saat implementasi pemanggilan fungsi yang bersifat
multiple- concurrent
karena dukungan
thread
pada bahasa java.
Universitas Sumatera Utara
Sistem RMI dirancang untuk menyediakan pondasi bagi komputasi terdistribusi yang berorientasi objek. Arsitekturnya memungkinkan untuk
penambahan
server
dan tipe referensi sehingga RMI dapat menambah fitur dengan terkoordinir [37].
Gambar 2.5
Stub
dan
Skeleton
[37] Ketika klien menerima referensi ke sebuah
server
, RMI mengunduh
stub
yang menerjemahkan panggilan terhadap referensi menjadi panggilan jarak jauh ke
server
. Seperti yang ditunjukkan pada Gambar 2.5,
stub
menggabungkan argumen ke prosedur menggunakan serialisasi objek dan mengirimkannya ke
server
. Di sisi
server
sistem RMI menerima panggilan tersebut dan terhubung ke
skeleton
, yang bertanggung jawab untuk memisahkan argumen dan mengimplementasikan prosedur
yang dipanggil. Ketika implementasi di sisi
server
telah selesai, apakah hasilnya adalah nilai atau
exception
,
skeleton
akan menggabungkan hasil tersebut dan mengirimkannya ke
stub
.
Stub
akan memisahkan balasan sesuai dengan yang dikirimkan dari
server
.
Stub
dan
skeleton
biasanya dibuat menggunakan program
expServer.getPolicy; Menggabung parameter
Kirim permintaan Memisahkan parameter
Invoke implementation return new TodayPolicy
Menerima hasil atau exception Menggabung hasil atau exception
Kirim balasan Memisahkan balasan
Kembalikan nilai atau exception Stub
Skel Impl
Universitas Sumatera Utara
kompilasi yang disebut
rmic
.
Stub
menggunakan referensi untuk “berbicara” dengan
skeleton
. Penelitian ini menggunakan bahasa java karena RMI hanya dapat
diimplementasikan dengan bahasa tersebut. Implementasi RMI membutuhkan tiga buah lapisan abstraksi yang diilustrasikan pada Gambar 2.6.
Gambar 2.6 Ilustrasi Implementasi RMI [38] Fungsi ketiga lapisan abstraksi tersebut adalah:
a.
Stub
dan
Skeleton
yang menerima pemanggilan fungsi yang dibuat oleh klien ke variabel referensi di
interface
dan melewatkannya ke layanan RMI yang jauh.
b.
Remote Reference
digunakan untuk menginterpretasikan dan referensi manajemen yang dibuat dari klien ke layanan objek yang jauh.
c.
Transport Layer
, berdasarkan koneksi TCPIP antara mesin-mesin di dalam jaringan komputer.
Stub dan Skeleton Remote Reference
Layer Program
Klien Stub dan Skeleton
Remote Reference Layer
Program Server
Transport Layer Sistem RMI
Universitas Sumatera Utara
Klien yang akan menghubungi
server
RMI harus mempunyai referensi
server
RMI terlebih dahulu. Penggunaan fungsi Naming.lookup adalah mekanisme yang umum digunakan oleh klien untuk menginisialisasi referensi
server
RMI. Yang dilakukan oleh fungsi ini adalah menggunakan
stub
untuk membuat pemanggilan fungsi jarak jauh terhadap
rmiregistry
, yang kemudian mengembalikan referensi pada objek yang melakukan permintaan menggunakan fungsi lookup Gambar 2.7.
Setiap referensi jarak jauh berisi nama
server
dan nomor
port
agar klien dapat menentukan lokasi
Virtual Machine
yang melayani objek jarak jauh tertentu. Referensi nama
server
dan nomor
port
yang diperoleh klien akan digunakan untuk membuka koneksi soket ke
server
yang dituju.
Gambar 2.7 Pemanggilan Referensi
Server
oleh Klien
1 Membuat interface untuk referensi objek jarak jauh TesInterf ti;
ti = TesInterfNaming.lookup“rmisvrnamaObjek”;
3 Memanggil fungsi lookup namaObjek dari rmiregistry dengan
menggunakan referensi yang dibuat pada langkah 2
4 Rmiregistry mengembalikan referensi
pada namaObjek 5 Naming.lookup mengembalikan referensi
jarak jauh pada namaObjek
RMI Client RMI Registry
2 Membuat objek baru dari class stub yang sedang berjalan pada server RMI rmisvr untuk class stub
Universitas Sumatera Utara
Pemanggilan fungsi pada
server
dilakukan oleh klien dan akan diproses melalui
stub
dan
skeleton
. Secara umum, parameter yang dapat dilewatkan pada stub dan skeleton hanyalah variabel
native
seperti
String
dan
Integer
. Akan tetapi, pada umumnya parameter yang akan dikirimkan baik melalui
server
ataupun klien tidak hanya berupa variabel
native
. Pengiriman objek dari sebuah
class
tertentu, baik
class
yang didefinisikan oleh Java maupun yang dibuat oleh pengembang program memerlukan implementasi class Serialization. Dengan adanya implementasi
serialisasi, objek tertentu dapat dilewatkan melalui
stream
baik dari klien menuju
server
maupun sebaliknya.
2.4.2 Kebutuhan Penggunaan Sistem Terdistribusi