04 January 2016

Remote Methode Invocation

DISTRIBUTED SYSTEMS Concept and Design – Fifth Edition
George Coulouris
Cambridge University
Jean Dollimore
formerly of Queen Mary, University of London
Tim Kindberg
matter 2 media
Gordon Blair
Lancaster University

Bab ini langkah-langkah melalui paradigma remote metode invocation diperkenalkan di Bab 2

(Teknik komunikasi tidak langsung dibahas dalam Bab 6). Bab dimulai dengan

memeriksa layanan yang paling primitif, request-reply komunikasi, yang mewakili

perangkat tambahan yang relatif kecil dengan primitif komunikasi interprocess mendasari

dibahas dalam Bab 4.
Bab ini kemudian berlanjut dengan memeriksa dua yang paling menonjol teknik remote doa untuk komunikasi dalam sistem terdistribusi:

Remote prosedur panggilan (RPC) pendekatan memperluas pemrograman umum
abstraksi dari panggilan prosedur untuk lingkungan terdistribusi, memungkinkan pemanggilan Proses untuk memanggil prosedur dalam node remote seolah-olah itu adalah lokal.

Jarak Jauh metode doa (RMI) mirip dengan RPC tapi untuk objek terdistribusi, dengan
menambahkan manfaat dalam hal menggunakan konsep pemrograman berorientasi objek dalam sistem terdistribusi dan juga memperluas konsep sebuah referensi obyek ke

lingkungan didistribusikan global, dan memungkinkan penggunaan referensi objek sebagai

parameter dalam pemanggilan jarak jauh.



Bab ini juga dilengkapi Java RMI sebagai studi kasus dari metode remote doa

Pendekatan (wawasan lebih lanjut juga dapat diperoleh

5.1 Pendahuluan

Bab ini berkaitan dengan proses bagaimana (atau entitas pada tingkat yang lebih tinggi dari abstraksi

seperti benda atau jasa) berkomunikasi dalam sistem terdistribusi, pemeriksaan, di

khusus, paradigma remote doa didefinisikan dalam Bab 2:

Meminta-balasan protocolsrepresent pola di atas pesan lewat dan dukungan
pertukaran dua arah pesan seperti ditemui dalam komputasi client-server. Di

tertentu, protokol seperti memberikan relatif dukungan tingkat rendah untuk meminta

pelaksanaan operasi jarak jauh, dan juga memberikan dukungan langsung untuk RPC dan

RMI, dibahas di bawah.

Theearliest dan mungkin contoh paling terkenal dari lebih programmer-ramah
Model adalah perpanjangan dari model panggilan prosedur konvensional untuk didistribusikan sistem (remote procedure call, atau RPC, model), yang memungkinkan klien

program untuk memanggil prosedur transparan dalam program server berjalan di terpisah

proses dan umumnya di komputer yang berbeda dari klien.

Pada 1990-an, model pemrograman berbasis objek diperpanjang untuk memungkinkan benda dalam proses yang berbeda untuk berkomunikasi dengan satu sama lain dengan cara remote Metode doa (RMI). RMI adalah perpanjangan dari pemanggilan metode lokal yang
memungkinkan sebuah objek yang tinggal di salah satu proses untuk memohon dilakukandengan obyek yang tinggal di proses lain.

Perhatikan bahwa kita menggunakan istilah 'RMI' untuk merujuk kepada doa metode remote dengan cara yang umum

- Ini tidak harus bingung dengan contoh-contoh tertentu doa metode remote

seperti Java RMI.



Kembali ke diagram pertama kali diperkenalkan di Bab 4 (dan direproduksi dalam Gambar5.1

Gambar 5.1 lapisan Middleware Aplikasi, layanan middleware lapisan

Mendasari primitif komunikasi interprocess: UDP dan TCPIni  bab

Terpencil doa, komunikasi tidak langsung

Soket, pesan lewat, dukungan multicast, jaringan overlay

(Dan Bab 6)

), Bab ini, bersama-sama dengan Bab 6, terus penelitian kami konsep middleware

dengan berfokus pada lapisan atas komunikasi antar. Secara khusus, Bagian 5.2

melalui 5,4 fokus pada gaya komunikasi yang tercantum di atas, dengan Bagian 5.5

menyediakan studi kasus yang lebih kompleks, Java RMI

5.2 protokol Permintaan-balasan               Bentuk komunikasi dirancang untuk mendukung peran dan pertukaran pesan diinteraksi client-server biasa. Dalam kasus normal, permintaan-balasan komunikasisinkron karena blok proses klien sampai balasan tiba dari server. Saya tjuga bisa diandalkan karena balasan dari server secara efektif pengakuanke klien. Asynchronous request-reply komunikasi adalah analternative yang mungkinberguna dalam situasi di mana klien mampu untuk mengambil balasan kemudian - lihat Bagian 7.5.2.Bursa client-server dijelaskan dalam paragraf berikut dalam halyang receiveoperations sendand dalam API Java untuk datagrams UDP, meskipun banyakimplementasi saat ini menggunakan TCP stream. Sebuah protokol dibangun di atas datagram Menghindarioverhead yang tidak perlu terkait dengan protokol TCP stream. Khususnya:• Ucapan Terima Kasih yang berlebihan, karena permintaan yang diikuti oleh balasan.• Membuat koneksi yang melibatkan dua pasang ekstra pesan di sampingPasangan diperlukan untuk permintaan dan balasan.• Flow control adalah berlebihan untuk sebagian besar doa, yang lulus hanya kecilargumen dan hasil.Protokol request-reply • Protokol kita jelaskan di sini didasarkan pada trioprimitif komunikasi, doOperation, getRequestand sendReply, seperti yang ditunjukkan pada Gambar 5.2Gambar 5.2 Permintaan-balasan komunikasiPermintaan Server Client Balasan pesan pesan getRequest pilih operasi sendReply doOperation (Tunggu) (kelanjutan) mengeksekusi operasi               Ini protokol request-reply cocok permintaan untuk balasan. Ini mungkin dirancang untuk memberikan jaminan pengiriman tertentu. Jika UDP datagrams digunakan, jaminan pengiriman harus disediakan oleh permintaan-balasan protokol, yang dapat menggunakan server pesan balasan sebagai pengakuan dari pesan permintaan klien. Gambar 5.3 menguraikan tiga primitif komunikasi.               ThedoOperationmethod digunakan oleh klien untuk memanggil operasi jarak jauh. Nya argumen menentukan server jauh dan yang operasi untuk memohon, bersama-sama dengan informasi tambahan (argumen) yang dibutuhkan oleh operasi. hasilnya adalah array bytemengandung jawabannya. Hal ini diasumsikan bahwa klien menelepon doOperation

Gambar 5.3 Operasi protokol request-reply

byte publik [ ] doOperation ( RemoteRef s , int operationId , byte [ ] argumen )

Mengirim pesan permintaan ke server jauh dan mengembalikan jawabannya .

Argumen menentukan server jauh , operasi yang akan dipanggil dan

argumen operasi itu.

byte publik [ ] getRequest ( ) ;

Mengakuisisi permintaan klien melalui port server .

public void sendReply ( byte [ ] balasan , InetAddress clientHost , int clientPort ) ;

Mengirim pesan balasan replyto klien di alamat Internet dan pelabuhan .

argumen ke array byte dan unmarshals hasil dari array byte yang

dikembalikan. Argumen pertama doOperation adalah turunan dari RemoteRef kelas,

yang mewakili referensi untuk server remote. Kelas ini menyediakan metode untuk mendapatkan

alamat Internet dan port dari server yang terkait. The doOperationmethod mengirimkan

pesan permintaan ke server yang alamat Internet dan port yang ditentukan dalam remote

referensi yang diberikan sebagai argumen. Setelah mengirimkan pesan permintaan, doOperation

memanggil receiveto mendapatkan pesan balasan, yang itu ekstrak hasil dan mengembalikannya ke

pemanggil. Pemanggil doOperationis diblokir sampai server melakukan yang diminta

operasi dan mengirimkan pesan balasan ke proses client.

getRequestis digunakan oleh proses server untuk memperoleh permintaan layanan, seperti yang ditunjukkan pada

Gambar 5.3

Gambar 5.3 Operasi protokol request-reply

byte publik [] doOperation (RemoteRef s, int operationId, byte [] argumen)

Mengirim pesan permintaan ke server jauh dan mengembalikan jawabannya.

Argumen menentukan server jauh, operasi yang akan dipanggil dan

argumen operasi itu.

byte publik [] getRequest ();

Mengakuisisi permintaan klien melalui port server.

public void sendReply (byte [] balasan, InetAddress clientHost, int clientPort);

Mengirim pesan balasan replyto klien di alamat Internet dan pelabuhan.

. Ketika server telah dipanggil operasi yang ditentukan, kemudian menggunakan sendReply

untuk mengirim pesan balasan ke klien. Ketika pesan balasan diterima oleh klien

yang doOperationis asli diblokir dan pelaksanaan program klien terus.

Informasi yang akan dikirim dalam pesan permintaan atau pesan balasan adalah

ditunjukkan pada Gambar 5.4

Gambar struktur pesan 5.4 Permintaan balasan

messageType int (0 = Permintaan, 1 = Reply)

requestID int

remoteReference RemoteRef

operationId int atau Operasi

argumen // array byte

. Field pertama menunjukkan apakah pesan tersebut adalah Peminta Balasan

pesan. Bagian kedua, requestID, berisi pengenal pesan. Sebuah doOperationin

klien menghasilkan requestIdfor setiap pesan permintaan, dan salinan Server ID ini

ke dalam pesan balasan yang sesuai. Hal ini memungkinkan doOperationto memeriksa bahwa balasan

Pesan adalah hasil dari permintaan saat ini, tidak tertunda panggilan sebelumnya. Bidang ketiga adalah

referensi terpencil. Bidang keempat adalah pengidentifikasi untuk operasi yang akan dipanggil. Untuk

Misalnya, operasi di sebuah antarmuka mungkin diberi nomor 1, 2, 3, ..., jika klien dan

Server menggunakan bahasa yang sama yang mendukung refleksi, representasi dari operasi

itu sendiri dapat dimasukkan ke dalam bidang ini

Pesan pengenal • Setiap skema yang melibatkan manajemen pesan ke

memberikan sifat tambahan seperti pengiriman pesan dapat diandalkan atau permintaan-balasan

komunikasi mensyaratkan bahwa setiap pesan memiliki pesan pengenal unik dimana

mungkin dirujuk. Sebuah identifier pesan terdiri dari dua bagian:

requestID, yang diambil dari urutan meningkatnya bilangan bulat dengan pengiriman
proses;

pengidentifikasi untuk proses pengirim, misalnya, pelabuhan dan Internet alamatnya.
Bagian pertama membuat identifier unik tertalu pengirim, dan bagian kedua membuatnya

unik dalam sistem terdistribusi. (Bagian kedua dapat diperoleh secara independen -untuk

Misalnya, jika UDP digunakan, dari pesan yang diterima.)

Ketika nilai requestIdreaches maksimum nilai untuk unsigned

bilangan bulat (misalnya, 2

32

- 1) itu adalah ulang ke nol. Satu-satunya batasan di sini adalah bahwa

seumur hidup pengenal pesan harus jauh kurang dari waktu yang dibutuhkan untuk menguras

nilai dalam urutan bilangan bulat.

Model kegagalan dari protokol request-reply • Jika tiga primitif doOperation,

getRequestand sendReplyare dilaksanakan selama datagrams UDP, maka mereka menderita

kegagalan komunikasi yang sama. Itu adalah:

Mereka menderita kegagalan kelalaian.
Pesan tidak dijamin akan disampaikan dalam rangka pengirim.
Selain itu, protokol dapat menderita dari kegagalan proses (lihat Bagian 2.4.2). Kami

menganggap bahwa proses memiliki kegagalan kecelakaan. Artinya, ketika mereka menghentikan, mereka tetap dihentikan -

mereka tidak menghasilkan perilaku Bizantium.

Untuk memungkinkan kesempatan ketika server telah gagal atau permintaan atau balasan pesan adalah

turun, doOperationuses timeout ketika menunggu untuk mendapatkan balasan server

pesan. Tindakan yang dilakukan ketika terjadi timeout tergantung pada jaminan pengiriman

yang ditawarkan

Pesan Pengenal • SETIAP SKEMA Yang melibatkan manajemen Pesan Ke

memberikan Sifat Tambahan seperti Pengiriman Pesan can be diandalkan ATAU permintaan Negara-Balasan

communication mensyaratkan bahwa SETIAP Pesan memiliki Pesan Pengenal unik Dimana

dirujuk Mungkin. SEBUAH identifier Pesan terdiri Dari doa Bagian:

requestID, Yang diambil Dari Urutan meningkatnya bilangan bulat DENGAN Pengiriman
Proses;

pengidentifikasi untuk review Proses Pengirim, such as inviting participation, Pelabuhan Dan Internet alamatnya.
Bagian Pertama MEMBUAT identifier unik pula tertalu Pengirim, Dan Bagian kedua membuatnya

unik hearts Sistem terdistribusi. (Bagian kedua can be TIMAH Beroperasi Tbk -untuk

Such as inviting participation, JIKA UDP digunakan, Dari Pesan Yang diterima.)

Ketika Nilai requestIdreaches Maksimum Nilai untuk review unsigned

bilangan bulat (such as inviting participation, 2

32

- 1) ITU Adalah ulang Ke nol. Satu-Satunya Batasan here Adalah bahwa

Seumur Hidup Pengenal Pesan Harus JAUH Kurang Dari Waktu Yang Dibutuhkan menguras untuk review

Nilai hearts Urutan bulat bilangan.

Model Kegagalan Dari Protokol request-reply • JIKA Tiga primitif doOperation,

getRequestand sendReplyare dilaksanakan selama datagram UDP, Maka mereka menderita

Kegagalan communication Yang sama. Adalah Itu:

Mereka menderita Kegagalan kelalaian.
Pesan TIDAK Dijamin akan disampaikan hearts Rangka Pengirim.
Selain ITU, Protokol can be menderita Dari Kegagalan Proses (LIHAT Bagian 2.4.2). Kami

menganggap bahwa Proses memiliki Kegagalan Kecelakaan. Artinya, ketika mereka menghentikan, mereka Tetap dihentikan -

mereka TIDAK menghasilkan Perilaku Bizantium.

Untuk review memungkinkan kesempatan ketika Server has Gagal ATAU permintaan Negara ATAU Balasan Pesan Adalah

turun-, doOperationuses batas waktu ketika Menunggu untuk review get Balasan Server

Pesan. Tindakan Yang dilakukan ketika Terjadi batas waktu tergantung PADA Jaminan Pengiriman

Yang ditawarkan

Kehilangan pesan balasan • Jika server telah mengirimkan balasan ketika menerima

duplikat permintaan akan perlu menjalankan operasi lagi untuk mendapatkan hasil, kecuali

telah disimpan hasil eksekusi asli. Beberapa server dapat mengeksekusi mereka

operasi lebih dari sekali dan mendapatkan hasil yang sama setiap kali. Anidempotent

operationis sebuah operasi yang dapat dilakukan berulang kali dengan efek yang sama seperti jika

telah dilakukan tepat satu kali. Sebagai contoh, operasi untuk menambahkan elemen untuk set

adalah operasi idempoten karena selalu akan memiliki efek yang sama di set setiap

Waktu itu dilakukan, sedangkan operasi untuk menambahkan item ke urutan bukanlah

operasi idempoten karena meluas urutan setiap kali dilakukan. Sebuah server

yang kegiatan usahanya semua idempoten tidak perlu mengambil langkah-langkah khusus untuk menghindari mengeksekusi

operasinya lebih dari sekali.

Sejarah • Untuk server yang memerlukan transmisi ulang balasan tanpa re-eksekusi

operasi, sejarah dapat digunakan. Istilah 'sejarah' digunakan untuk merujuk kepada struktur yang

berisi catatan (balasan) pesan yang telah dikirimkan. Entri dalam sejarah

berisi permintaan pengenal, pesan dan sebuah identifier dari klien yang itu

dikirim. Tujuannya adalah untuk memungkinkan server untuk memancarkan kembali replymessages ketika klien

proses meminta mereka. Masalah yang terkait dengan penggunaan sejarah adalah memori

biaya. Sejarah akan menjadi sangat besar kecuali server dapat mengetahui bahwa pesan akan

tidak lagi diperlukan untuk pengiriman ulang.

Sebagai klien dapat membuat hanya satu permintaan pada suatu waktu, server dapat menafsirkan setiap

meminta sebagai pengakuan balasan sebelumnya. Oleh karena itu sejarah perlu mengandung

hanya yang terakhir balasan pesan yang dikirim ke setiap klien. Namun, volume pesan balasan

dalam sejarah server mungkin masih menjadi masalah ketika memiliki sejumlah besar klien. Ini

diperparah oleh kenyataan bahwa, ketika proses klien berakhir, tidak

mengakui balasan terakhir ini telah menerima - pesan dalam sejarah oleh karena itu

biasanya dibuang setelah jangka waktu terbatas

Gaya protokol pertukaran • Tiga protokol, yang menghasilkan perilaku yang berbeda-beda di

Kehadiran kegagalan komunikasi yang digunakan untuk melaksanakan berbagai jenis permintaan

tingkah laku. Mereka awalnya diidentifikasi oleh Spector [1982]:

permintaan (R) protokol;
permintaan balasan (RR) protokol;
permintaan-balasan-balasan mengakui (RRA) protokol.
Pesan disahkan pada protokol ini dirangkum dalam Gambar 5.5. Dalam protokol R,

a Requestmessage tunggal dikirim oleh klien ke server. Protokol R dapat digunakan

ketika tidak ada nilai yang akan kembali dari operasi remote dan klien membutuhkan

ada konfirmasi bahwa operasi telah dieksekusi. Klien dapat melanjutkan

segera setelah pesan permintaan dikirim karena tidak ada perlu menunggu balasan

pesan. Protokol ini dilaksanakan selama datagrams UDP dan karena itu menderita

kegagalan komunikasi yang sama.

Protokol RR berguna bagi sebagian besar bursa client-server karena didasarkan pada

permintaan-balasan protokol. Pesan penghargaan khusus tidak diperlukan,

karena server pesan balasan dianggap sebagai pengakuan dari klien

pesan permintaan. Demikian pula, panggilan berikutnya dari klien dapat dianggap sebagai

pengakuan dari server pesan balasan. Sebagaimana telah kita lihat, komunikasi

kegagalan karena datagrams UDP yang hilang mungkin tertutup oleh pengiriman ulang

permintaan dengan duplikat penyaringan dan penghematan balasan dalam sejarah untuk pengiriman ulang.

Protokol RRA didasarkan pada pertukaran tiga pesan: balasan permintaan-replyacknowledge. The Mengakui replymessage berisi requestIdfrom yang

membalas pesan yang diakui. Hal ini akan memungkinkan server untuk membuang entri dari

sejarahnya. Kedatangan requestIdin pesan pengakuan akan

ditafsirkan sebagai mengakui menerima semua pesan balasan dengan requestIds lebih rendah, sehingga

hilangnya pesan pengakuan tidak berbahaya. Meskipun pertukaran melibatkan

pesan tambahan, itu tidak perlu menghalangi klien, seperti pengakuan mungkin

ditransmisikan setelah jawabannya telah diberikan kepada klien. Namun itu tidak menggunakan pengolahan

dan sumber daya jaringan. Latihan 5.10 menunjukkan optimasi untuk protokol RRA.

Penggunaan TCP stream untuk melaksanakan permintaan-balasan protokol • Bagian 4.2.3 disebutkan

yang seringkali sulit untuk menentukan ukuran yang sesuai untuk buffer di mana untuk menerima

datagrams. Dalam protokol request-reply, ini berlaku untuk buffer digunakan oleh server untuk

menerima pesan permintaan dan oleh klien untuk menerima balasan. Panjang terbatas

datagrams (biasanya 8 kilobyte) tidak dapat dianggap sebagai yang memadai untuk digunakan dalam transparan

sistem RMIor RPC, karena argumen atau hasil dari prosedur mungkin dari berbagai ukuran

Keinginan untuk menghindari menerapkan protokol multipacket adalah salah satu alasan untuk

memilih untuk menerapkan protokol request-reply melalui TCP stream, argumen yang memungkinkan

dan hasil dari berbagai ukuran yang akan dikirim. Secara khusus, Jawa serialisasi objek adalah

protokol streaming yang memungkinkan argumen dan hasil yang akan dikirim melalui aliran antara

klien dan server, sehingga memungkinkan untuk koleksi benda-benda dari berbagai ukuran untuk menjadi

ditransmisikan andal. Jika protocolis TCP digunakan, memastikan permintaan itu dan membalas

Pesan yang disampaikan andal, sehingga tidak ada kebutuhan untuk protokol request-reply untuk menangani

dengan transmisi pesan dan penyaringan ofduplicates atau dengan sejarah. Sebagai tambahan

mekanisme aliran-kontrol memungkinkan argumen besar dan hasil yang akan berlalu tanpa

mengambil langkah-langkah khusus untuk menghindari besar penerima. Jadi protokol TCP adalah

dipilih untuk protokol request-reply karena dapat menyederhanakan pelaksanaannya. Jika

permintaan berturut-turut dan balasan antara pasangan client-server yang sama dikirim melalui

aliran yang sama, koneksi overhead yang tidak perlu berlaku untuk setiap remote doa. Juga,

overhead karena pesan pengakuan TCP berkurang ketika pesan balasan

berikut segera setelah pesan permintaan.

Howeever, jika aplikasi tidak memerlukan semua fasilitas yang ditawarkan oleh TCP,

lebih efisien, protokol khusus disesuaikan dapat diimplementasikan di atas UDP. Untuk

Misalnya, Sun NFS tidak memerlukan dukungan untuk pesan ukuran terbatas, karena saya

mentransmisikan tetap ukuran blok berkas antara klien dan server. Selain itu, yang

operasi dirancang untuk idempoten, sehingga tidak masalah jika operasi dieksekusi

lebih dari sekali untuk memancarkan kembali pesan balasan hilang, sehingga tidak perlu untuk

mempertahankan sejarah.

HTTP: Contoh dari protokol request-reply • Bab 1 memperkenalkan HyperText yang

Transfer Protocol (HTTP) yang digunakan oleh klien web browser untuk membuat permintaan ke server web

dan menerima balasan dari mereka. Untuk rekap, server web mengelola sumber daya diimplementasikan

dengan cara yang berbeda:

sebagai data -misalnya teks halaman HTML, gambar atau kelas applet;
sebagai program -misalnya, servlets [java.sun.com III], atau PHP atau Python
program yang berjalan pada web server.

Permintaan klien menentukan URL yang mencakup nama host DNS dari web server dan

opsional nomor port pada web server serta identifier dari sumber daya pada itu

Server.

HTTP adalah protokol yang menentukan pesan yang terlibat dalam permintaan-balasan

pertukaran, metode, argumen dan hasil, dan aturan untuk mewakili

(Marshalling) mereka dalam pesan. Mendukung satu set tetap metode (GET, PUT,

POST, dll) yang berlaku untuk semua sumber daya server. Hal ini tidak seperti sebelumnya

protokol dijelaskan, di mana masing-masing layanan memiliki set sendiri operasi. Sebagai tambahannya

memohon metode pada sumber daya web, protokol memungkinkan untuk negosiasi konten dan

otentikasi password-gaya

negosiasi konten: permintaan Klien 'dapat mencakup informasi sebagai data yang

representasi mereka dapat menerima (misalnya, bahasa atau jenis media), memungkinkan

server untuk memilih representasi yang paling sesuai untuk pengguna.

Otentikasi: Kredensial dan tantangan yang digunakan untuk mendukung sandi bergaya

otentikasi. Pada usaha pertama untuk mengakses area yang dilindungi sandi, server

balasan berisi tantangan berlaku untuk sumber daya. Bab 11 menjelaskan tantangan.

Ketika klien menerima tantangan, mendapat pengguna untuk mengetik nama dan password dan

menyerahkan mandat yang terkait dengan permintaan berikutnya.

HTTP diimplementasikan melalui TCP. Dalam versi asli dari protokol, setiap interaksi client terdiri dari langkah-langkah berikut:

Permintaan klien dan server menerima koneksi pada port default server
atau di pelabuhan yang ditentukan dalam URL.

Klien mengirimkan pesan permintaan ke server.
Server mengirimkan pesan balasan ke klien.
Sambungan ditutup.
Namun, membangun dan menutup koneksi untuk setiap pertukaran request-reply adalah

mahal, overloading server dan menyebabkan terlalu banyak pesan yang akan dikirim melalui

jaringan. Mengingat bahwa browser umumnya membuat beberapa permintaan untuk sama

server misalnya, untuk mendapatkan gambar dalam halaman hanya disediakan -a versi dari

protokol (HTTP 1.1, lihat RFC 2616 [Fielding et al.1999]) menggunakan connections- persisten

koneksi yang tetap terbuka melalui serangkaian pertukaran permintaan-balasan antara klien

dan server. Sambungan persisten dapat ditutup oleh klien atau server setiap saat dengan

mengirim indikasi ke peserta lain. Server akan menutup koneksi persisten

ketika telah diam selama jangka waktu. Ada kemungkinan bahwa klien dapat menerima

pesan dari server mengatakan bahwa koneksi ditutup sementara itu adalah di tengah-tengah

mengirim permintaan lain atau permintaan. Dalam kasus tersebut, browser akan mengirim ulang permintaan

tanpa keterlibatan pengguna, asalkan operasi yang terlibat adalah idempoten. Untuk

Misalnya, metode GETdescribed bawah ini idempoten. Di mana non-idempoten

operasi yang terlibat, browser harus berkonsultasi pengguna apa yang harus dilakukan selanjutnya.

Permintaan dan balasan yang disusun kedalam pesan sebagai string teks ASCII, tetapi

sumber daya dapat direpresentasikan sebagai urutan byte dan dapat dikompresi. Penggunaan teks

dalam representasi data eksternal telah menyederhanakan penggunaan HTTP untuk aplikasi

programmer yang bekerja secara langsung dengan protokol. Dalam konteks ini, tekstual sebuah

representasi tidak menambahkan banyak dengan panjang pesan.

sumber data yang disediakan sebagai struktur MIME-seperti dalam argumen dan hasil.

Multipurpose Internet Mail Extensions (MIME), ditetapkan dalam RFC 2045 [Freed dan

Borenstein 1996], adalah standar untuk mengirim data multi mengandung, misalnya, teks,

gambar dan suara dalam pesan email. Data diawali dengan tipe MIME nya sehingga

penerima akan tahu bagaimana menanganinya. Jenis MIME menentukan jenis dan subtipe, untuk

Misalnya, text / plain, text / html, image / gif orimage / jpeg. Klien juga dapat menentukan

jenis MIME bahwa mereka bersedia untuk menerima

metode HTTP • Setiap permintaan klien menentukan nama metode untuk diterapkan pada

sumber daya di server dan URL dari sumber daya itu. Laporan balasan pada status

Permintaan. Permintaan dan balasan dapat juga berisi data sumber daya, isi formulir

atau output dari programresource lari pada server web. Metode termasuk

berikut:

Gambar 5.6 HTTPRequestmessage

Metode URL atau versi pathname HTTP headers tubuh pesan

GET http://www.dcs.qmul.ac.uk/index.html HTTP / 1.1

GET: Permintaan sumber daya yang URL diberikan sebagai argumen. Jika URL mengacu

data, maka web server menjawab dengan kembali data yang diidentifikasi oleh URL itu. Jika

URL mengacu pada program, maka web server menjalankan program dan mengembalikan nya

output ke klien. Argumen dapat ditambahkan ke URL; misalnya, GETcan menjadi

digunakan untuk mengirim isi formulir untuk program sebagai argumen. The GEToperation

dapat dibuat bersyarat pada tanggal sumber daya terakhir diubah. GETcan juga menjadi

dikonfigurasi untuk mendapatkan bagian dari data.

WithGET, semua informasi untuk permintaan disediakan dalam URL (lihat,

Misalnya, string dalam Bagian 1.6).

KEPALA: Permintaan ini identik dengan GET, tetapi tidak kembali data apapun. Namun,

tidak mengembalikan semua informasi tentang data, seperti waktu modifikasi terakhir,

Jenis atau siz nya

POST: Menentukan URL dari sumber daya (misalnya program) yang dapat menangani

data yang disertakan dalam tubuh permintaan. pengolahan yang dilakukan pada data

tergantung pada fungsi dari program yang ditetapkan dalam URL. Metode ini digunakan

ketika tindakan dapat berubah data pada server. Hal ini dirancang untuk menangani:

menyediakan blok data untuk proses data penanganan seperti servlet -untuk
Misalnya, mengirimkan formulir web untuk membeli sesuatu dari situs web;

posting pesan ke milis atau memperbarui rincian anggota dari daftar;
memperluas database dengan menambahkan operasi.
PUT: Permintaan bahwa data yang diberikan inthe permintaan disimpan dengan URL diberikan sebagai

identifier, baik sebagai modifikasi dari sumber daya yang ada atau sebagai sumber daya baru.

DELETE: Server menghapus sumber daya diidentifikasi oleh URL yang diberikan. server mungkin

tidak selalu memungkinkan operasi ini, dalam hal balasan menunjukkan kegagalan.

PILIHAN: Server memasok klien dengan daftar metode memungkinkan untuk menjadi

diterapkan pada URL yang diberikan (misalnya GET, HEAD, PUT) dan yang khusus

Persyaratan.

TRACE: Server mengirimkan kembali pesan permintaan. Digunakan untuk tujuan diagnostik.

Operasi PUTand DELETEare idempoten, tapi POSTis belum tentu jadi

karena dapat mengubah keadaan sumber daya. Yang lain safeoperations dalam bahwa mereka

tidak mengubah apa pun.

Permintaan yang dijelaskan di atas dapat dicegat oleh server proxy (lihat Bagian 2.3.1).

Tanggapan untuk GETand HEADmay cache oleh server proxy

Isi pesan • TheRequestmessage menentukan nama metode, URL

sumber daya, versi protokol, beberapa header dan badan pesan opsional. Gambar 5.6

menunjukkan isi dari suatu Requestmessage HTTP yang metode adalah GET. Ketika URL

menentukan sumber data, GetMethod tidak memiliki tubuh pesan.

Permintaan untuk proxy membutuhkan URL absolut, seperti yang ditunjukkan pada Gambar 5.6. permintaan untuk

asal server (server asal di mana sumber daya berada) menentukan path dan

memberi nama DNS dari server asal dalam bidang Hostheader. Sebagai contoh,

GET /index.html HTTP / 1.1

Host: www.dcs.qmul.ac.uk

Secara umum, field header berisi pengubah permintaan dan informasi klien, seperti

kondisi pada tanggal terbaru dari modifikasi sumber daya atau jenis konten yang dapat diterima

(Misalnya, HTML teks, audio atau gambar JPEG). Medan otorisasi dapat digunakan untuk

memberikan mandat klien dalam bentuk sertifikat menentukan hak-hak mereka untuk

mengakses sumber daya.

AReplymessage menentukan versi protokol, kode status dan 'alasan', beberapa

header dan badan pesan opsional, seperti yang ditunjukkan pada Gambar 5.7. Kode status dan

Alasan memberikan laporan pada keberhasilan server atau sebaliknya dalam melaksanakan permintaan:

mantan adalah bilangan bulat tiga digit untuk interpretasi oleh program, dan yang terakhir adalah

frase tekstual yang dapat dipahami oleh seseorang. Kolom header digunakan untuk melewati

informasi tambahan tentang server atau akses ke sumber daya. Misalnya, jika

permintaan memerlukan otentikasi, status respon menunjukkan header ini dan

Isi pesan • TheRequestmessage menentukan nama metode, URL

sumber daya, versi protokol, beberapa header dan badan pesan opsional. Gambar 5.6

menunjukkan isi dari suatu Requestmessage HTTP yang metode adalah GET. Ketika URL

menentukan sumber data, GetMethod tidak memiliki tubuh pesan.

Permintaan untuk proxy membutuhkan URL absolut, seperti yang ditunjukkan pada Gambar 5.6. permintaan untuk

asal server (server asal di mana sumber daya berada) menentukan path dan

memberi nama DNS dari server asal dalam bidang Hostheader. Sebagai contoh,

GET /index.html HTTP / 1.1

Host: www.dcs.qmul.ac.uk

Secara umum, field header berisi pengubah permintaan dan informasi klien, seperti

kondisi pada tanggal terbaru dari modifikasi sumber daya atau jenis konten yang dapat diterima

(Misalnya, HTML teks, audio atau gambar JPEG). Medan otorisasi dapat digunakan untuk

memberikan mandat klien dalam bentuk sertifikat menentukan hak-hak mereka untuk

mengakses sumber daya.

AReplymessage menentukan versi protokol, kode status dan 'alasan', beberapa

header dan badan pesan opsional, seperti yang ditunjukkan pada Gambar 5.7. Kode status dan

Alasan memberikan laporan pada keberhasilan server atau sebaliknya dalam melaksanakan permintaan:

mantan adalah bilangan bulat tiga digit untuk interpretasi oleh program, dan yang terakhir adalah

frase tekstual yang dapat dipahami oleh seseorang. Kolom header digunakan untuk melewati

informasi tambahan tentang server atau akses ke sumber daya. Misalnya, jika

permintaan memerlukan otentikasi, status respon menunjukkan header ini dan

5.3 Jarak Jauh panggilan prosedur

Seperti disebutkan dalam Bab 2, konsep panggilan prosedur jauh (RPC) merupakan

terobosan intelektual utama dalam komputasi terdistribusi, dengan tujuan membuat

pemrograman sistem terdistribusi terlihat mirip, jika tidak identik, untuk konvensional

pemrograman -yaitu, mencapai tingkat tinggi transparansi distribusi. Ini

penyatuan dicapai dengan cara yang sangat sederhana, dengan memperluas abstraksi dari

prosedur panggilan untuk lingkungan terdistribusi. Secara khusus, di RPC, prosedur pada remote mesin bisa disebut sebagai jika mereka prosedur dalam ruang alamat lokal. Itu

Sistem RPC yang mendasari kemudian menyembunyikan aspek penting dari distribusi, termasuk encoding dan decoding parameter dan hasil, lewat pesan dan

melestarikan semantik yang diperlukan untuk prosedur panggilan. Konsep ini pertama kali

diperkenalkan oleh Birrell dan Nelson [1984] dan membuka jalan bagi banyak

perkembangan dalam sistem terdistribusi pemrograman yang digunakan saat ini.

5.3.1 Desain isu untuk RPC

Sebelum melihat pelaksanaan sistem RPC, kita melihat tiga isu yang

penting dalam memahami konsep ini:

thestyle pemrograman dipromosikan oleh RPC -programming dengan antarmuka;
panggilan semantik terkait dengan RPC;
masalah thekey transparansi dan bagaimana kaitannya dengan panggilan prosedur remote.
Pemrograman dengan interface • Kebanyakan bahasa pemrograman modern menyediakan sarana

pengorganisasian program sebagai satu set modul yang dapat berkomunikasi satu sama lain.

Komunikasi antara modul bisa dengan cara prosedur panggilan antara modul

atau dengan akses langsung ke variabel dalam modul lain. Dalam rangka untuk mengontrol mungkin

interaksi antara modul, sebuah interfaceis eksplisit ditetapkan untuk setiap modul. Itu

antarmuka dari modul menentukan prosedur dan variabel yang dapat diakses

dari modul lain. Modul diimplementasikan sehingga untuk menyembunyikan semua informasi tentang

mereka kecuali yang tersedia melalui antarmuka. Selama antarmuka tetap

sama, pelaksanaannya dapat diubah withoutaffecting pengguna modul.

Interface dalam sistem terdistribusi: Dalam program didistribusikan, modul dapat berjalan di

proses terpisah. Dalam model client-server, khususnya, setiap server menyediakan satu set

prosedur yang tersedia untuk digunakan oleh klien. Misalnya, file server akan

menyediakan prosedur untuk membaca dan menulis file. interfaceis layanan istilah yang digunakan untuk

mengacu pada spesifikasi prosedur yang ditawarkan oleh server, mendefinisikan jenis dari

argumen dari masing-masing prosedur.

Ada sejumlah manfaat untuk pemrograman dengan antarmuka di terdistribusi

sistem, yang berasal dari pemisahan penting antara antarmuka dan

pelaksanaan:

Seperti halnya bentuk pemrograman modular, programmer hanya peduli
dengan abstraksi yang ditawarkan oleh layanan antarmuka dan tidak perlu menyadari

rincian implementasi.

Ekstrapolasi ke (berpotensi heterogen) sistem terdistribusi, programmer
juga tidak perlu tahu bahasa pemrograman atau platform yang mendasari digunakan

untuk melaksanakan layanan (merupakan langkah penting menuju pengelolaan heterogenitas di

sistem terdistribusi).

Pendekatan ini memberikan dukungan alami untuk evolusi perangkat lunak dalam
implementasi dapat berubah selama selama interface (tampilan eksternal)

tetap sama. Lebih tepatnya, antarmuka juga dapat mengubah asalkan

tetap kompatibel dengan origina yang

Definisi antarmuka layanan dipengaruhi oleh sifat didistribusikan dari

infrastruktur dasar:

Hal ini tidak mungkin untuk modul klien berjalan dalam satu proses untuk mengakses variabel
dalam modul dalam proses lain. Oleh karena itu antarmuka layanan tidak bisa menentukan

akses langsung ke variabel. Perhatikan bahwa antarmuka CORBA IDL dapat menentukan atribut,

yang tampaknya melanggar peraturan ini. Namun, atribut tidak diakses secara langsung

tapi dengan cara beberapa getter dan setter prosedur ditambahkan secara otomatis ke

antarmuka.

mekanisme parameter-lewat yang digunakan dalam prosedur lokal panggilan -misalnya,
sebut oleh nilai dan memanggil dengan referensi, tidak cocok jika pemanggil dan prosedur

adalah dalam proses yang berbeda. Secara khusus, panggilan dengan referensi tidak didukung. Agak,

spesifikasi prosedur dalam antarmuka dari modul dalam terdistribusi

Program menjelaskan parameter sebagai output inputor, atau kadang-kadang keduanya. masukan

parameter dilewatkan ke server jauh bysending nilai-nilai dari argumen

dalam pesan permintaan dan kemudian memasok mereka sebagai argumen untuk operasi untuk

dieksekusi di server. Outputparameters dikembalikan dalam pesan balasan dan

digunakan sebagai hasil dari panggilan atau mengganti nilai-nilai correspondin yang

Gambar 5.8 CORBA IDL contoh

// Dalam file Person.idl

struct Person {

nama string;

Tempat string;

tahun panjang ;

} ;

antarmuka PersonList {

dibaca atribut tali listname ;

kekosongan addPerson ( Person p ) ;

membatalkan getPerson ( nama string, keluar Orang p ) ;

num panjang

variabel dalam lingkungan panggilan. Ketika parameter yang digunakan untuk kedua input dan

output, nilai harus betransmitted di kedua permintaan dan membalas pesan.

Perbedaan lain antara modul lokal dan remote adalah bahwa alamat dalam satu
Proses tidak valid dalam satu remote lain. Oleh karena itu, alamat tidak dapat dilalui

sebagai argumen atau dikembalikan sebagai hasil dari panggilan ke modul jarak jauh.

Kendala ini memiliki dampak yang signifikan pada spesifikasi definisi antarmuka

bahasa, seperti dibahas di bawah.

bahasa antarmuka definisi: Mekanisme RPC dapat diintegrasikan dengan tertentu

bahasa pemrograman jika mencakup notasi yang memadai untuk mendefinisikan interface,

Membiarkan input dan output parameter yang akan dipetakan ke penggunaan normal bahasa untuk

parameter. Pendekatan ini berguna ketika semua bagian dari aplikasi terdistribusi dapat

ditulis dalam bahasa yang sama. Hal ini juga nyaman karena memungkinkan programmer untuk

menggunakan satu bahasa, misalnya, Java, untuk doa lokal dan remote.

Namun, banyak layanan yang berguna yang ada ditulis dalam C ++ dan bahasa lainnya.

Ini akan bermanfaat untuk memungkinkan program yang ditulis dalam berbagai bahasa, termasuk

Java, untuk mengaksesnya dari jarak jauh. bahasa antarmuka definisi (IDLs) dirancang untuk

memungkinkan prosedur dilaksanakan bahasa acuh tak acuh untuk memohon satu sama lain. sebuah IDL

menyediakan notasi untuk antarmuka mendefinisikan di mana masing-masing parameter dari

operasi dapat digambarkan sebagai input atau outputin Selain memiliki jenis yang ditentukan.

variabel dalam lingkungan panggilan. Ketika parameter yang digunakan untuk kedua input dan

output, nilai harus betransmitted di kedua permintaan dan membalas pesan.

Perbedaan lain antara modul lokal dan remote adalah bahwa alamat dalam satu
Proses tidak valid dalam satu remote lain. Oleh karena itu, alamat tidak dapat dilalui

sebagai argumen atau dikembalikan sebagai hasil dari panggilan ke modul jarak jauh.

Kendala ini memiliki dampak yang signifikan pada spesifikasi definisi antarmuka

bahasa, seperti dibahas di bawah.

bahasa antarmuka definisi: Mekanisme RPC dapat diintegrasikan dengan tertentu

bahasa pemrograman jika mencakup notasi yang memadai untuk mendefinisikan interface,

Membiarkan input dan output parameter yang akan dipetakan ke penggunaan normal bahasa untuk

parameter. Pendekatan ini berguna ketika semua bagian dari aplikasi terdistribusi dapat

ditulis dalam bahasa yang sama. Hal ini juga nyaman karena memungkinkan programmer untuk

menggunakan satu bahasa, misalnya, Java, untuk doa lokal dan remote.

Namun, banyak layanan yang berguna yang ada ditulis dalam C ++ dan bahasa lainnya.

Ini akan bermanfaat untuk memungkinkan program yang ditulis dalam berbagai bahasa, termasuk

Java, untuk mengaksesnya dari jarak jauh. bahasa antarmuka definisi (IDLs) dirancang untuk

memungkinkan prosedur dilaksanakan bahasa acuh tak acuh untuk memohon satu sama lain. sebuah IDL

menyediakan notasi untuk antarmuka mendefinisikan di mana masing-masing parameter dari

operasi dapat digambarkan sebagai input atau outputin Selain memiliki jenis yang ditentukan.

Gambar 5.8 CORBA IDL contoh

// Dalam file Person.idl

struct Person {

nama string;

Tempat string;

tahun panjang;

};

antarmuka PersonList {

dibaca atribut tali listname;

kekosongan addPerson (Person p);

membatalkan getPerson (nama string, keluar Orang p);

nomor panjang ();

};

Gambar 5.8 menunjukkan contoh sederhana CORBA IDL. The Personstructure adalah

sama dengan yang digunakan untuk menggambarkan marshalling dalam Bagian 4.3.1. Antarmuka bernama

PersonList menentukan metode yang tersedia untuk RMI dalam sebuah objek remote yang mengimplementasikan

antarmuka. Misalnya, metode addPersonspecifies argumen seperti dalam, yang berarti

bahwa itu adalah inputargument, dan metode getPersonthat mengambil contoh

Nama Personby menentukan argumen kedua sebagai keluar, yang berarti bahwa itu adalah output

argumen.

Konsep dari IDL awalnya dikembangkan untuk sistem RPC tetapi berlaku

sama untuk RMI dan juga layanan web. studi kasus kami meliputi:

SunXDR sebagai contoh dari IDL untuk RPC (dalam Bagian 5.3.3);
CORBA IDL sebagai contoh dari IDL untuk RMI (dalam Bab 8 dan juga termasuk
atas);

Web Services Description Language (WSDL), yang dirancang untuk
RPC mendukung layanan web Internet-lebar (lihat Bagian 9.3);

dan buffer protokol yang digunakan di Google untuk menyimpan dan interchanging berbagai jenis
informasi terstruktur (lihat Bagian 21.4.1).

RPC panggilan semantik • protokol Permintaan-balasan dibahas dalam Bagian 5.2, di mana kita

menunjukkan bahwa doOperationcan dilaksanakan dengan cara yang berbeda untuk memberikan yang berbeda

jaminan pengiriman. Pilihan utama adalah:

Coba lagi pesan permintaan: Mengontrol apakah untuk memancarkan kembali pesan permintaan sampai

baik balasan diterima atau server diasumsikan telah gagal.

Gandakan filtering: Kontrol ketika transmisi ulang yang digunakan dan apakah untuk menyaring

menduplikasi permintaan di server.

Pengiriman ulang hasil: Kontrol apakah akan menyimpan riwayat pesan hasil untuk

memungkinkan hasil yang hilang untuk ditransmisikan ulang withoutre-menjalankan operasi di

Server.

Kombinasi dari pilihan ini menyebabkan berbagai kemungkinan semantik untuk keandalan

doa ofremote seperti yang terlihat oleh Invoker tersebut. Gambar 5.9

Gambar 5.9 semantik Panggilan

Kesalahan tindakan toleransi Panggil semantik

permintaan retransmit

pesan

duplikat

penyaringan

Re-menjalankan prosedur

atau balasan retransmit

Tidak ada Tidak berlaku Tidak berlaku Mungkin

Ya Tidak Re-menjalankan prosedur At-setidaknya-sekali

Ya ya memancarkan kembali balasan At-paling-sekali

menunjukkan pilihan yang menarik,

dengan sesuai nama untuk semantik yang mereka hasilkan. Perhatikan bahwa untuk lokal

prosedur panggilan, semantik yang tepat sekali, yang berarti bahwa setiap prosedur adalah

dieksekusi tepat sekali (kecuali dalam kasus kegagalan proses). Pilihan dari RPC

semantik doa didefinisikan sebagai berikut

Mungkin semantik: Withmaybesemantics, panggilan prosedur remote dapat dieksekusi

sekali atau tidak sama sekali. Mungkin semantik muncul ketika tidak ada tindakan toleransi kesalahan diterapkan

dan dapat menderita jenis berikut kegagalan:

kegagalan kelalaian jika permintaan atau hasil pesan hilang;
kegagalan kecelakaan ketika server yang berisi operasi remote gagal.
Jika pesan hasilnya belum diterima setelah batas waktu dan tidak ada retries, itu adalah

pasti apakah prosedur telah dijalankan. Jika pesan permintaan hilang, maka

prosedur tidak akan telah dieksekusi. Onthe sisi lain, prosedur mungkin memiliki

telah dieksekusi dan pesan hasil hilang. Kegagalan kecelakaan dapat terjadi baik sebelum atau

setelah prosedur dijalankan. Selain itu, dalam sistem asynchronous, hasil

mengeksekusi prosedur mungkin tiba setelah batas waktu. Maybesemantics hanya berguna untuk

aplikasi di mana panggilan gagal sesekali dapat diterima.

At-setidaknya-sekali semantik: Withat-setidaknya-oncesemantics, Invoker menerima baik

Hasilnya, dalam hal Invoker tahu bahwa prosedur tersebut dijalankan minimal sekali,

atau pengecualian yang memberitahukan bahwa tidak ada hasil yang diterima. Di-setidaknya-oncesemantics bisa

dicapai oleh transmisi pesan permintaan, yang topeng kegagalan kelalaian

permintaan atau hasil pesan. Di-setidaknya-oncesemantics bisa menderita berikut ini

jenis kegagalan:

kegagalan kecelakaan ketika server yang berisi prosedur remote gagal;
kegagalan sewenang-wenang -dalam kasus ketika pesan permintaan ulang, remote
Server dapat menerima dan melaksanakan prosedur lebih dari sekali, mungkin menyebabkan

nilai-nilai yang salah untuk disimpan atau dikembalikan.

Bagian 5.2 mendefinisikan idempoten operationas salah satu yang dapat dilakukan berulang-ulang

dengan efek yang sama seperti jika itu telah dilakukan tepat satu kali. Non-idempoten

operasi dapat memiliki efek yang salah jika mereka dilakukan lebih dari sekali. Sebagai contoh,

operasi untuk meningkatkan saldo bank sebesar $ 10 harus dilakukan hanya sekali; jika itu

diulang, keseimbangan akan tumbuh dan tumbuh! Jika operasi di server dapat

dirancang agar semua prosedur dalam antarmuka layanan mereka idempoten

operasi, kemudian di-setidaknya-oncecall semantik mungkin dapat diterima.

At-paling-sekali semantik: Dengan di-paling-oncesemantics, pemanggil menerima baik

Hasilnya, dalam hal pemanggil tahu bahwa prosedur tersebut dieksekusi tepat sekali, atau

pengecualian yang memberitahukan bahwa tidak ada hasil yang diterima, dalam hal prosedur akan

telah dilaksanakan baik sekali atau tidak sama sekali. At-paling-oncesemantics dapat dicapai dengan

menggunakan semua tindakan toleransi kesalahan diuraikan dalam Gambar 5.9. Seperti dalam kasus sebelumnya,

penggunaan retries masker setiap kegagalan kelalaian tersebut yang permintaan atau hasil pesan. set ini

tindakan toleransi kesalahan mencegah kegagalan sewenang-wenang dengan memastikan bahwa untuk setiap RPC sebuah

Prosedur ini tidak pernah dijalankan lebih dari sekali. Sun RPC (dibahas dalam Bagian 5.3.3)

menyediakan di-setidaknya-sekali menelepon semantik.

Transparansi • The pencetus RPC, Birrell dan Nelson [1984], yang bertujuan untuk membuat

prosedur remote panggilan sebanyak seperti prosedur panggilan lokal mungkin, dengan tidak ada perbedaan

dalam sintaks antara panggilan prosedur jauh lokal dan. Semua panggilan yang diperlukan untuk

marshalling dan pesan-passing prosedur yang tersembunyi dari pembuatan programmer

panggilan. Meskipun pesan permintaan yang dipancarkan setelah timeout, ini transparan

ke pemanggil untuk membuat semantik prosedur remote panggilan seperti itu prosedur lokal

panggilan

Lebih tepatnya, kembali ke terminologi Bab 1, RPC berusaha untuk menawarkan di

Lokasi setidaknya dan transparansi akses, menyembunyikan lokasi fisik dari (berpotensi

remote) prosedur dan juga mengakses prosedur lokal dan remote dengan cara yang sama.

Middleware juga dapat menawarkan tingkat tambahan transparansi untuk RPC.

Namun, panggilan prosedur jauh lebih rentan terhadap kegagalan dari orang-orang lokal,

karena mereka melibatkan jaringan, komputer lain dan proses lain. Mana saja dari

semantik di atas dipilih, selalu ada kemungkinan bahwa tidak ada hasil yang akan diterima, dan

dalam kasus kegagalan, adalah mustahil untuk membedakan antara kegagalan jaringan dan

dari proses server jauh. Ini mengharuskan klien membuat panggilan jarak jauh dapat

pulih dari situasi seperti itu.

Latency panggilan prosedur remote beberapa kali lipat lebih besar dari

bahwa dari satu lokal. Hal ini menunjukkan bahwa program yang menggunakan panggilan jarak jauh harus

mampu mengambil faktor ini ke rekening, mungkin dengan meminimalkan interaksi jarak jauh. Itu

desainer dari Argus [Liskov dan Scheifler 1982] menyarankan bahwa penelepon harus mampu

membatalkan panggilan prosedur jauh yang terlalu lama sedemikian rupa yang tidak memiliki efek

di server. Untuk memungkinkan hal ini, server akan perlu untuk dapat mengembalikan hal bagaimana

mereka sebelum prosedur dipanggil. Isu-isu ini dibahas dalam Bab 16.

prosedur remote panggilan juga membutuhkan gaya yang berbeda dari parameter passing, sebagai

dibahas di atas. Secara khusus, RPC tidak menawarkan panggilan dengan referensi

Waldoet al. [1994] mengatakan bahwa perbedaan antara operasi lokal dan remote

harus dinyatakan pada antarmuka layanan, untuk memungkinkan peserta untuk bereaksi dengan konsisten

cara untuk kemungkinan kegagalan parsial. Sistem lain pergi lebih jauh dari ini dengan menyatakan bahwa

sintaks dari panggilan jarak jauh harus berbeda dari panggilan lokal: dalam kasus Argus,

bahasa diperpanjang untuk membuat operasi jauh eksplisit untuk programmer.

Pilihan apakah RPC harus transparan juga tersedia untuk

desainer IDLs. Sebagai contoh, di beberapa IDLs, sebuah remote doa dapat membuang

pengecualian ketika klien tidak dapat berkomunikasi dengan prosedur remote. Ini

mensyaratkan bahwa program klien menangani pengecualian tersebut, yang memungkinkan untuk menangani seperti

kegagalan. Sebuah IDL juga dapat memberikan fasilitas untuk menentukan semantik panggilan dari

prosedur. Hal ini dapat membantu desainer dari layanan - misalnya, jika di-setidaknya-sekali panggilan

semantik dipilih untuk menghindari overhead dari pada-paling-sekali, operasi harus

dirancang untuk idempoten.

Konsensus saat ini adalah bahwa panggilan terpencil harus transparan dalam arti

bahwa sintaks dari panggilan jarak jauh adalah sama dengan yang dari doa lokal, tetapi bahwa

perbedaan antara panggilan lokal dan jarak jauh harus dinyatakan dalam antarmuka mereka.

5.3.2 Pelaksanaan RPC

Komponen perangkat lunak yang diperlukan untuk melaksanakan RPC ditunjukkan pada Gambar 5.10 . Itu

client yang mengakses layanan mencakup satu rintisan procedurefor setiap prosedur dalam

antarmuka layanan . Prosedur rintisan berperilaku seperti prosedur lokal untuk klien, tetapi

bukannya melaksanakan panggilan , itu marsekal pengenal prosedur dan argumen ke

pesan permintaan , yang mengirimkan melalui modul komunikasi ke server . Ketika

membalas pesan tiba , itu unmarshals hasil . Proses server berisi petugas operator

bersama-sama dengan satu server prosedur rintisan dan satu prosedur pelayanan untuk setiap prosedur

dalam antarmuka layanan . Dispatcher memilih salah satu dari prosedur Server stub

menurut pengenal prosedur dalam pesan permintaan . Prosedur Server stub

kemudian unmarshals argumen dalam pesan permintaan , panggilan layanan yang sesuai

Prosedur dan marsekal kembali nilai-nilai untuk pesan balasan . Prosedur pelayanan

menerapkan prosedur dalam antarmuka layanan . Klien dan server prosedur stub

dan operator yang dapat dihasilkan secara otomatis oleh compiler antarmuka dari

definisi antarmuka layanan .

RPC umumnya dilaksanakan melalui protokol request-reply seperti yang

dibahas dalam Bagian 5.2 . Isi permintaan dan balasan pesan yang sama

mereka diilustrasikan untuk protokol request-reply pada Gambar 5.4 . RPC dapat diimplementasikan untuk

memiliki salah satu pilihan semantik doa dibahas dalam Bagian 5.3.1 - di - leastonceor di - paling - onceis umumnya dipilih . Untuk mencapai hal ini , modul komunikasi

akan menerapkan pilihan desain yang diinginkan dalam hal ofretransmission permintaan , berurusan

dengan duplikat dan transmisi ulang hasil , seperti yang ditunjukkan pada Gambar 5.9

5.3.3 Studi Kasus: Sun RPC

RFC 1831 [Srinivasan 1995a] menjelaskan Sun RPC, yang dirancang untuk client-server

komunikasi di Sun Network File System (NFS). Sun RPC kadang-kadang disebut

ONC (Open Network Computing) RPC. Hal ini disediakan sebagai bagian dari berbagai Sun dan

sistem operasi UNIX lainnya dan juga withNFS tersedia instalasi.

Pelaksana memiliki pilihan untuk menggunakan prosedur panggilan jarak jauh lebih baik UDP atau TCP.

Ketika digunakan Sun RPC dengan UDP, permintaan dan membalas pesan dibatasi panjang -

teoritis untuk 64 kilobyte, tetapi lebih sering dalam praktek untuk 8 atau 9 kilobyte. Menggunakan semantik minimal-oncecall. Broadcast RPC adalah pilihan.

Sistem Sun RPC menyediakan bahasa antarmuka yang disebut XDR dan antarmuka

compiler disebut rpcgen, yang dimaksudkan untuk digunakan dengan bahasa pemrograman C.

bahasa antarmuka definisi • Bahasa Sun XDR, yang awalnya dirancang

untuk menentukan representasi data eksternal, diperpanjang menjadi sebuah antarmuka

bahasa definisi. Ini dapat digunakan untuk mendefinisikan antarmuka layanan untuk Sun RPC oleh

menetapkan satu set definisi prosedur bersama-sama dengan mendukung jenis definisi. Itu

notasi agak primitif dibandingkan dengan yang digunakan oleh CORBA IDL atau Java. Di

particula

Gambar 5.11 Antarmuka File di Sun XDR

const MAX = 1000 ;

typedef int FileIdentifier ;

typedef int FilePointer ;

typedef int Panjang ;

struct data {

int panjang ;

Char penyangga [ MAX ] ;

} ;

writeargs struct {

FileIdentifier f ;

Posisi FilePointer ;

Data data;

} ;

readargs struct {

FileIdentifier f ;

Posisi FilePointer ;

panjang ukuran ;

} ;

Program FILEREADWRITE {

Versi VERSION {

kekosongan MENULIS ( writeargs ) = 1 ; 1

Data BACA ( readargs ) = 2 ; 2

} = 2 ;

} = 9999 ;

Kebanyakan bahasa memungkinkan nama antarmuka yang akan ditentukan, tetapi Sun RPC tidak -
bukannya ini, sejumlah program serta nomor versi yang disediakan. Program

nomor dapat diperoleh dari pemerintah pusat untuk memungkinkan setiap program untuk memiliki

nomor unik tersendiri. Nomor versi dimaksudkan untuk diubah bila

perubahan tanda tangan prosedur. Kedua Program dan nomor versi yang lulus dalam

pesan permintaan, sehingga klien dan server dapat memeriksa bahwa mereka menggunakan yang sama

versi.

Definisi prosedur menentukan tanda tangan prosedur dan sejumlah prosedur.
Jumlah prosedur digunakan sebagai identifier prosedur dalam pesan permintaan.

Hanya parameter input tunggal diperbolehkan. Oleh karena itu, prosedur yang membutuhkan
beberapa parameter harus memasukkan mereka sebagai komponen struktur tunggal.

Parameter output prosedur dikembalikan melalui hasil tunggal.
Tanda tangan Prosedur terdiri dari jenis hasil, nama prosedur dan
jenis parameter masukan. Jenis kedua hasil dan parameter masukan

dapat menentukan baik nilai tunggal atau struktur berisi beberapa nilai.

Sebagai contoh, lihat definisi XDR pada Gambar 5.11 dari sebuah antarmuka dengan sepasang

prosedur untuk menulis dan membaca file. Jumlah program ini 9999 dan versi

Jumlah ini 2. READprocedure (line 2) mengambil sebagai parameter input struktur dengan

tiga komponen menentukan identifier berkas, posisi dalam file dan jumlah

byte diperlukan. Hasilnya adalah struktur yang mengandung jumlah byte kembali dan

file data. The WRITEprocedure (line 1) tidak memiliki hasil. The WRITEand READprocedures

nomor yang diberikan 1 dan 2. Jumlah 0 dicadangkan untuk prosedur null, yang

dihasilkan secara otomatis dan tobe digunakan untuk menguji apakah server tersedia dimaksudkan.

bahasa definisi interface ini menyediakan notasi untuk mendefinisikan konstanta,

typedef, struktur, tipe enumerated, serikat pekerja dan programs.Typedefs, struktur dan

tipe enumerated menggunakan sintaks bahasa C. Compiler antarmuka rpcgencan digunakan

untuk menghasilkan berikut dari definisi antarmuka:

prosedur klien rintisan;
Server mainprocedure, operator dan server stub prosedur;
XDR marshalling dan prosedur unmarshalling untuk digunakan oleh operator dan
client dan server stub prosedur.

Binding • Sun RPC berjalan layanan mengikat lokal disebut pelabuhan mapperat baik-dikenal

nomor port pada setiap komputer. Setiap contoh dari mapper pelabuhan mencatat program

nomor, nomor versi dan nomor port yang digunakan oleh masing-masing layanan yang berjalan secara lokal. Kapan

server dijalankan register nomor program, nomor versi dan nomor port dengan

port mapper lokal. Ketika klien dijalankan, itu tahu port server dengan membuat

permintaan remote ke mapper pelabuhan di host server, menentukan nomor program

dan numbe versi

Ketika layanan memiliki beberapa contoh yang berjalan pada komputer yang berbeda,

contoh dapat menggunakan nomor port yang berbeda untuk menerima permintaan klien. Jika kebutuhan klien

multicast permintaan untuk semua contoh layanan yang menggunakan port yang berbeda

angka, tidak bisa menggunakan IP pesan multicast langsung untuk tujuan ini. Solusinya adalah bahwa

klien melakukan panggilan prosedur remote multicast oleh multicasting mereka untuk semua port

pembuat peta, menentukan program dan nomor versi. Setiap port mapper depan semua

panggilan tersebut dengan program layanan lokal yang tepat, jika ada satu.

Otentikasi. Sun RPC permintaan dan balasan pesan menyediakan bidang tambahan yang memungkinkan

informasi otentikasi untuk diteruskan antara klien dan server. Permintaan pesan

mengandung kepercayaan dari pengguna menjalankan program klien. Misalnya, dalam

UNIX gaya otentikasi kredensial meliputi uidand gidof pengguna. Mengakses

mekanisme kontrol dapat dibangun di atas informasi otentikasi yang dibuat

tersedia untuk prosedur server melalui argumen kedua. Program server

bertanggung jawab untuk menegakkan kontrol akses dengan memutuskan apakah akan mengeksekusi setiap prosedur

memanggil menurut informasi otentikasi. Misalnya, jika server adalah file NFS

server, dapat memeriksa apakah pengguna memiliki hak yang cukup untuk melaksanakan file yang diminta

operasi. Beberapa protokol otentikasi dapat didukung. Ini termasuk:

none;
UNIX gaya, seperti dijelaskan di atas;
gaya di mana kunci bersama didirikan untuk menandatangani pesan RPC;
Kerberos (lihat Bab 11).
Sebuah lapangan di header RPC menunjukkan gaya yang sedang digunakan

Pendekatan yang lebih umum untuk keamanan dijelaskan dalam RFC 2203 [ Eisler et al . 1997] .

Ini menyediakan untuk kerahasiaan dan integritas pesan RPC serta otentikasi . Saya t

memungkinkan klien dan server untuk bernegosiasi konteks keamanan di mana baik tidak ada keamanan

diterapkan , atau dalam kasus bahwa keamanan diperlukan , integritas pesan atau privasi pesan atau

keduanya dapat diterapkan .

Klien dan server program • materi lebih lanjut tentang Sun RPC tersedia di

www.cdk5.net/rmi . Ini termasuk program klien dan server contoh sesuai dengan

antarmuka yang didefinisikan pada Gambar 5.11 .

5.4 Jarak Jauh metode doa

Terpencil metode doa (RMI) terkait erat dengan RPC tapi diperpanjang ke dunia

didistribusikan benda. Dalam RMI, benda memanggil dapat memanggil metode dalam berpotensi

objek remote. Seperti RPC, rincian yang mendasari umumnya disembunyikan dari pengguna.

Kesamaan antara RMI dan RPC adalah sebagai berikut:

Mereka berdua mendukung pemrograman dengan antarmuka, dengan manfaat yang dihasilkan yang
berasal dari pendekatan ini (lihat Bagian 5.3.1).

Mereka berdua biasanya dibangun di atas protokol request-reply dan dapat menawarkan
berbagai panggilan semantik seperti di-setidaknya-onceand di-paling-sekali.

Mereka berdua menawarkan tingkat yang sama transparansi -yaitu, lokal dan panggilan jarak jauh
mempekerjakan sintaks yang sama tetapi remote interface biasanya mengekspos didistribusikan

sifat panggilan yang mendasari, misalnya dengan mendukung pengecualian terpencil.

Perbedaan berikut menyebabkan menambahkan ekspresif ketika datang ke

pemrograman distributedapplications dan layanan yang kompleks.

Programmer mampu menggunakan kekuatan ekspresif penuh berorientasi objek
pemrograman dalam pengembangan perangkat lunak sistem terdistribusi, termasuk

penggunaan objek, kelas dan warisan, dan juga dapat menggunakan metodologi desain objectoriented terkait dan alat-alat yang terkait.

Membangun konsep identitas objek dalam sistem berorientasi objek, semua benda
dalam sebuah sistem berbasis RMI memiliki referensi objek yang unik (apakah mereka lokal atau

remote), referensi objek tersebut juga dapat dikirimkan sebagai parameter, sehingga menawarkan

secara signifikan lebih kaya semantik parameter-lewat dari pada RPC.

Isu parameter passing sangat penting dalam sistem terdistribusi. RMI

memungkinkan programmer untuk melewati parameter tidak hanya berdasarkan nilai, sebagai input atau output

parameter, tetapi juga oleh referensi obyek. Melewati referensi sangat menarik jika

parameter yang mendasari besar atau kompleks. Remote end, pada menerima obyek

referensi, kemudian dapat mengakses objek ini menggunakan metode remote doa, bukan memiliki

untuk mengirimkan nilai objek di seluruh jaringan.

Sisa bagian ini meneliti konsep doa metode remote lebih

detail, mencari awalnya di isu-isu kunci sekitarnya didistribusikan model objek sebelum

melihat isu-isu implementasi sekitarnya RMI, termasuk sampah didistribusikan

koleksi

5.4.1 Desain isu untuk RMI

Seperti disebutkan di atas, RMI berbagi masalah desain yang sama seperti RPC dalam hal

pemrograman dengan interface, semantik panggilan dan tingkat transparansi. pembaca

didorong untuk merujuk kembali ke Bagian 5.3.1 untuk diskusi tentang item ini.

Masalah desain kunci ditambahkan berkaitan dengan model objek dan, khususnya,

mencapai transisi dari objek ke objek terdistribusi. Kami pertama kali menggambarkan

, Single-gambar model objek konvensional dan kemudian menggambarkan model objek terdistribusi.

Model objek • Sebuah program berorientasi objek, misalnya di Jawa atau C ++, terdiri

dari koleksi benda-benda berinteraksi, yang masing-masing terdiri dari satu set data dan satu set

metode. Sebuah objek berkomunikasi dengan objek lain dengan menerapkan metode mereka,

umumnya melewati argumen dan menerima hasil. Objek dapat merangkum data mereka

dan kode dari metode mereka. Beberapa bahasa, misalnya Java dan C ++, memungkinkan

programmer untuk menentukan objek yang variabel misalnya dapat diakses langsung. Tapi

untuk digunakan dalam sistem objek terdistribusi, data yang obyek harus dapat diakses hanya melalui nya

metode.

Objek referensi: Objek dapat diakses melalui referensi objek. Misalnya, di Jawa, sebuah

variabel yang muncul untuk memegang suatu benda benar-benar memegang referensi ke obyek itu. Untuk

memanggil metode dalam suatu objek, referensi objek dan nama metode yang diberikan, bersama-sama

dengan argumen yang diperlukan. Objek yang metode dipanggil kadang-kadang disebut

thetargetand kadang penerima. referensi objek adalah nilai-nilai kelas, yang berarti

bahwa mereka dapat, misalnya, akan ditugaskan untuk variabel, lulus sebagai argumen dan kembali

sebagai hasil dari metode

Interface: Sebuah antarmuka memberikan definisi tanda tangan dari satu set metode (yang

adalah, jenis argumen mereka, nilai kembali dan pengecualian) tanpa menentukan mereka

pelaksanaan. Sebuah objek akan menyediakan antarmuka tertentu jika kelasnya berisi kode

yang mengimplementasikan metode antarmuka itu. Di Jawa, kelas dapat mengimplementasikan beberapa

interface, dan metode interface dapat diimplementasikan oleh setiap kelas. Sebuah

antarmuka juga mendefinisikan jenis yang dapat digunakan untuk menyatakan jenis variabel atau dari

parameter dan nilai kembali dari metode. Perhatikan bahwa interface tidak memiliki konstruktor.

Tindakan: Aksi dalam program berorientasi objek dimulai oleh sebuah objek menerapkan suatu

metode dalam objek lain. Sebuah doa dapat mencakup informasi tambahan (argumen)

diperlukan untuk melaksanakan metode. Penerima mengeksekusi metode yang tepat dan kemudian

kontrol kembali ke objek memohon, kadang-kadang memasok hasilnya. Sebuah doa dari

Metode dapat memiliki tiga efek:

Keadaan penerima dapat diubah.
Sebuah benda baru dapat dipakai, misalnya, dengan menggunakan konstruktor di Jawa atau
C ++.

doa lebih lanjut tentang metode dalam objek lain mungkin terjadi.
Sebagai doa dapat menyebabkan doa lebih lanjut dari metode dalam objek lain, tindakan

adalah rantai pemanggilan metode terkait, yang masing-masing akhirnya kembali.

Pengecualian: Program dapat menemukan banyak macam kesalahan dan kondisi tak terduga

bervariasi keseriusan. Selama pelaksanaan metode, banyak masalah yang berbeda mungkin

ditemukan: misalnya, nilai-nilai tidak konsisten dalam variabel objek, atau kegagalan dalam

mencoba untuk membaca atau menulis ke file atau soket jaringan. Ketika programmer harus memasukkan

tes dalam kode mereka untuk menangani semua kemungkinan kasus yang tidak biasa atau yang salah, ini akan mengurangi dari

kejelasan kasus normal. Pengecualian menyediakan cara yang bersih untuk menangani kesalahan

kondisi tanpa rumit kode. Selain itu, masing-masing metode menuju eksplisit

daftar sebagai pengecualian kondisi kesalahan mungkin menghadapi, memungkinkan pengguna metode

untuk menangani mereka. Sebuah blok kode dapat didefinisikan throwan pengecualian setiap kali

kondisi yang tidak terduga tertentu atau kesalahan muncul. Ini berarti bahwa kontrol lolos ke

lain blok kode yang catchesthe pengecualian. Kontrol tidak kembali ke tempat

mana pengecualian dilemparkan.

Pengumpulan sampah: Hal ini diperlukan untuk menyediakan sarana membebaskan ruang yang ditempati oleh

benda ketika mereka tidak lagi diperlukan. Sebuah bahasa seperti Java, yang dapat mendeteksi

secara otomatis ketika objek tidak lagi dapat diakses pulih ruang dan membuatnya

tersedia untuk alokasi ke objek lain. Proses ini disebut pengumpulan sampah. Kapan

bahasa (misalnya, C ++) tidak mendukung pengumpulan sampah, programmer memiliki

untuk mengatasi membebaskan ruang yang dialokasikan ke objek. Ini bisa menjadi sumber utama

kesalahan.

objek terdistribusi • Keadaan obyek terdiri dari nilai-nilai contoh nya

variabel. Dalam paradigma berbasis obyek keadaan program dibagi menjadi terpisah

bagian, yang masing-masing berhubungan dengan suatu objek. Sejak program berbasis obyek yang

logis dipartisi, distribusi fisik benda-benda ke dalam proses yang berbeda atau

komputer dalam sistem terdistribusi adalah perpanjangan alami (isu penempatan adalah

dibahas dalam Bagian 2.3.1

sistem objek terdistribusi dapat mengadopsi arsitektur client-server. Pada kasus ini,

benda dikelola oleh server dan klien mereka memanggil metode mereka menggunakan remote

Metode doa. Dalam RMI, permintaan klien untuk memohon sebuah metode objek dikirimkan

dalam pesan ke server mengelola objek. Doa yang dilakukan oleh

mengeksekusi metode dari objek di server dan hasilnya dikembalikan ke klien di

pesan lain. Untuk memungkinkan rantai doa terkait, benda-benda di server

diizinkan untuk menjadi klien ofobjects di server lain.

objek terdistribusi dapat mengasumsikan model arsitektur lainnya. Sebagai contoh, objek

dapat direplikasi dalam rangka untuk mendapatkan manfaat biasa toleransi kesalahan dan ditingkatkan

kinerja, dan benda-benda dapat bermigrasi dengan tujuan untuk meningkatkan kinerja mereka

dan ketersediaan.

Memiliki klien dan server objek dalam proses yang berbeda memaksa enkapsulasi.

Artinya, keadaan suatu objek hanya dapat diakses oleh metode dari objek, yang

berarti bahwa tidak mungkin untuk metode yang tidak sah untuk bertindak atas negara. Sebagai contoh,

kemungkinan SIMLR bersamaan dari benda-benda di komputer yang berbeda menyiratkan bahwa

objek dapat diakses secara bersamaan. Oleh karena itu kemungkinan akses yang bertentangan

timbul. Namun, fakta bahwa data dari sebuah objek diakses hanya dengan metode sendiri

memungkinkan objek untuk menyediakan metode untuk melindungi diri terhadap akses yang tidak benar.

Misalnya, mereka mungkin menggunakan primitif sinkronisasi seperti variabel kondisi untuk

melindungi akses ke variabel instan mereka.

Keuntungan lain dari mengobati negara bersama dari program didistribusikan sebagai

koleksi benda-benda adalah bahwa sebuah objek dapat diakses melalui RMI, atau mungkin disalin ke

cache lokal dan diakses secara langsung, asalkan pelaksanaan kelas tersedia

locall

Fakta bahwa benda diakses hanya melalui metode mereka menimbulkan lain

Keuntungan dari sistem heterogen , bahwa format data yang berbeda dapat digunakan di berbagai

situs - format ini akan diketahui oleh klien yang menggunakan RMI untuk mengakses metode

obyek

SEBUAH

. metode doa

antara objek dalam proses yang berbeda, baik dalam komputer yang sama atau tidak, yang dikenal

sebagai metode remote doa. Metode doa antara objek dalam proses yang sama

adalah pemanggilan metode lokal.

Kami mengacu pada benda-benda yang dapat menerima pemanggilan jarak jauh sebagai objek jarak jauh. Di

Gambar 5.12, benda B dan F adalah objek remote. Semua benda dapat menerima lokal

doa, meskipun mereka dapat menerima mereka hanya dari benda-benda lain yang memegang referensi

ke mereka. Misalnya, objek C harus memiliki referensi ke objek E sehingga dapat memanggil

salah satu metodenya. Berikut dua konsep dasar berada di jantung

model objek terdistribusi

referensi objek remote: benda lain dapat memanggil metode dari objek remote

jika mereka memiliki akses ke referensi objek remote-nya. Sebagai contoh, sebuah objek remote

referensi untuk B pada Gambar 5.12 harus tersedia untuk A.

remote interface: Setiap objek remote memiliki remote interface yang menentukan

metode yang dapat diakses secara remote. Misalnya, benda B dan F pada Gambar

5.12 harus memiliki remote interface.

Kami melihat referensi objek remote, remote interface dan aspek lain dari

didistribusikan model objek berikutnya.

Terpencil referensi objek: Gagasan referensi obyek diperpanjang untuk memungkinkan objek apapun

yang dapat menerima RMI memiliki referensi objek remote. Sebuah referensi objek remote adalah

identifier yang dapat digunakan di seluruh sistem terdistribusi untuk merujuk kepada tertentu

remote object yang unik. perwakilannya, yang umumnya berbeda dari lokal

referensi obyek dibahas dalam referensi objek Bagian 4.3.4.Remote analog

untuk orang-orang lokal di bahwa:

objek remote untuk menerima pemanggilan metode remote ditentukan oleh
Invoker sebagai referensi objek remote.

referensi objek remote dapat disahkan sebagai argumen dan hasil remote
metode doa

RemoteObject

{Metode

.

objek lokal dapat memanggil metode di remote interface serta metode lainnya

dilaksanakan oleh objek remote. Perhatikan bahwa remote interface, seperti semua antarmuka, tidak

memiliki konstruktor.

Sistem CORBA menyediakan bahasa definisi antarmuka (IDL), yang merupakan

digunakan untuk mendefinisikan remote interface. Lihat Gambar 5.8 untuk contoh dari remote interface

didefinisikan dalam CORBA IDL. Kelas-kelas dari objek jauh dan program klien mungkin

diimplementasikan dalam bahasa apapun yang kompiler IDL tersedia, seperti C ++, Java

atau Python. CORBA klien tidak perlu menggunakan bahasa yang sama dengan objek remote agar

untuk memanggil metode yang jauh.

Di Jawa RMI, remote interface didefinisikan dalam cara yang sama seperti Java lainnya

antarmuka. Mereka memperoleh kemampuan mereka untuk menjadi remote interface dengan memperluas antarmuka

bernama jauh. Kedua CORBA IDL (Bab 8) dan Jawa mendukung multiple inheritance of

interface. Artinya, sebuah antarmuka diperbolehkan untuk memperpanjang satu atau lebih

Tindakan dalam sistem objek terdistribusi • Seperti dalam kasus non-terdistribusi, tindakan adalah

diprakarsai oleh doa metode, yang dapat mengakibatkan doa lebih lanjut tentang metode dalam

benda-benda lain. Tapi dalam kasus didistribusikan, obyek yang terlibat dalam rantai terkait

doa mungkin terletak dalam proses yang berbeda atau komputer yang berbeda. ketika sebuah

doa melintasi batas proses atau komputer, RMI digunakan, dan remote

referensi dari objek harus tersedia untuk Invoker tersebut. Pada Gambar 5.12, objek A kebutuhan

untuk memegang referensi objek remote ke objek B.Remote objek referensi dapat diperoleh

sebagai hasil dari metode remote doa. Misalnya, objek A pada Gambar 5.12 kekuatan

mendapatkan referensi remote untuk objek F dari objek B.

Ketika suatu tindakan mengarah pada Instansiasi objek baru, objek biasanya akan

hidup dalam proses di mana Instansiasi diminta -misalnya, di mana

konstruktor digunakan. Jika objek yang baru dipakai memiliki remote interface, itu akan menjadi

objek remote dengan referensi objek remote.

aplikasi terdistribusi dapat memberikan objek remote dengan metode untuk

instantiate obyek yang dapat diakses oleh RMI, sehingga secara efektif memberikan efek

Instansiasi terpencil benda. Misalnya, jika objek L pada Gambar 5.14 berisi

metode untuk membuat objek jarak jauh, maka doa jauh dari C dan bisa K

menyebabkan Instansiasi dari M objek dan N, respectivel

pengumpulan sampah dalam sistem terdistribusi-objek: Jika bahasa, misalnya Jawa,

mendukung pengumpulan sampah, maka setiap sistem RMI terkait harus memungkinkan sampah

koleksi benda-benda jauh. Didistribusikan collectionis sampah umumnya dicapai oleh

kerjasama antara sampah lokal yang ada dan modul menambahkan bahwa

melakukan suatu bentuk pengumpulan sampah didistribusikan, biasanya didasarkan pada referensi menghitung.

Bagian 5.4.3 menjelaskan skema tersebut secara rinci. Jika pengumpulan sampah tidak tersedia,

maka objek remote yang tidak lagi diperlukan harus dihapus.

Pengecualian: Setiap remote doa mungkin gagal karena alasan yang berhubungan dengan objek dipanggil

berada di proses yang berbeda atau komputer dari Invoker tersebut. Misalnya, proses

yang berisi objek remote mungkin telah jatuh atau mungkin terlalu sibuk untuk menjawab, atau

doa atau pesan hasil mungkin akan hilang. Oleh karena itu, methodinvocation jarak jauh harus

dapat meningkatkan pengecualian seperti timeout yang disebabkan distribusi serta mereka

muncul selama pelaksanaan methodinvoked tersebut. Contoh yang terakhir adalah usaha

untuk membaca di luar akhir file, atau untuk mengakses file tanpa izin yang benar

CORBA IDL menyediakan notasi untuk menentukan pengecualian aplikasi-tingkat, dan

sistem yang mendasarinya menghasilkan pengecualian standar ketika kesalahan karena distribusi

terjadi. program client CORBA harus mampu untuk menangani pengecualian. Misalnya,

program klien C ++ akan menggunakan mekanisme pengecualian dalam C ++.

5.4.2 Implementasi RMI

Beberapa objek dan modul terpisah yang terlibat dalam mencapai metode remote

doa. Ini ditunjukkan pada Gambar 5.15, di mana aplikasi-levelobject A

memanggil metode dalam objek aplikasi-tingkat jarak jauh B yang memegang remote

referensi obyek. Bagian ini membahas peran dari masing-masing komponen ditunjukkan pada

angka itu, berurusan pertama dengan komunikasi dan remote reference modul dan kemudian

dengan software RMI yang berjalan atas mereka.

Kami kemudian mengeksplorasi topik terkait berikut: generasi proxy, yang

pengikatan nama untuk referensi objek remote mereka, aktivasi dan passivasi

objek dan lokasi objek dari referensi objek remote mereka.

modul komunikasi • Kedua modul komunikasi bekerja sama melaksanakan

request-reply protocol, yang mengirimkan replymessages requestand antara klien

dan server. Isi replymessages requestand ditunjukkan pada Gambar 5.4. Itu

modul komunikasi hanya menggunakan threeitems pertama, yang menentukan jenis pesan,

itsrequestIdand referensi terpencil objek yang akan dipanggil. The operationIdan

semua marshalling dan unmarshalling adalah perhatian dari perangkat lunak RMI, dibahas

di bawah. Modul komunikasi bersama-sama bertanggung jawab untuk menyediakan ditentukan

semantik doa, misalnya di-paling-sekali.

Modul komunikasi di server memilih operator untuk kelas yang

keberatan dipanggil, menyampaikan referensi lokal, yang mendapat dari remote

modul referensi imbalan untuk identifier objek remote di requestmessage tersebut. Itu

Peran operator dibahas inthe bagian yang akan datang pada perangkat lunak RMI.

modul remote reference • Sebuah modul remote reference isresponsible untuk menerjemahkan

antara referensi objek lokal dan remote dan untuk menciptakan referensi objek remote.

Untuk mendukung tanggung jawabnya, modul referensi terpencil di setiap proses memiliki aremote

objek tablethat mencatat korespondensi antara referensi objek lokal dalam

Proses dan referensi objek remote (yang seluruh sistem). tabel meliputi:

Entri untuk semua objek remote dipegang oleh proses. Misalnya, pada Gambar
5.15 remote object B akan disimpan di tabel di server.

Sebuah entri untuk setiap proxy lokal. Misalnya, pada Gambar 5.15 proxy untuk B akan
direkam dalam tabel di klien

Peran proxy dibahas dalam ayat di software RMI . Tindakan

modul remote reference adalah sebagai berikut :

Ketika sebuah objek remote harus melewati sebagai argumen atau hasilnya untuk pertama kalinya ,
modul referensi remote diminta untuk membuat referensi objek remote , yang

menambah meja -nya .

Ketika referensi objek remote tiba di replymessage pemohon , remote
modul referensi meminta referensi obyek lokal yang sesuai , yang mungkin

merujuk baik untuk proxy atau objek remote . Dalam hal objek remote

referensi tidak dalam tabel , perangkat lunak RMI menciptakan proxy baru dan meminta

modul referensi remote untuk menambahkannya ke meja .

Modul ini disebut oleh komponen perangkat lunak RMI ketika mereka menyusun

andunmarshalling referensi objek remote . Misalnya , ketika requestmessage

ysng , meja digunakan untuk mengetahui objek lokal akan dipanggil

Pegawai • Aservantis sebuah instance dari kelas yang menyediakan tubuh dari objek remote.

Ini adalah hamba yang akhirnya menangani permintaan jauh diteruskan oleh

sesuai kerangka. Hamba hidup dalam proses server. Mereka dibuat ketika

objek remote dipakai dan tetap digunakan sampai mereka tidak lagi diperlukan, akhirnya

menjadi sampah yang dikumpulkan atau dihapus.

RMI software • ini terdiri dari lapisan software antara aplikasi-tingkat

objek dan komunikasi dan remote reference modul. Peran dari

objek middleware yang ditunjukkan pada Gambar 5.15 adalah sebagai berikut:

Proxy: Peran proxy adalah untuk membuat doa metode remote transparan untuk

klien dengan berperilaku seperti objek lokal untuk Invoker tersebut; tapi bukannya mengeksekusi

doa, ke depan dalam pesan ke objek remote. Ini menyembunyikan rincian

referensi objek remote, marshalling argumen, unmarshalling hasil dan

mengirim dan menerima pesan dari klien. Ada satu proxy untuk setiap

remote object yang proses memegang referensi objek remote. Kelas dari

Proxy mengimplementasikan metode dalam remote interface dari objek remote itu

mewakili, yang menjamin bahwa metode remote doa cocok untuk jenis

remote object. Namun, proxy menerapkan mereka cukup berbeda. Setiap

metode proxy marsekal referensi ke objek target, operationIdand sendiri

argumen ke requestmessage dan mengirimkannya ke target. Kemudian menunggu balasan

pesan, unmarshals dan mengembalikan hasil untuk Invoker tersebut.

Dispatcher: Sebuah server memiliki satu operator dan satu kerangka untuk masing-masing kelas

mewakili objek remote. Dalam contoh kita, server memiliki operator dan

kerangka untuk kelas remote object B. Dispatcher menerima requestmessages

dari modul komunikasi. Ini menggunakan yang operationIdto pilih yang sesuai

metode dalam kerangka, menyampaikan requestmessage tersebut. Petugas operator dan proxy

menggunakan alokasi yang sama operationIdsto metode remote interface.

Skeleton: Kelas remote object memiliki kerangka, yang mengimplementasikan metode

di remote interface. Mereka diimplementasikan cukup berbeda dari metode di

hamba yang menjelma objek remote. Sebuah metode kerangka unmarshals yang

argumen di requestmessage dan memanggil metode yang sesuai dalam

pelayan. Ini menunggu untuk doa untuk menyelesaikan dan kemudian marsekal hasilnya, bersama-sama

dengan pengecualian, dalam replymessage metode proxy pengirim.

referensi objek remote marshalled dalam bentuk yang ditunjukkan pada Gambar 4.13, yang

termasuk informasi tentang antarmuka terpencil remote object -misalnya, yang

nama dari remote interface atau kelas objek remote. Informasi ini memungkinkan

kelas proxy akan ditentukan sehingga proxy baru dapat dibuat jika diperlukan.

Misalnya, nama kelas proxy dapat dihasilkan dengan menambahkan _proxyto nama

dari remote interface.

Generasi kelas untuk proxy, petugas operator dan kerangka • Kelas untuk

proxy, operator dan kerangka yang digunakan dalam RMI dihasilkan secara otomatis oleh sebuah antarmuka

penyusun. Misalnya, dalam pelaksanaan Orbix CORBA, antarmuka remote

benda didefinisikan dalam CORBA IDL, dan compiler antarmuka dapat digunakan untuk menghasilkan

kelas untuk proxy, petugas operator dan kerangka dalam C ++ atau di Jawa [www.iona.com].

Untuk Java RMI, set metode yang ditawarkan oleh remote object didefinisikan sebagai interfac Java

yang diimplementasikan dalam kelas dari objek remote. The Java RMI compiler

menghasilkan proxy, operator dan kerangka kelas dari kelas dari objek remote.

doa dinamis: Sebuah alternatif untuk proxy • proxy saja dijelaskan adalah statis, di

arti bahwa kelasnya dihasilkan dari definisi antarmuka dan kemudian disusun ke dalam

kode klien. Kadang-kadang hal ini tidak praktis, meskipun. Misalkan sebuah program klien

menerima referensi remote untuk obyek yang remote interface itu tidak tersedia di

waktu kompilasi. Dalam hal ini perlu cara lain untuk memohon objek remote. Dinamis

invocationgives akses klien untuk representasi generik dari remote doa seperti

yang doOperationmethod digunakan dalam Latihan 5.18, yang tersedia sebagai bagian dari

infrastruktur untuk RMI (lihat Bagian 5.4.1). Klien akan memasok objek remote

referensi, nama methodand argumen untuk doOperationand kemudian menunggu untuk

menerima hasil.

Perhatikan bahwa meskipun referensi objek remote mencakup informasi tentang

antarmuka dari remote object, seperti namanya, ini tidak cukup - nama-nama

metode dan jenis argumen yang diperlukan untuk membuat doa dinamis.

CORBA menyediakan informasi ini melalui komponen yang disebut Interface Repository,

yang dijelaskan dalam Bab 8.

Antarmuka doa dinamis tidak nyaman untuk digunakan sebagai proxy, tetapi

berguna dalam aplikasi di mana beberapa antarmuka objek remote tidak dapat menjadi

diprediksi pada saat desain. Contoh dari aplikasi tersebut adalah papan tulis bersama

yang kita gunakan untuk menggambarkan Java RMI (Bagian 5.5), CORBA (Bab 8) dan layanan web

(Bagian 9.2.3). Untuk meringkas: aplikasi papan tulis bersama menampilkan banyak

berbagai jenis bentuk, seperti lingkaran, persegi panjang dan garis, tetapi juga harus mampu

untuk menampilkan bentuk baru yang tidak predictedwhen klien disusun. Seorang klien

yang menggunakan doa dinamis mampu mengatasi tantangan ini. Kita akan melihat di Bagian

5.5 bahwa download dinamis kelas untuk klien adalah sebuah alternatif untuk dinamis

doa. Ini tersedia di Jawa RMI - sistem single-bahasa

kerangka dinamis: Jelas, dari contoh di atas, bahwa hal itu juga dapat timbul bahwa server

harus menjadi tuan rumah objek remote yang antarmuka yang tidak diketahui pada waktu kompilasi. Untuk

Misalnya, klien dapat menyediakan jenis baru bentuk ke server papan tulis bersama untuk itu

menyimpan. Sebuah server dengan kerangka dinamis akan mampu menghadapi situasi ini. Kami

menunda menggambarkan kerangka dinamis sampai bab tentang CORBA (Bab 8). Namun,

seperti yang akan kita lihat dalam Bagian 5.5, Java RMI membahas masalah ini dengan menggunakan generik

operator dan download dinamis kelas ke server.

Server dan client program • Program server berisi kelas untuk

dispatcher dan kerangka, bersama-sama dengan implementasi dari kelas semua

hamba yang mendukung. Selain itu, program server berisi inisialisasi

Bagian (misalnya, dalam mainmethod di Jawa atau C ++). Bagian inisialisasi

bertanggung jawab untuk menciptakan dan menginisialisasi setidaknya salah satu pegawai yang akan diselenggarakan oleh

Server. hamba tambahan dapat dibuat dalam menanggapi permintaan dari klien. Itu

Bagian inisialisasi juga dapat mendaftar beberapa pegawai dengan bahan pengikat (lihat di bawah).

Umumnya akan mendaftar hanya satu hamba, yang dapat digunakan untuk mengakses sisanya.

Program klien akan berisi kelas proxy untuk semua remote

objek yang akan memanggil. Hal ini dapat menggunakan pengikat untuk mencari referensi objek remote.

metode pabrik: Kami mencatat sebelumnya bahwa antarmuka objek remote tidak dapat mencakup

konstruktor. Ini berarti bahwa hamba tidak dapat createdby remote doa di

konstruktor. Pegawai yang dibuat baik di bagian inisialisasi atau metode dalam

remote interface yang dirancang untuk tujuan itu. Metoda yang pabrik jangka kadang-kadang digunakan

untuk merujuk kepada sebuah metode yang menciptakan hamba, dan pabrik objectis obyek dengan pabrik

metode. Setiap objek jarak jauh yang perlu untuk dapat membuat objek jarak jauh baru di

permintaan klien harus menyediakan metode dalam antarmuka yang terpencil untuk tujuan ini. Seperti itu

metode yang disebut metode pabrik, meskipun mereka benar-benar metode hanya normal.

Pengikat • Program Client umumnya memerlukan sarana untuk memperoleh objek remote

referensi untuk setidaknya salah satu objek jarak jauh yang dimiliki oleh server. Misalnya, pada Gambar

5.12, objek A akan membutuhkan referensi objek remote untuk objek B. Abinder dalam

sistem terdistribusi adalah layanan terpisah yang memelihara sebuah tabel yang berisi pemetaan dari

nama tekstual untuk referensi objek remote. Hal ini digunakan oleh server untuk mendaftarkan terpencil

objek dengan nama dan oleh klien untuk melihat mereka. Bab 8 berisi diskusi dari

CORBA Layanan Penamaan. The Java pengikat, rmiregistry, dibahas secara singkat dalam kasus ini

belajar di Jawa RMI dalam Bagian 5.5.

Server benang • Setiap kali sebuah objek mengeksekusi remote doa, eksekusi yang mungkin

menyebabkan doa lebih lanjut dari metode dalam objek remote lain, yang mungkin memakan

waktu untuk kembali. Untuk menghindari eksekusi satu remote doa menunda eksekusi

lain, server umumnya mengalokasikan thread terpisah untuk pelaksanaan setiap jarak jauh

doa. Ketika hal ini terjadi, desainer dari pelaksanaan objek remote

harus memungkinkan untuk effectson negara yang eksekusi konkuren

Aktivasi objek remote • Beberapa aplikasi memerlukan informasi bertahan

jangka waktu yang lama. Namun, hal ini tidak praktis untuk objek yang mewakili seperti

informasi yang akan disimpan dalam proses yang berjalan untuk waktu yang terbatas, terutama karena mereka

tidak selalu digunakan sepanjang waktu. Untuk menghindari pemborosan potensi sumber daya yang

akan hasil dari menjalankan semua server yang mengelola objek jarak jauh sepanjang waktu,

server dapat dimulai kapan mereka dibutuhkan oleh klien, seperti yang dilakukan untuk standar

set layanan TCP seperti FTP, yang dimulai pada permintaan oleh layanan yang disebut inetd.

Proses yang mulai proses server untuk host objek remote disebut aktivator, untuk

berikut alasan.

Sebuah objek remote digambarkan sebagai activewhen itu tersedia untuk doa dalam

proses yang berjalan, sedangkan yang disebut passiveif saat ini tidak aktif tetapi dapat dibuat

aktif. Sebuah objek pasif terdiri dari dua bagian:

penerapan metode tersebut;
negara dalam bentuk marshall.
Activationconsists menciptakan sebuah objek aktif dari objek pasif yang sesuai dengan

membuat contoh baru dari kelas dan menginisialisasi variabel contoh nya dari disimpan

negara. objek pasif dapat diaktifkan pada permintaan, misalnya ketika mereka perlu

dipanggil oleh objek lain.

Anactivatoris bertanggung jawab untuk:

mendaftarkan objek pasif yang tersedia untuk aktivasi, yang melibatkan
pencatatan nama-nama server terhadap URL atau nama file dari

sesuai objek pasif;

mulai proses server bernama dan mengaktifkan objek remote di dalamnya;
melacak lokasi server untuk objek jarak jauh yang memiliki sudah
diaktifkan.

Java RMI menyediakan kemampuan untuk membuat beberapa objek remote activatable [java.sun.com

IX]. Ketika sebuah objek activatable dipanggil, objek ifthat saat ini tidak aktif,

objek dibuat aktif dari marshalledstate dan kemudian diteruskan doa tersebut. menggunakan

satu penggerak pada setiap komputer server.

Studi kasus CORBA dalam Bab 8 menjelaskan repositori pelaksanaan - sebuah

bentuk lemah dari aktivator yang dimulai jasa yang mengandung benda-benda dalam keadaan awal.

toko objek persisten • Sebuah objek yang dijamin untuk hidup antara aktivasi dari

proses ini disebut objek persisten. objek persisten umumnya dikelola oleh

objek toko persisten, yang menyimpan negara mereka dalam bentuk marshalled pada disk. contoh

termasuk CORBA layanan negara terus-menerus (lihat Bab 8), Data Java Objects

[Java.sun.com VIII] dan Persistent Java [Jordan 1996; java.sun.com IV].

Secara umum, toko objek terus-menerus akan mengelola jumlah yang sangat besar persisten

objek, yang disimpan pada disk atau dalam database sampai mereka dibutuhkan. Mereka akan

diaktifkan bila metode mereka dipanggil oleh objek lain. Aktivasi umumnya

dirancang untuk menjadi transparan - yaitu, Invoker yang seharusnya tidak bisa mengatakan apakah

objek sudah di memori utama atau harus diaktifkan sebelum metode yang dipanggil.

objek persisten yang tidak lagi diperlukan di memori utama dapat dipasivasi. Di sebagian besar

kasus, objek yang disimpan di toko objek terus-menerus setiap kali mereka mencapai konsisten

negara, demi toleransi kesalahan. Toko objek terus-menerus memerlukan strategi untuk

memutuskan kapan untuk passivate objek. Sebagai contoh, dapat melakukannya dalam menanggapi permintaan

dalam program yang diaktifkan benda, baik pada akhir transaksi atau ketika

keluar program. toko objek persisten umumnya berusaha untuk mengoptimalkan pasivasi oleh

tabungan hanya benda-benda yang telah dimodifikasi sejak terakhir kali mereka diselamatkan

toko objek persisten umumnya memungkinkan koleksi benda persisten terkait dengan

memiliki nama terbaca-manusia seperti nama path atau URL. Dalam prakteknya, setiap nama humanreadable dikaitkan dengan akar set terhubung obyek persisten.

Ada dua pendekatan untuk memutuskan apakah sebuah benda persisten atau tidak:

Toko objek terus-menerus mempertahankan beberapa akar yang gigih, dan benda yang
dicapai dari akar persisten didefinisikan menjadi persisten. Pendekatan ini digunakan

oleh Persistent Java, Java Data Objects dan Perdis [Ferreira et al.2000]. Mereka

memanfaatkan kolektor sampah untuk membuang benda-benda yang tidak lagi terjangkau

dari akar terus-menerus.

Toko objek terus-menerus memberikan beberapa kelas yang ketekunan didasarkan -
objek persisten milik subclass mereka. Misalnya, di Arjuna [Parrington

et al.1995], objek persisten didasarkan ONC ++ kelas yang menyediakan transaksi

dan pemulihan. objek yang tidak diinginkan harus dihapus secara eksplisit.

Beberapa objek toko persisten, seperti Perdis dan Khazana [Carter et al.1998], memungkinkan

objek yang akan diaktifkan dalam beberapa cache lokal untuk pengguna, bukan di server. Pada kasus ini,

protokol konsistensi persediaan diperlukan. Rincian lebih lanjut tentang model konsistensi dapat

ditemukan di situs web pendamping, dalam bab dari edisi keempat didistribusikan

berbagi memori [www.cdk5.net/dsm

lokasi objek • Bagian 4.3.4 menjelaskan bentuk referensi objek remote yang berisi

alamat Internet dan nomor port dari proses yang menciptakan objek remote sebagai

cara menjamin keunikan. Bentuk referensi objek remote juga dapat digunakan

sebagai alamat untuk remote object, asalkan bahwa objek tetap dalam proses yang sama untuk

sisa hidupnya. Tapi beberapa objek remote akan ada dalam serangkaian proses yang berbeda,

mungkin pada komputer yang berbeda, sepanjang hidup mereka. Dalam hal ini, objek remote

referensi tidak dapat bertindak sebagai alamat. Klien membuat doa membutuhkan baik remote

referensi obyek dan alamat yang mengirim doa.

Alokasi servicehelps klien untuk mencari benda-benda yang jauh dari objek remote mereka

referensi. Menggunakan database yang memetakan objectreferences remote untuk kemungkinan mereka

lokasi saat ini - lokasi yang kemungkinan karena objek mungkin telah bermigrasi lagi

sejak terakhir dengar. Sebagai contoh, sistem Awan [Dasgupta et al.1991] dan

sistem Emerald [Juli et al.1988] digunakan cache / skema disiarkan di mana anggota

dari layanan lokasi pada setiap komputer memegang cache kecil remote object pemetaan referenceto-lokasi. Jika referensi objek remote dalam cache, alamat yang mencoba

untuk doa dan akan gagal jika objek telah pindah. Untuk mencari sebuah benda yang memiliki

dipindahkan atau yang lokasinya tidak dalam cache, sistem siaran permintaan. Ini

Skema dapat ditingkatkan dengan penggunaan pointer lokasi depan, yang mengandung petunjuk sebagai

ke lokasi baru dari suatu objek. Contoh lain adalah layanan resolusi yang dibutuhkan untuk

menyelesaikan URN dari sumber daya ke URL saat ini, yang disebutkan dalam Bagian 9.

5.4.3 pengumpulan sampah Terdistribusi

Tujuan dari seorang kolektor sampah didistribusikan adalah untuk memastikan bahwa jika referensi lokal atau remote

untuk sebuah objek masih dipegang mana saja dalam satu set objek terdistribusi, obyek itu sendiri akan

terus ada, tapi begitu ada objek lagi memegang referensi untuk itu, objek

akan dikumpulkan dan memori menggunakan pulih.

Kami menggambarkan algoritma pengumpulan sampah Java didistribusikan, yang mirip dengan

yang dijelaskan oleh Birrell et al. [1995]. Hal ini didasarkan pada referensi menghitung. Setiap kali

referensi objek remote memasuki proses, proxy akan dibuat dan akan tinggal di sana untuk

asalkan diperlukan. Proses di mana kehidupan objek (servernya) shouldbe diinformasikan

proxy baru pada klien. Lalu kemudian ketika tidak ada lagi proxy pada klien,

server harus diberitahu. kolektor sampah yang didistribusikan bekerjasama

dengan pengumpul sampah lokal sebagai berikut:

Setiap proses server memelihara satu set nama-nama proses yang terus terpencil
objek referensi untuk masing-masing objek yang terpencil; misalnya, B.holdersis set

proses klien (mesin virtual) yang memiliki proxy untuk objek B. (Dalam Gambar

5.15, set ini akan mencakup proses klien diilustrasikan.) Set ini dapat diselenggarakan dalam

kolom tambahan dalam tabel objek remote.

Ketika klien Cfirst menerima referensi remote ke remote object tertentu, B,
itu membuat AddRef (B) doa ke server itu objek remote dan kemudian

menciptakan proxy; server menambahkan CTO B.holders.

Ketika klien C pemberitahuan sampah yang proxy untuk objek remote Bis ada
lagi dicapai, itu membuat removeRef (B) doa untuk yang sesuai Server

dan kemudian menghapus proxy; server menghilangkan Cfrom B.holders.

WhenB.holdersis kosong, server sampah lokal akan merebut kembali
ruang yang ditempati oleh bunless ada pemegang lokal.

Algoritma ini dimaksudkan untuk dilakukan dengan cara berpasangan request-reply

komunikasi dengan di-paling-onceinvocation semantik antara referensi terpencil

modul dalam proses - tidak memerlukan sinkronisasi global. Perhatikan juga bahwa

doa tambahan yang dibuat atas nama algoritma pengumpulan sampah tidak mempengaruhi setiap

RMI normal; mereka terjadi hanya ketika proxy diciptakan dan dihapus.

Ada kemungkinan bahwa salah satu klien dapat membuat removeRef (B) doa di sekitar

waktu yang sama seperti klien lain membuat AddRef (B) doa. Jika removeRefarrives

pertama dan B.holders kosong, remote object Bcould dihapus sebelum AddRef

tiba. Untuk menghindari situasi ini, jika set B.holders kosong pada saat remote

referensi obyek ditransmisikan, entri sementara ditambahkan sampai AddRef tiba.

The Java didistribusikan algoritma pengumpulan sampah mentolerir komunikasi

kegagalan dengan menggunakan pendekatan berikut. Operasi AddRef andremoveRef adalah

idempoten. Dalam hal bahwa AddRef (B) panggilan mengembalikan pengecualian (yang berarti bahwa

Metode ini baik dijalankan sekali atau tidak sama sekali), klien tidak akan membuat proxy tapi akan

membuat removeRef (B) panggilan. Pengaruh removeRefis benar atau tidaknya AddRef

berhasil. Kasus di mana removeRef gagal ditangani oleh sewa

The Java pengumpulan sampah didistribusikan algorithmcan mentolerir kegagalan klien

proses. Untuk mencapai hal ini, server sewa benda mereka toclients untuk jangka waktu terbatas

waktu. Periode sewa dimulai ketika klien membuat addRefinvocation ke server.

Itu berakhir baik bila waktu telah berakhir atau ketika klien membuat removeRef a

doa ke server. Informasi yang disimpan oleh server mengenai setiap sewa

berisi pengenal dari mesin virtual klien dan masa sewa. klien

bertanggung jawab untuk meminta server untuk memperbaharui sewa mereka sebelum mereka berakhir.

Sewa di Jini • Sistem Jini didistribusikan mencakup spesifikasi untuk sewa [Arnold

et al.1999] yang dapat digunakan dalam berbagai situasi ketika satu objek menawarkan suatu sumber daya

ke objek lain -misalnya, ketika objek remote menawarkan referensi ke objek lain.

Objek yang menawarkan sumber daya tersebut berisiko memiliki untuk menjaga sumber daya ketika

pengguna tidak lagi tertarik atau program mereka telah keluar. Untuk menghindari rumit

protokol untuk menemukan apakah pengguna sumber daya masih tertarik, sumber daya yang

ditawarkan untuk jangka waktu terbatas. Pemberian penggunaan sumber daya untuk jangka waktu

waktu disebut sewa. Objek menawarkan sumber daya yang akan mempertahankannya sampai waktu di

sewa berakhir. Para pengguna sumber daya yang bertanggung jawab untuk meminta perpanjangan mereka ketika

mereka berakhir.

Periode sewa dapat dinegosiasikan antara pemberi dan penerima di

Jini, meskipun hal ini tidak terjadi dengan sewa yang digunakan di Jawa RMI. Dalam Jini, obyek

mewakili sewa mengimplementasikan Leaseinterface. Ini berisi informasi tentang

periode sewa dan metode yang memungkinkan sewa harus diperbarui atau dibatalkan. Itu

pemberi mengembalikan sebuah instance dari Leasewhen ini memasok sumber daya ke obyek lain

5.5 Studi kasus: Java RMI

Java RMI memperluas model objek Java untuk memberikan dukungan untuk objek terdistribusi di

bahasa Jawa. Secara khusus, hal itu memungkinkan benda toinvoke metode pada objek remote menggunakan

sintaks yang sama seperti untuk doa lokal. Selain itu, jenis pemeriksaan berlaku sama untuk

doa jarak jauh untuk orang-orang lokal. Namun, sebuah objek membuat remote doa adalah

menyadari bahwa tujuannya adalah jauh karena harus menangani RemoteExceptions; dan

implementor dari remote object menyadari bahwa itu jauh karena harus melaksanakan

Remoteinterface. Meskipun model objek terdistribusi diintegrasikan ke Jawa dalam

cara alami, semantik parameter passing berbeda karena Invoker dan sasaran yang

jauh dari satu sama lain.

Pemrograman aplikasi terdistribusi di Jawa RMI harus relatif

sederhana karena merupakan sistem tunggal-bahasa - remote interface didefinisikan di Jawa

bahasa. Jika sistem multi-bahasa seperti CORBA digunakan, kebutuhan programmer

untuk belajar IDL dan untuk memahami bagaimana peta ke bahasa implementasi.

Namun, bahkan dalam satu sistem bahasa, programmer dari objek remote harus

pertimbangkan perilakunya di lingkungan bersamaan.

Dalam sisa pendahuluan ini, kami memberikan contoh dari remote interface,

kemudian mendiskusikan semantik parameter-lewat dengan mengacu contoh. Akhirnya, kami

membahas download kelas dan pengikat. Bagian kedua dari studi kasus ini

membahas bagaimana membangun program klien dan server untuk contoh antarmuka. Ketiga

Bagian berkaitan dengan desain dan implementasi Java RMI. Untuk rincian lengkap

Jawa RMI, lihat tutorial di remote doa [java.sun.com Saya].

Dalam studi kasus ini, studi kasus CORBA dalam Bab 8 dan pembahasan web

jasa dalam Bab 9, kami menggunakan shared whiteboardas contoh. Ini terdistribusi

program yang memungkinkan sekelompok pengguna untuk berbagi pandangan umum dari permukaan menggambar

mengandung objek grafis, seperti persegi panjang, garis dan lingkaran, masing-masing memiliki

telah ditarik oleh salah satu pengguna. Server mempertahankan keadaan saat menggambar dengan

menyediakan operasi untuk klien untuk menginformasikan tentang bentuk terbaru salah satu pengguna mereka

telah ditarik dan menjaga catatan semua bentuk yang telah diterima. server juga menyediakan

operasi yang memungkinkan klien untuk mengambil bentuk terbaru yang ditarik oleh pengguna lain dengan polling

server. server memiliki nomor versi (integer) yang akan menambahkan setiap kali

bentuk baru tiba dan menempel dengan bentuk baru. server menyediakan operasi

memungkinkan klien untuk menanyakan tentang nomor versi dan nomor versi masing-masing

bentuk, sehingga mereka dapat menghindari mengambil bentuk yang telah mereka miliki.

remote interface di Jawa RMI • remote interface didefinisikan dengan memperluas sebuah

antarmuka yang disebut Remoteprovided di java.rmipackage tersebut. Metode harus membuang

RemoteException, tetapi pengecualian khusus aplikasi juga dapat dibuang. Gambar 5.16

menunjukkan contoh dua remote interface disebut Shapeand ShapeList. Dalam contoh ini,

GraphicalObjectis kelas yang memegang keadaan objek grafis -misalnya, yang

Jenis, posisinya, melampirkan persegi panjang, warna garis dan isi warna -dan memberikan

operasi untuk mengakses dan memperbarui keadaan. GraphicalObjectmust melaksanakan

Serializableinterface. Pertimbangkan antarmuka Shapefirst: return getVersionmethod

integer, sedangkan getAllStatemethod mengembalikan sebuah instance dari kelas

GraphicalObject. Sekarang perhatikan ShapeList antarmuka: nya newShapemethod melewati sebuah

contoh GraphicalObjectas argumen tetapi mengembalikan sebuah objek dengan remote

Gambar 5.16 Java antarmuka jauh Shapeand ShapeList

mengimpor java.rmi * . ;

impor java.util.Vector ;

antarmuka Shape publik meluas jauh {

int getVersion ( ) throws RemoteException ;

GraphicalObject getAllState ( ) throws RemoteException ; 1

}

antarmuka ShapeList publik meluas jauh {

Bentuk newShape ( GraphicalObject g ) throws RemoteException ; 2

allShapes vektor ( ) throws RemoteException ;

int getVersion ( ) throws RemoteExceptio

antarmuka (yaitu, objek remote) sebagai hasilnya. Poin penting untuk dicatat adalah bahwa kedua

benda biasa dan objek jarak jauh dapat muncul sebagai argumen dan menghasilkan remote

antarmuka. Yang terakhir selalu dilambangkan dengan nama remote interface mereka. Di depan

ayat, kita membahas bagaimana objek dan objek remote biasa dilewatkan sebagai argumen

dan hasil.

Parameter dan hasil yang lewat • Di Jawa RMI, parameter metode diasumsikan

menjadi inputparameters dan hasil dari metode adalah outputparameter tunggal. Bagian

4.3.2 menjelaskan serialisasi Jawa, yang merupakan argumen marshalling usedfor dan hasil

di Jawa RMI. Setiap objek yang serializable - yaitu, yang mengimplementasikan Serializable

antarmuka - dapat lulus sebagai argumen atau hasil di Jawa RMI. Semua tipe primitif dan

objek remote adalah serializable. Kelas untuk argumen dan nilai-nilai hasil-download

kepada penerima oleh sistem RMI mana diperlukan.

Melewati objek remote: Ketika jenis parameter atau hasil nilai didefinisikan sebagai

remote interface, argumen thecorresponding atau hasil selalu lulus sebagai remote

referensi obyek. Misalnya, pada Gambar 5.16, baris 2, nilai kembali dari metode

newShapeis didefinisikan sebagai bentuk-remote interface. Ketika referensi objek remote

diterima, dapat digunakan untuk membuat RMI panggilan pada objek remote yang mengacu.

Melewati objek remote: Ketika jenis parameter atau hasil nilai didefinisikan sebagai

remote interface, argumen thecorresponding atau hasil selalu lulus sebagai remote

referensi obyek. Misalnya, pada Gambar 5.16, baris 2, nilai kembali dari metode

newShapeis didefinisikan sebagai bentuk-remote interface. Ketika referensi objek remote

diterima, dapat digunakan untuk membuat RMI panggilan pada objek remote yang mengacu.

Melewati benda non-remote: Semua benda non-jauh serializable disalin dan

lewat nilai. Misalnya, pada Gambar 5.16 (baris 2 dan 1) dalil

newShapeand nilai kembali dari getAllStateare kedua jenis GraphicalObject,

yang serializable dan dilewatkan oleh nilai. Ketika suatu objek melewati nilai, baru

objek dibuat dalam proses penerima. Metode objek baru ini dapat

dipanggil secara lokal, mungkin menyebabkan negara untuk berbeda dari keadaan objek asli

dalam proses pengirim.

Dengan demikian, dalam contoh kita, klien menggunakan metode newShapeto melewati sebuah instance dari

GraphicalObjectto server; server membuat remote object jenis Shape

yang berisi keadaan GraphicalObjectand mengembalikan referensi objek remote untuk itu.

Argumen dan kembali nilai-nilai dalam remote doa yang serial ke sungai menggunakan

metode yang dijelaskan dalam Bagian 4.3.2, dengan modifikasi berikut

Gambar 5.17 TheNamingclass Jawa rmiregistry

kekosongan rebind ( String nama , Remote obj )

Metode ini digunakan oleh server untuk mendaftarkan identifier dari objek remote dengan nama,

seperti yang ditunjukkan pada Gambar 5.18 , baris 3 .

kekosongan mengikat ( String nama , Remote obj )

Metode ini dapat alternatif digunakan oleh server untuk mendaftarkan objek remote dengan nama,

tetapi jika nama tersebut sudah terikat untuk referensi remote object eksepsi dilemparkan .

kekosongan memperlonggar ( String nama , Remote obj )

Metode ini menghilangkan mengikat .

Terpencil lookup ( String nama )

Metode ini digunakan oleh klien untuk mencari objek remote dengan nama, seperti yang ditunjukkan pada Gambar

5.20 , baris 1. Sebuah referensi objek remote dikembalikan .

String [ ] list ()

Metode ini mengembalikan array Stringscontaining nama terikat dalam registri

Setiap kali sebuah objek yang mengimplementasikan Remoteinterface serial itu,
digantikan oleh referensi objek remote, yang berisi nama-nya (remote

) Kelas objek.

Ketika objek apapun serial, informasi kelasnya dijelaskan dengan lokasi
dari kelas (sebagai URL), yang memungkinkan kelas untuk di-download oleh penerima.

Download kelas • Java dirancang untuk memungkinkan kelas untuk di-download dari satu

mesin virtual yang lain. Hal ini sangat relevan dengan objek terdistribusi yang

berkomunikasi dengan cara remote doa. Kita telah melihat bahwa benda-benda non-remote

lewat nilai dan remote objek tersebut diteruskan oleh referensi sebagai argumen dan hasil

SIMLR. Jika penerima tidak sudah memiliki kelas obyek melewati nilai, yang

Kode-download secara otomatis. Demikian pula, jika penerima objek remote

referensi sudah tidak memiliki kelas untuk proxy, kode download

secara otomatis. Ini memiliki dua keuntungan:

Tidak perlu untuk setiap pengguna untuk menjaga set yang sama kelas dalam kerja mereka
lingkungan Hidup.

Kedua program client dan server dapat maketransparent penggunaan contoh baru
kelas setiap kali mereka menambahkan.

Sebagai contoh, pertimbangkan whiteboardprogram dan mengira bahwa yang awal

pelaksanaan GraphicalObjectdoes tidak memungkinkan untuk teks. Seorang klien dengan tekstual yang

objek dapat menerapkan subclass dari penawaran GraphicalObjectthat dengan teks dan lulus

Misalnya ke server sebagai argumen dari newShapemethod. Setelah itu, klien lain

mungkin mengambil contoh menggunakan getAllStatemethod. Kode dari kelas baru akan

didownload secara otomatis dari klien pertama ke server dan kemudian ke klien lainnya

sesuai kebutuhan

Gambar 5.18 Java kelas ShapeListServerwith mainmethod

mengimpor java.rmi * . ;

impor java.rmi.server.UnicastRemoteObject ;

public class ShapeListServer {

public static void main ( String args [ ] ) {

System.setSecurityManager ( RMISecurityManager baru ( ) ) ;

mencoba{

ShapeList aShapeList = baru ShapeListServant ( ) ; 1

ShapeList rintisan = 2

( ShapeList ) UnicastRemoteObject.exportObject ( aShapeList , 0 ) ; 3

Naming.rebind ( " // bruno.ShapeList " , rintisan ) ; 4

System.out.println ( "server ShapeList siap " ) ;

} Catch ( Exception e ) {

System.out.println ( " ShapeList server utama " + e.getMessage ( ) ) ; }

}

}

Rmiregistry • The rmiregistry adalah pengikat untuk Java RMI. Sebuah contoh dari rmiregistry

biasanya harus dijalankan pada setiap komputer server yang host objek remote. Ia memelihara

tabel pemetaan tekstual, nama URL-gaya referensi ke objek remote host pada

komputer. Hal ini diakses oleh metode dari Namingclass, yang metode mengambil sebagai

Argumen string URL-diformat dalam bentuk:

// Computername: port / objectName

wherecomputerNameand portrefer ke lokasi rmiregistry. Jika mereka adalah

dihilangkan, komputer dan port default lokal diasumsikan. interface-nya menawarkan

metode yang ditunjukkan pada Gambar 5.17, di mana pengecualian tidak terdaftar - semua metode

bisa melempar RemoteException a.

Digunakan dengan cara ini, klien harus mengarahkan lookupenquiries mereka untuk host tertentu.

Atau, adalah mungkin untuk mengatur seluruh sistem layanan mengikat. Untuk mencapai hal ini,

diperlukan untuk menjalankan sebuah instance dari rmiregistry inthe lingkungan jaringan dan

kemudian gunakan LocateRegistry kelas, yang di java.rmi.registry, untuk menemukan registry ini.

Lebih khusus, kelas ini berisi getRegistrymethod yang mengembalikan sebuah objek dari tipe

Registryrepresenting layanan remote mengikat:

publik Registry statis getRegistry () throws RemoteException

Berikut ini, maka perlu untuk mengeluarkan panggilan dari rebindon ini kembali Registry

keberatan untuk membuat sambungan dengan rmiregistry jarak jauh

5.5.1 program klien dan server Building

Bagian ini menjelaskan langkah-langkah yang diperlukan untuk menghasilkan program client dan server yang menggunakan

theRemoteinterfaces Shapeand ShapeListshown pada Gambar 5.16 . Program server

versi sederhana dari server papan tulis yang mengimplementasikan dua antarmuka Shapeand

ShapeList . Kami menjelaskan program polling klien sederhana dan kemudian memperkenalkan callback

Gambar 5.19 Java ShapeListServantimplements kelas antarmuka ShapeList

impor java.util.Vector ;

public class ShapeListServant mengimplementasikan ShapeList {

swasta Vector thelist ; // Berisi daftar Shapes

Versi int swasta ;

publik ShapeListServant ( ) { ... }

Bentuk umum newShape ( GraphicalObject g ) { 1

Versi ++ ;

Bentuk s = new ShapeServant ( g , versi ) ; 2

theList.addElement ( s ) ;

kembali s ;

}

publik Vector allShapes ( ) { ... }

public int getVersion ( ) { ... }

teknik yang dapat digunakan untuk menghindari kebutuhan untuk polling server. versi lengkap dari

Kelas digambarkan dalam bagian ini tersedia atwww.cdk5.net/rmi.

program server • Server adalah server papan tulis: itu mewakili setiap bentuk sebagai remote

obyek yang dipakai oleh seorang hamba yang mengimplementasikan Shapeinterface dan memegang negara

dari objek grafis serta nomor versinya; itu merupakan koleksi dari bentuk

dengan menggunakan hamba lain yang mengimplementasikan ShapeListinterface dan memegang koleksi

bentuk di Vector a.

Program server terdiri dari mainmethod dan kelas hamba untuk melaksanakan

masing-masing interface terpencil. The mainmethod dari kelas server ditunjukkan pada Gambar

5.18, dengan langkah-langkah kunci yang terkandung dalam garis ditandai 1 sampai 4:

Inline 1, server menciptakan sebuah instance dari ShapeListServant.
Baris 2 dan 3 menggunakan metode exportObject (didefinisikan pada UnicastRemoteObject) ke
membuat objek ini tersedia untuk runtime RMI, sehingga membuatnya tersedia untuk

menerima doa masuk. Kedua parameter exportObjectspecifies yang

TCP port yang akan digunakan untuk doa masuk. Ini adalah praktek yang normal untuk mengatur ini untuk

nol, menyiratkan bahwa port anonim akan digunakan (salah satu yang dihasilkan oleh

RMI runtime). Menggunakan UnicastRemoteObjectensures bahwa kehidupan objek yang dihasilkan

hanya selama proses di mana ia diciptakan (alternatif adalah untuk membuat ini

Activatableobject yaitu, salah satu yang hidup di luar server misalnya).

Akhirnya, baris 4 mengikat nama objek toa terpencil di rmiregistry. Perhatikan bahwa
nilai terikat untuk nama adalah referensi objek remote, dan jenisnya adalah jenis yang

remote interface - ShapeList.

Gambar 5.19 Java ShapeListServantimplements kelas antarmuka ShapeList

impor java.util.Vector;

public class ShapeListServant mengimplementasikan ShapeList {

swasta Vector thelist; // Berisi daftar Shapes

Versi int swasta;

publik ShapeListServant () {...}

Bentuk umum newShape (GraphicalObject g) {1

Versi ++;

Bentuk s = new ShapeServant (g, versi); 2

theList.addElement (s);

kembali s;

}

publik Vector allShapes () {...}

public int getVersion () {...}

}

Dua kelas hamba yang ShapeListServant, yang mengimplementasikan ShapeList

antarmuka, andShapeServant, yang mengimplementasikan Shapeinterface. Gambar 5.19 memberikan

garis besar ShapeListServant kelas.

Gambar 5.20 klien Jawa ShapeList

mengimpor java.rmi * . ;

mengimpor java.rmi.server * . ;

impor java.util.Vector ;

public class ShapeListClient {

public static void main ( String args [ ] ) {

System.setSecurityManager ( RMISecurityManager baru ( ) ) ;

ShapeList aShapeList = null;

mencoba{

aShapeList = ( ShapeList ) Naming.lookup ( " // bruno.ShapeList " ) ; 1

Vektor slist = aShapeList.allShapes ( ) ; 2

} Catch ( RemoteException e ) { System.out.println ( e.getMessage ( ) ) ;

} Catch ( Exception e ) { System.out.println ( " Klien : " + e.getMessage

Pelaksanaan metode remote interface di kelas hamba adalah

benar-benar mudah karena bisa dilakukan tanpa kekhawatiran untuk rincian

komunikasi. Mempertimbangkan metode newShapein Gambar 5.19 (baris 1), yang bisa

disebut metode pabrik karena memungkinkan klien untuk meminta penciptaan seorang hamba.

Ia menggunakan konstruktor dari ShapeServant, yang menciptakan hamba baru yang berisi

GraphicalObjectand nomor versi lulus sebagai argumen. Jenis nilai kembali

ofnewShapeis bentuk-antarmuka dilaksanakan oleh hamba baru. Sebelum kembali,

metode newShapeadds bentuk baru vektornya yang berisi daftar bentuk

(Baris 2).

Themainmethod server perlu membuat manajer keamanan untuk mengaktifkan Java

keamanan untuk menerapkan yang tepat perlindungan untuk server RMI. Sebuah standar keamanan

Manajer disebut RMISecurityManageris tersedia. Melindungi sumber daya lokal untuk

memastikan bahwa kelas yang diambil dari situs remote tidak dapat memiliki efek pada

sumber daya seperti file, tetapi berbeda dari manajer keamanan standar Java dalam memungkinkan

program untuk menyediakan loader kelas sendiri dan menggunakan refleksi. Jika server set RMI

tidak ada manajer keamanan, proxy dan kelas hanya dapat diambil dari classpath lokal, di

untuk melindungi program dari kode yang di-download sebagai metode remote resultof

doa

Seorang klien disederhanakan untuk ShapeListserver yang diilustrasikan pada Gambar

5.20 . Setiap program klien perlu memulai dengan menggunakan pengikat untuk mencari remote

referensi obyek . Klien kami menetapkan manajer keamanan dan kemudian terlihat sebuah objek remote

referensi untuk objek jarak jauh dengan menggunakan lookupoperation dari rmiregistry ( jalur 1 ) .

Setelah memperoleh referensi obyek initialremote , klien terus dengan mengirimkan SIMLR

untuk yang objek remote atau kepada orang lain yang ditemukan selama pelaksanaannya sesuai dengan kebutuhan

penerapannya . Dalam contoh kita , klien memanggil metode allShapesin remote

objek ( baris 2 ) dan menerima vektor referensi objek remote untuk semua bentuk

saat ini disimpan di server . Jika klien telah menerapkan tampilan papan tulis , itu

akan menggunakan server getAllStatemethod di Shapeinterface untuk mengambil masing-masing

objek grafis dalam vektor dan menampilkan mereka di jendela . Setiap kali pengguna selesai

menggambar objek grafis, itu akan memanggil metode newShapein server, melewati

objek grafis baru sebagai argumen. Klien akan mencatat terbaru

nomor versi di server, dan dari waktu ke waktu akan memanggil getVersionat yang

server untuk mencari tahu apakah ada bentuk baru telah ditambahkan oleh pengguna lain. Jika demikian, itu akan

mengambil dan menampilkan mereka.

Callback • Ide umum di belakang callback adalah bahwa alih-alih klien polling

server untuk mengetahui apakah beberapa peristiwa telah terjadi, server harus memberitahukan klien

setiap kali event yang terjadi. callbackis istilah yang digunakan untuk merujuk pada tindakan server untuk

memberitahukan klien tentang peristiwa. Callback dapat diimplementasikan dalam RMI sebagai berikut:

Klien membuat remote object yang mengimplementasikan antarmuka yang berisi
metode untuk server untuk memanggil. Kita lihat ini sebagai objek callback.

Server menyediakan operasi yang memungkinkan klien tertarik untuk menginformasikan dari
referensi objek remote objek callback mereka. Ini catatan ini dalam daftar.

Setiap kali sebuah peristiwa menarik terjadi, server panggilan klien tertarik. Untuk
Misalnya, server papan tulis akan memanggil klien setiap kali objek grafis

telah ditambahkan.

Penggunaan callback menghindari kebutuhan untuk klien untuk polling obyek yang menarik di

server dan petugas yang kekurangan:

Kinerja server dapat terdegradasi oleh polling konstan.
Klien tidak dapat memberitahu pengguna update pada waktu yang tepat.
Namun, callback memiliki masalah mereka sendiri. Pertama, server harus memiliki up-todate daftar klien benda callback, tapi klien mungkin tidak selalu menginformasikan server

sebelum mereka keluar, meninggalkan server dengan daftar yang salah. leasingtechnique yang dibahas

dalam Bagian 5.4.3 dapat digunakan untuk mengatasi masalah ini. Masalah kedua terkait

dengan callback adalah bahwa server perlu membuat serangkaian SIMLR sinkron dengan

objek callback dalam daftar. Lihat Bab 6 untuk beberapa ide tentang memecahkan kedua

masalah.

Kami menggambarkan penggunaan callback dalam konteks aplikasi papan tulis. Itu

WhiteboardCallback antarmuka dapat didefinisikan sebagai berikut:

antarmuka publik WhiteboardCallback mengimplementasikan remote {

kekosongan callback (int versi) throws RemoteException;

};

Interface ini diimplementasikan sebagai objek remote oleh klien, memungkinkan server untuk

mengirim klien nomor versi setiap kali objek baru ditambahkan. Tapi sebelum server

dapat melakukan hal ini, klien perlu informthe server tentang objek callback nya. Untuk membuat ini

mungkin, ShapeListinterface membutuhkan metode tambahan seperti registerand

deregister, didefinisikan sebagai berikut:

int register (WhiteboardCallback callback) throws RemoteException;

kekosongan deregister (int callbackId) throws RemoteException;

Setelah klien telah memperoleh referensi tertalu objek remote dengan ShapeListinterface yang

(Misalnya, pada Gambar 5.20, baris 1) dan menciptakan sebuah instance dari objek callback, ia menggunakan

yang registermethod dari ShapeListto menginformasikan server yang tertarik Receivin

Gambar 5.21 Kelas mendukung Java RMI





callback. registermethod mengembalikan integer (yang callbackId) mengacu pada

pendaftaran. Ketika klien selesai harus memanggil deregisterto menginformasikan server itu

tidak lagi membutuhkan callback. server bertanggung jawab untuk menjaga daftar tertarik

klien dan memberitahukan semua dari mereka setiap kali nomor versinya meningkat.

5.5.2 Desain dan implementasi Java RMI

Sistem Jawa RMI asli yang digunakan semua komponen yang ditunjukkan pada Gambar 5.15. namun dalam

Java 1.2, fasilitas refleksi digunakan untuk membuat operator generik dan untuk menghindari

butuhkan untuk kerangka. Sebelum J2SE 5.0, proxy client yang generatedby kompilator

disebut rmicfrom kelas server dikompilasi (tidak dari definisi remote

interface). Namun, langkah ini tidak lagi diperlukan dengan versi terbaru dari J2SE,

yang berisi dukungan untuk dynamicgeneration kelas rintisan saat runtime.

Penggunaan refleksi • Refleksi digunakan untuk menyampaikan informasi dalam pesan permintaan tentang

Metode yang akan dipanggil. Hal ini dicapai dengan bantuan kelas Methodin refleksi

paket. Setiap contoh dari Methodrepresents karakteristik metode tertentu,

termasuk kelas dan jenis argumen, nilai dan pengecualian kembali. Yang paling

Fitur yang menarik dari kelas ini adalah bahwa sebuah contoh dari Methodcan akan dipanggil pada objek

dari kelas yang sesuai dengan cara invokemethod nya. invokemethod membutuhkan dua

argumen: pertama menentukan objek untuk menerima doa dan yang kedua adalah

array Objectcontaining argumen. hasilnya dikembalikan sebagai jenis Object

Untuk kembali ke penggunaan Methodclass di RMI: proxy memiliki marshal

informasi tentang metode dan argumen ke dalam requestmessage tersebut. Untuk metode

itu marsekal objek Metode kelas. Ini menempatkan argumen ke array Objek dan

kemudian Marsekal array. Dispatcher unmarshals yang Methodobject dan yang

argumen dalam array Objects dari requestmessage tersebut. Seperti biasa, objek remote

referensi dari target akan telah unmarshalled dan objek lokal yang sesuai

referensi yang diperoleh dari modul referensi terpencil. Dispatcher kemudian memanggil

invokemethod Methodobject ini, memasok target dan array nilai argumen.

Ketika metode ini telah dijalankan, petugas operator marsekal hasil atau

pengecualian dalam replymessage tersebut.

Gambar 5.21 Kelas mendukung Java RMI

RemoteServer

UnicastRemoteObject

<Class hamba>

activatable

RemoteObject

Jadi memberangkatkan adalah generik - yang, sama

operator dapat digunakan untuk semua kelas RemoteObject, dan tidak ada kerangka yang diperlukan.

Kelas Java mendukung RMI • Gambar 5.21 menunjukkan struktur warisan dari kelas

mendukung server Java RMI. Satu-satunya kelas programmer thatthe perlu diperhatikan adalah

UnicastRemoteObject, yang membutuhkan setiap kelas hamba sederhana untuk memperpanjang. Kelas

UnicastRemoteObjectextends kelas abstrak yang disebut RemoteServer, yang menyediakan

versi abstrak metode yang dibutuhkan oleh server remote. UnicastRemoteObjectwas

contoh pertama dari RemoteServer yang akan diberikan. Lain yang disebut Activatableis

tersedia untuk menyediakan benda activatable. alternatif lanjut mungkin menyediakan untuk

objek direplikasi. kelas RemoteServeris subclass dari RemoteObjectthat memiliki

variabel contoh memegang referensi objek remote dan menyediakan sebagai berikut

metode:

sama Metode ini membandingkan referensi objek remote.

toString: Metode ini memberikan isi dari referensi objek remote sebagai String.

readObject, writeObject: Metode ini deserialize / cerita bersambung objek remote.

Selain itu, instanceOfoperator yang dapat digunakan untuk menguji objek remote.

5.6 Ringkasan

Bab ini telah membahas tiga paradigma untuk didistribusikan pemrograman - request-reply

protokol, remote panggilan prosedur dan doa metode remote. Semua paradigma tersebut

menyediakan mekanisme untuk entitas independen terdistribusi (proses, objek,

komponen atau jasa) untuk berkomunikasi secara langsung dengan satu sama lain.

protokol request-reply memberikan dukungan ringan dan minimal untuk client-server

komputasi. protokol seperti sering digunakan dalam lingkungan di mana overhead

komunikasi harus diminimalkan -misalnya, dalam sistem embedded. mereka lebih

Peran umum adalah untuk mendukung baik RPC atau RMI, seperti dibahas di bawah.

Remote Pendekatan panggilan prosedur merupakan terobosan signifikan dalam didistribusikan

sistem, memberikan dukungan tingkat tinggi untuk programmer dengan memperluas konsep

prosedur panggilan untuk beroperasi dalam lingkungan jaringan. Ini memberikan tingkat penting

transparansi dalam sistem terdistribusi. Namun, karena kegagalan mereka berbeda dan

karakteristik kinerja dan kemungkinan akses bersamaan ke server, itu adalah

belum tentu ide yang baik untuk membuat panggilan prosedur remote tampak persis sama

panggilan lokal. prosedur panggilan jarak jauh menyediakan berbagai semantik doa, dari

maybeinvocations sampai di-paling-oncesemantics

model objek terdistribusi merupakan perpanjangan dari model objek lokal yang digunakan dalam

objek berbasis bahasa pemrograman. Encapsulatedobjects membentuk komponen yang berguna dalam

sistem terdistribusi, karena enkapsulasi membuat mereka sepenuhnya bertanggung jawab untuk mengelola

negara sendiri, dan doa lokal metode dapat diperpanjang untuk remote doa.

Setiap objek dalam sistem terdistribusi memiliki referensi objek remote (a global yang unik

identifier) ​​dan remote interface yang menentukan operasi yang dapat dipanggil

jarak jauh.

implementasi middleware dari RMI menyediakan komponen (termasuk proxy,

kerangka dan dispatcher) yang menyembunyikan rincian marshalling, lewat pesan dan

menemukan benda jauh dari client dan server programmer. Komponen-komponen ini dapat

dihasilkan oleh compiler antarmuka. Java RMI meluas doa lokal untuk jarak jauh

doa menggunakan sintaks yang sama, tapi remote interface harus ditentukan dengan memperpanjang

antarmuka yang disebut Remoteand membuat setiap metode melempar RemoteException a. Ini

memastikan bahwa programmer tahu kapan mereka membuat doa jarak jauh atau menerapkan

objek remote, memungkinkan mereka untuk menangani kesalahan atau merancang objek cocok untuk

akses bersamaan

LATIHAN

5.1 Menentukan kelas yang contoh mewakili permintaan dan membalas pesan seperti yang digambarkan di

Gambar 5.4. Kelas harus memberikan sepasang konstruktor, satu untuk pesan permintaan dan

yang lain untuk pesan balasan, menunjukkan bagaimana permintaan identifier ditugaskan. Itu harus

juga menyediakan sebuah metode untuk mengumpulkan dirinya menjadi array byte dan unmarshal array

dari byte ke sebuah contoh. halaman 188

5.2 Program masing-masing tiga operasi dari protokol request-reply pada Gambar 5.3, menggunakan

komunikasi UDP, tapi tanpa menambahkan tindakan anyfault-toleransi. Anda harus menggunakan

kelas Anda didefinisikan dalam bab sebelumnya untuk referensi objek remote (Latihan

4.13) dan di atas untuk permintaan dan membalas pesan (Latihan 5.1). halaman 187

5.3 Berikan garis besar implementasi server, menunjukkan bagaimana operasi getRequest

andsendReplyare digunakan oleh server yang menciptakan thread baru untuk mengeksekusi setiap klien

permintaan. Menunjukkan bagaimana server akan menyalin requestIdfrom pesan permintaan ke

balasan pesan dan bagaimana hal itu akan mendapatkan alamat IP klien dan port. halaman 187

5.4 Tentukan versi baru dari doOperationmethod yang menetapkan batas waktu pada menunggu

membalas pesan. Setelah timeout, itretransmits yang ntimes pesan permintaan. Jika masih ada

tidak ada jawaban, itu memberitahu pemanggil. halaman 188

5.5 Jelaskan skenario di mana klien dapat menerima balasan dari panggilan sebelumnya.

halaman 187

5.6 Jelaskan cara-cara di mana topeng request-reply protokol heterogenitas

sistem operasi dan jaringan komputer. halaman 187

5.7 Diskusikan apakah operasi berikut adalah idempoten:

i) menekan angkat (lift) tombol permintaan;
ii) menulis data ke file;
iii) menambahkan data ke file.

Apakah kondisi yang diperlukan untuk idempotence bahwa operasi itu tidak harus dikaitkan

dengan setiap negara? halaman 190

5.8 Jelaskan pilihan desain yang relevan dengan meminimalkan jumlah data yg diadakan

di server. Bandingkan persyaratan penyimpanan ketika RR dan RRA protokol yang digunakan.

halaman 191

5.9 Asumsikan protokol RRA digunakan. Berapa lama harus server mempertahankan diakui

balas data? Harus server berulang kali mengirim balasan dalam upaya untuk menerima

pengakuan? halaman 191

5.10 Mengapa jumlah pesan yang dipertukarkan dalam protokol menjadi lebih signifikan untuk

kinerja dari jumlah total data yang dikirim ? Desain varian dari protokol RRA

di mana pengakuan adalah piggy - didukung pada -yang adalah , ditransmisikan dalam yang sama

pesan sebagai -the permintaan berikutnya dimana tepat , dan sebaliknya dikirim sebagai terpisah

pesan. ( Petunjuk : gunakan timer ekstra dalam klien . ) Halaman 191

5.11 AnElectioninterface menyediakan dua metode remote:

suara: Metode ini memiliki dua parameter throughwhich klien memasok nama

dari calon (string) dan 'jumlah pemilih' (integer digunakan untuk memastikan setiap

orang pengguna sekali saja). nomor pemilih dialokasikan jarang dari jangkauan

bilangan bulat untuk membuat mereka sulit untuk menebak.

Hasil: Metode ini memiliki dua parameter melalui server memasok

klien dengan nama calon dan jumlah orang calon itu.

Manakah dari parameter kedua prosedur ini inputand yang adalah output

parameter? halaman 195

5.12 Diskusikan semantik doa yang dapat dicapai apabila permintaan-balasan protokol

diimplementasikan melalui TCP / IP, yang menjamin bahwa data yang disampaikan dalam

Agar dikirim, tanpa kehilangan atau duplikasi. Memperhitungkan semua kondisi yang menyebabkan

koneksi untuk dilanggar. Bagian 4.2.4 dan halaman 198

5.13 Tentukan interface ke Electionservice di CORBA IDL dan Java RMI. Catat itu

CORBA IDL menyediakan jenis Longfor bilangan bulat 32-bit. Bandingkan metode dalam dua

bahasa untuk menentukan inputand outputarguments. Gambar 5.8, Gambar 5.16

5.14 TheElectionservice harus memastikan bahwa suara dicatat setiap kali ada pengguna berpikir mereka

telah memberikan suara.

Diskusikan pengaruh semantik maybecall pada Electionservice.

Wouldat-setidaknya-sekali menyebut semantik dapat diterima untuk Electionservice atau akan Anda

semantik recommendat-paling-oncecall? halaman 199

5.15 Sebuah protokol request-reply diimplementasikan melalui layanan komunikasi dengan kelalaian

kegagalan untuk menyediakan di-setidaknya-onceinvocation semantik. Dalam kasus pertama implementor

mengasumsikan sistem terdistribusi asynchronous. Dalam kasus kedua implementor

mengasumsikan bahwa waktu maksimum untuk komunikasi dan pelaksanaan remote

Metode adalah T. Dalam cara apakah asumsi yang terakhir menyederhanakan pelaksanaan?

halaman 198

5.16 Garis sebuah implementasi untuk Electionservice yang memastikan bahwa catatan yang tetap konsisten ketika diakses secara bersamaan oleh beberapa klien. halaman 199

5.17 Asumsikan Electionservice diimplementasikan dalam RMI dan harus memastikan bahwa semua orang yang

tersimpan dengan aman bahkan ketika proses server crash. Jelaskan bagaimana hal ini dapat dicapai

dengan mengacu pada garis besar pelaksanaan dalam jawaban Anda untuk Latihan 5.16.

halaman 213-214

5.18 Tampilkan bagaimana menggunakan refleksi Java untuk membangun kelas klien proxy untuk Pemilu

antarmuka . Memberikan rincian pelaksanaan salah satu metode di kelas ini ,

yang harus memanggil metode doOperationwith tanda tangan berikut :

byte [ ] doOperation ( RemoteObjectRef o , Metode m , byte [ ] argumen ) ;

Petunjuk : variabel instance dari kelas proxy harus memegang referensi objek remote (lihat

Latihan 4.13 ) . Gambar 5.3 , halaman 224

5.19 Tampilkan bagaimana untuk menghasilkan kelas client proxy menggunakan bahasa seperti C ++ yang tidak

dukungan refleksi, misalnya dari definisi CORBA antarmuka diberikan dalam Anda

menjawab Latihan 5.13. Memberikan rincian pelaksanaan salah satu metode

di kelas ini, yang harus memanggil metode doOperationdefined pada Gambar 5.3.

halaman 211

5.20 Jelaskan bagaimana menggunakan refleksi Java untuk membangun sebuah operator generik. Memberikan kode Java untuk

dispatcher yang tanda tangan adalah:

public void pengiriman (target Object, Method aMethod, byte [] args)

Argumen menyediakan objek target, metode yang akan dipanggil dan argumen untuk

bahwa metode dalam array byte. halaman 224

5.21 Latihan 5.18 dibutuhkan klien untuk mengkonversi Objectarguments ke dalam array byte

sebelum memohon doOperationand Latihan 5.20 diperlukan operator untuk mengkonversi

array byte ke array Objects sebelum memanggil metode. Diskusikan

pelaksanaan versi baru dari doOperationwith tanda tangan berikut:

Object [] doOperation (RemoteObjectRef o, Metode m, Object [] argumen);

yang menggunakan ObjectOutputStreamand ObjectInputStreamclasses untuk streaming

meminta dan membalas pesan antara klien dan server melalui koneksi TCP. Bagaimana

akan perubahan ini mempengaruhi desain memberangkatkan? Bagian 4.3.2 dan halaman 224

5.22 Seorang klien membuat metode remote doa ke server. Klien membutuhkan waktu 5 milidetik

untuk menghitung argumen untuk setiap permintaan, dan server membutuhkan waktu 10 milidetik untuk

memproses setiap permintaan. Waktu pemrosesan sistem operasi lokal untuk setiap mengirim atau

menerima operasi 0,5 milidetik, dan waktu jaringan untuk mengirimkan setiap permintaan atau

balasan pesan adalah 3 milidetik. Menyusun atau unmarshalling mengambil 0,5 milidetik

per pesan.

Hitung waktu yang dibutuhkan oleh klien untuk menghasilkan dan kembali dari dua permintaan:

(I) jika single-threaded;

(Ii) jika memiliki dua benang yang dapat membuat permintaan secara bersamaan pada satu

prosesor.

Anda dapat mengabaikan kali konteks-switching. Apakah ada kebutuhan untuk doa asynchronous jika

proses client dan server yang berulir? halaman 213

5.23 Desain meja objek remote yang dapat mendukung didistribusikan pengumpulan sampah serta

menerjemahkan antara referensi objek lokal dan remote. Berikan contoh yang melibatkan

beberapa objek jauh dan proxy di berbagai situs untuk menggambarkan penggunaan meja. Menunjukkan

perubahan pada tabel ketika doa menyebabkan proxy baru yang akan dibuat. kemudian menunjukkan

perubahan dalam tabel ketika salah satu proxy menjadi tidak terjangkau. halaman 215

5.24 Sebuah versi sederhana dari algoritma pengumpulan sampah yang didistribusikan dijelaskan dalam Bagian

5.4.3 hanya memanggil AddRef di tempat di mana objek remote hidup setiap kali proxy adalah

dibuat dan removeRefwhenever proxy dihapus. Garis semua efek yang mungkin dari

komunikasi dan proses kegagalan pada algoritma. Menyarankan bagaimana untuk mengatasi masing-masing

efek ini, tetapi tanpa menggunakan sewa. halaman 215
Share:

0 komentar:

Post a Comment

Blog Archive