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
0 komentar:
Post a Comment