ARSITEKTUR
Sistem terdistribusi mengeluarkan bagian perangkat yang rumit yang komponennya sesuai resolusi
didistribusikan di beberapa mesin. Untuk mengatur kerumitannya, sangat penting sistem ini dikelola dengan
baik. Ada berbagai cara tentang melihat organisasi sistem terdistribusi, tetapi yang jelas membuat perbedaan
antara organisasi logis dari seluruh komponen perangkat lunak dan di sisi lain.
Organisasi sistem terdistribusi besar tentang komponen perangkat lunak yang membentuk sistem.
Arsitektur perangkat lunak memberi tahu kami bagaimana berbagai komponen perangkat lunak mengatur
dan bagaimana mereka harus memfasilitasi. Dalam bab ini, pertama-tama kita akan membahas beberapa
yang biasa diterapkan untuk sistem komputer.
Realisasi aktual dari sistem terdistribusi memerlukan kami membuat instance dan menempatkan
komponen perangkat lunak pada mesin nyata. Ada banyak pilihan berbeda yang dapat dilakukan untuk
dilakukan. Instansiasi akhir arsitektur perangkat lunak juga disebut sebagai arsitektur sistem. Dalam bab ini
kita akan melihat ke arsitektur tradisional terpusat di mana satu server menerapkan sebagian besar
perangkat lunak (dan dengan demikian fungsionalitas), sementara klien jarak jauh dapat menggunakan
server menggunakan sarana komunikasi sederhana. Selain itu, kami membahas arsitektur terdesentralisasi
di mana mesin lebih atau kurang memainkan peran yang sama, serta organisasi hibrida.
Seperti yang kami jelaskan di Bab. Saya, tujuan penting dari sistem terdistribusi adalah untuk
mengubah aplikasi dari platform yang mendasarinya dengan menyediakan lapisan middleware.
Mengadopsi lapisan seperti itu adalah keputusan arsitektur yang penting, dan tujuan yang diminta
untuk memberikan persetujuan distribusi. Namun, perpindahan harus dilakukan untuk mencapai
persetujuan, yang telah menyebabkan berbagai teknik untuk membuat middleware adaptif. Kami membahas
beberapa yang diterapkan pada bab ini, karena mereka mempengaruhi organisasi middleware itu sendiri.
Dapat dipilih dengan sistem terdistribusi juga dapat disetujui dengan meminta sistem untuk memilih
perilakunya sendiri dan mengambil tindakan yang tepat jika diperlukan. Wawasan ini telah mengarah pada
kelas yang sekarang disebut sebagai sistem otonom. Sistem terdistribusi ini sering mengatur dalam lingkaran
kontrol umpan balik. yang membentuk elemen arsitektur penting selama desain sistem. Dalam bab ini, kami
menyediakan bagian untuk sistem otonom terdistribusi.
A. Macam Arsitektur
Kami memulai diskusi kami tentang arsitektur dengan terlebih dahulu membahas organisasi
logis dari sistem terdistribusi ke dalam komponen perangkat lunak, juga disebut sebagai arsitektur
perangkat lunak (Bass et al., 2003). Penelitian tentang arsitektur perangkat lunak telah dirilis jauh
dan sekarang diterima umum atau disetujui arsitektur sangat penting untuk disetujui pengembangan
sistem besar.
Untuk diskusi kita, arti tentang gaya arsitektur adalah penting. Gaya seperti itu dirumuskan
dalam komponen hal, cara komponen terhubung satu sama lain, data dipertukarkan antara
komponen. dan akhirnya bagaimana elemen-elemen ini dikonfigurasikan bersama ke dalam suatu
sistem. Komponen adalah unit modular dengan antarmuka yang diperlukan dan disediakan dengan
baik yang dapat diganti dalam Lingkungannya (OMG, 2004b). Seperti yang akan kita bahas di bawah
ini, masalah penting tentang komponen untuk sistem terdistribusi adalah bahwa ia dapat diganti,
asalkan kita setuju antarmuka-nya. Konsep yang agak lebih sulit untuk diterjemahkan adalah
konektor, yang dipublikasikan sebagai transisi yang memediasi komunikasi, koordinasi, atau kerja
sama antar komponen (Mehta et al., 2000; dan Shaw and Clements, 1997). Sebagai contoh,
Menggunakan komponen dan konektor, kita dapat menemukan berbagai konfigurasi, yang,
pada persetujuan telah disetujui ke dalam gaya arsitektur. Beberapa gaya sekarang telah dilaporkan,
mana yang paling penting untuk sistem terdistribusi adalah:
1. Arsitektur berlapis
2. Arsitektur berbasis objek
3. Arsitektur yang berpusat pada data
4. Arsitektur berbasis acara
Ide dasar untuk gaya selesai: komponen disusun lengkap di mana komponen pada lapisan
L; diizinkan untuk diizinkan komponen di lapisan yang mendasari Li: «, tetapi tidak berlawanan,
seperti yang dibahas pada Gambar. 2-I (a). Model ini telah banyak diadopsi oleh komunitas jejaring;
Kami memeriksanya secara singkat di Bab. 4. Pengamatan utama adalah kontrol umum dari lapisan
atas: permintaan hingga hierarki.
Organisasi yang lebih jauh membahas tentang objek wisata berbasis arsitektur, yang
diilustrasikan pada Gambar 2-1 (b). Pada dasarnya, setiap objek sesuai dengan apa yang telah kita
definisikan sebagai komponen, dan komponen-komponen ini terhubung melalui hubungan
pemindahan prosedur (jarak jauh). Tidak mengherankan, arsitektur perangkat lunak ini cocok
dengan arsitektur sistem client-server yang kami jelaskan di atas. Arsitektur berlapis dan berbasis
objek masih membentuk gaya yang paling penting untuk sistem perangkat lunak besar (Bass et aI.,
2003).
Gambar 2-2. (a) Berbasis acara dan (b) berbagi-gaya arsitektur ruang-data
Arsitektur berbasis data dapat digabungkan dengan arsitektur berpusat data, menghasilkan
apa yang juga dikenal sebagai ruang data bersama. Inti dari ruang bersama-sama adalah proses
sekarang juga diselesaikan dalam waktu: mereka tidak perlu aktif dengan komunikasi yang terjadi.
Selain itu, banyak ruang data bersama menggunakan antarmuka seperti SQL ke repositori bersama
dalam arti data dapat diakses menggunakan deskripsi tentang referensi eksplisit, seperti berbagi
dengan file. Kami mengabdikan Chap. Arsitektur gaya ini.
Apa yang membuat arsitektur perangkat lunak ini penting untuk sistem terdistribusi adalah
semua yang mereka butuhkan untuk mencapai (pada tingkat yang masuk akal) distribusi distribusi.
Namun, seperti yang telah kami katakan, meminta distribusi, mendukung, meminta, menginstal, dan
sebagainya. Karena tidak ada solusi tunggal yang akan memenuhi persyaratan untuk aplikasi
terdistribusi yang memungkinkan, para peneliti telah memutuskan bagaimana sistem terdistribusi
tunggal dapat digunakan untuk meningkatkan 90% dari semua kasus yang mungkin.
B. Arsitektur Sistem
Sekarang kita telah membahas beberapa gaya arsitektur umum, mari kita melihat
bagaimana banyak sistem terdistribusi sebenarnya mengatur dengan mempertimbangkan di mana
komponen perangkat lunak ditempatkan. Memutuskan komponen perangkat lunak, interaksinya,
dan penempatannya menyebabkan 10 contoh arsitektur perangkat lunak, juga disebut arsitektur
sistem (Bass et aI., 2003). Kita akan membahas organisasi yang tersentralisasi dan
terdesentralisasi, serta berbagai bentuk hibrida.
a) Arsitektur Terpusat
Meskipun kurangnya konsensus tentang banyak masalah sistem terdistribusi, ada
satu masalah yang disetujui oleh banyak peneliti dan praktisi: berpikir dalam hal klien
yang meminta layanan dari server membantu kita memahami dan mengelola
kompleksitas sistem terdistribusi dan itu adalah hal yang baik.
Dalam model client-server dasar, proses dalam sistem terdistribusi dibagi menjadi
dua kelompok (mungkin tumpang tindih). Server adalah sebuah proses yang
mengimplementasikan layanan tertentu, misalnya, layanan sistem file atau layanan
basis data. Klien adalah proses yang meminta layanan dari server dengan
mengirimkannya permintaan dan kemudian menunggu balasan server. Interaksi klien-
server ini, juga dikenal sebagai perilaku balasan-pertanyaan ditunjukkan pada Gambar
2-3
Gambar 2-8. (a) Memetakan data barang ke simpul di CAN , (b) Memisahakan wilayah
kompilasi node bergabung
Gbr.2-8 (a) menggambarkan ruang dua dimensi [0, l] x [O, 1] dibagi di antara enam
simpul. Setiap node memiliki wilayah terkait. Setiap item data dalam BISA akan diberi titik
unik di ruang ini, setelah itu juga jelas menentukan mana yang bertanggung jawab atas
data tersebut (membahas item data yang berada di perbatasan beberapa wilayah, yang
digunakan aturan penetapan deterministik).
Membuat simpul P ingin bergabung dengan sistem CAN, ia mengambil titik arbitrer dari
ruang koordinat dan kemudian mencari simpul Q di wilayah mana titik itu jatuh. Pencarian
ini dilakukan melalui routing yang berbasis posisi. yang dibacanya ditangguhkan hingga
bab-bab selanjutnya. Node Q kemudian membagi wilayahnya menjadi dua bagian, seperti
yang dibahas pada Gambar 2-8 (b). dan satu setengah ditugaskan ke simpul P. Node
pelacakan tetangga mereka, yaitu, simpul yang bertanggung jawab untuk wilayah yang
ditentukan. Saat membagi suatu wilayah, lingkaran yang tergabung dengan P dapat dengan
mudah mengetahui siapa tetangga barunya dengan mempertanyakan P. Seperti pada
Chord, data barang yang menjadi tanggung jawab lingkaran P sekarang ditransfer dari
lingkar Q.
Meninggalkan sedikit masalah dalam CAN. Asumsikan itu pada Gambar 2-8. simpul
dengan koordinat (0,6, 0,7) daun. Wilayahnya akan menetapkan salah satu tetangganya,
katakanlah lingkaran di (0.9.0.9), tetapi jelas bahwa hanya kumpulannya dan mendapatkan
persegi panjang tidak dapat dilakukan. Dalam hal ini, ganti di (0.9.0.9) akan dengan mudah
menjelaskan wilayah itu dan memberi tahu tetangga tentang fakta ini. Jelas sekali. hal ini
dapat menyebabkan pembagian ruang koordinat yang kurang simetris, untuk alasan tentang
proses latar belakang dimulai untuk mempartisi ulang seluruh ruang.
Arsitektur Peer-to-Peer Tidak Terstruktur
Sistem peer-to-peer yang tidak terstruktur sebagian besar mengandalkan kerumitan
untuk membangun jaringan overlay. Gagasan peran adalah setiap simpul yang didukung
daftar tetangga, tetapi daftar ini dibangun dengan cara yang kurang acak. Demikian juga,
data barang diasumsikan ditempatkan secara acak pada simpul. Bantuan, kompilasi simpul
perlu menemukan data tertentu, satu-satunya hal yang dapat dilakukan efektif membanjiri
jaringan dengan permintaan pencarian (Risson and Moors, 2006). Kami akan kembali
mencari di jaringan hamparan tidak terstruktur di Bab. 5, dan untuk saat ini komposisi pada
manajemen keanggotaan.
Salah satu tujuan dari banyak sistem peer-to-peer yang tidak terstruktur membangun
overlay yang dirancang grafik acak. Model dasar adalah setiap simpul yang menyimpan
daftar tetangga c, di mana, idealnya, masing-masing tetangga mewakili node yang dipilih
secara acak dari set node saat ini. Daftar tetangga juga disebut sebagai tampilan sebagian.
Ada banyak cara untuk membangun seperti itu. Jelasity et al. (2004,2005a) telah
mengembangkan evaluasi kerja yang meningkatkan pengujian yang berbeda untuk
konstruksi overlay untuk memungkinkan evaluasi dan implementasi. Dalam pembahasan
kerja ini, diasumsikan bahwa simpul secara teratur bertukar entri dari pandangan parsial
mereka. Setiap entri menentukan titik yang ada di dalam jaringan, dan memiliki usia yang
sesuai yang diperhitungkan.
Utas aktif mengambil publikasi untuk berkomunikasi dengan putaran lain. Ini memilih
putaran itu dari tampilan parsial saat ini. Dengan menyetujui entri yang perlu diajukan ke
rekan yang dipilih, itu dibuat dengan membuat penyangga yang berisi entri c / 2 + I, termasuk
entri yang memfasilitasi sendiri. Entri diambil dari tampilan parsial saat ini.
W \ ne nocel ~ a \ ~ Mode OinpuU itu ~ l \\ ~ a \. \ 1m Q 'ieSp ~ il ~ e \ "' i ~ IDfue ~ e \
e '\: .. ~ \\ peer. Sebaya itu, sementara itu, juga akan membangun penyangga dengan cara
utas pasif yang sesuai dengan Gambar.2- 9 (b), yang kegiatannya sangat mirip dengan utas
aktif.
Poin krusial adalah pembangunan pandangan parsial baru. Pandangan ini, untuk
memulai dan juga untuk rekan yang dihubungi, akan berisi persis, c entri, yang sebagiannya
akan berasal dari buffer yang diterima. Intinya, ada dua cara untuk membangun pandangan
baru. Pertama, kedua node dapat memutuskan untuk membuang entri yang telah mereka
kirim ke toeach lainnya. Secara efektif, ini berarti bahwa mereka akan bertukar sebagian
dari pandangan asli mereka. Pendekatan kedua adalah membuang sebanyak mungkin entri
lama. Secara umum, ternyata kedua pendekatan tersebut saling melengkapi [lihat Jelasity
et al. (2005a) untuk detailnya]. Ternyata banyak protokol manajemen keanggotaan untuk
overlay yang tidak terstruktur cocok dengan kerangka kerja ini. Ada sejumlah pengamatan
menarik untuk dilakukan.
Pertama, mari kita asumsikan bahwa ketika sebuah simpul ingin bergabung, kontaklah
dengan simpul lain yang arbitrer, mungkin dari daftar titik akses yang terkenal. Jalur akses
ini hanyalah anggota reguler overlay, kecuali bahwa kami dapat menganggapnya sebagai
sangat Tindakan oleh utas aktif (berulang secara berkala):
Gambar 2-10. Pendekatan dua lapis untuk membangun dan memelihara topologi overlay
spesifik menggunakan teknik dari sistem peer-to-peer yang tidak terstruktur.
Dalam banyak kasus, relasi klien-superpeer diperbaiki: setiap kali rekan biasa
bergabung dengan jaringan, itu melampirkan ke salah satu superpeers dan tetap melekat
sampai meninggalkan jaringan. Jelas, diharapkan superper adalah proses berumur panjang
dengan ketersediaan tinggi. Untuk mengimbangi kemungkinan perilaku tidak stabil dari
superpeer, skema cadangan dapat digunakan, seperti memasangkan setiap superpeer
dengan yang lain dan mengharuskan klien untuk melampirkan keduanya.
Memiliki hubungan tetap dengan superpeer mungkin tidak selalu menjadi solusi terbaik.
Misalnya, di dalam jaringan berbagi offile, mungkin lebih baik untuk melampirkan ke
superpeer yang menyimpan indeks file yang biasanya diminati oleh klien. Jika ada
kesempatan yang lebih besar bahwa ketika klien mencari file tertentu, superpeer-nya akan
tahu di mana menemukannya. Garbacki et al. (2005) menggambarkan skema yang relatif
sederhana di mana hubungan klien-superpeer dapat berubah ketika klien menemukan
superpeers yang lebih baik untuk bergaul. Secara khusus, superpeer yang mengembalikan
hasil operasi pencarian diberikan preferensi daripada superpeer lainnya.,
Seperti yang telah kita lihat, jaringan peer-to-peer menawarkan cara yang fleksibel bagi
node untuk bergabung dan meninggalkan jaringan. Namun, dengan jaringan superpeer
masalah baru diperkenalkan, yaitu bagaimana memilih node yang memenuhi syarat untuk
menjadi superpeer. Masalah ini terkait erat dengan masalah pemilihan pemimpin, yang kita
diskusikan di Chap. 6, ketika kita kembali untuk memilih superpeers di jaringan apeer-to-
peer.
c) Arsitektur Hibrida
Sejauh ini, kami telah fokus pada arsitektur client-server dan sejumlah arsitektur
peer-peer. Banyak sistem terdistribusi menggabungkan fitur arsitektur, seperti yang
telah kita temui di jaringan superpeer. Pada bagian ini kita akan melihat beberapa kelas
spesifik dari sistem terdistribusi di mana solusi client-server dikombinasikan dengan
arsitektur terdesentralisasi.
Sistem Edge-Server
Kelas penting dari sistem terdistribusi yang diatur menurut arsitektur hybrid dibentuk
oleh sistem server-tepi. Sistem ini digunakan di Internet di mana server ditempatkan "di
ujung" jaringan. Tepi ini dibentuk oleh batas antara jaringan perusahaan dan Internet yang
sebenarnya, misalnya, sebagaimana disediakan oleh Penyedia Layanan Internet (ISP).
Demikian juga, di mana pengguna akhir di rumah terhubung ke Internet melalui ISP mereka,
ISP dapat dianggap berada di ujung Internet. Ini mengarah ke organisasi umum yang
ditunjukkan pada Gambar. 2-13.
Gambar 2-13. Melihat Internet sebagai terdiri dari kumpulan server tepi.
Pengguna akhir, atau klien pada umumnya, terhubung ke Internet melalui server
tepi. Tujuan utama server tepi adalah untuk menyajikan konten, mungkin setelah
menerapkan fungsi filter dan transcoding. Lebih menarik adalah fakta bahwa kumpulan
server tepi dapat digunakan untuk mengoptimalkan konten dan distribusi aplikasi. Model
dasar adalah bahwa untuk organisasi tertentu, server satu tepi bertindak sebagai server asal
dari mana semua konten berasal. Server itu dapat menggunakan server tepi lain untuk
mereplikasi halaman Web dan semacamnya (Leff et aI., 2004: Nayate et aI., 2004; dan
Rabinovich and Spatscheck, 2002). Kami akan kembali ke sistem edge-server di Bab. 12
ketika kita membahas solusi berbasis web.
Sistem Terdistribusi Kolaboratif
Struktur hybrid Terutama digunakan dalam sistem terdistribusi kolaboratif. Masalah
utama dalam banyak sistem ini untuk kali pertama memulai, yang sering kali menggunakan
klien-server tradisional. Setelah bergabung dengan sistem, ia dapat menggunakan yang
sepenuhnya terdesentralisasi untuk kolaborasi.
Untuk membuat hal-hal yang konkret, mari kita pertimbangkan sistem file-sharing
BitTorrent (Cohen, 2003). BitTorrent adalah sistem pengunduhan file apeer-to-peer. Kerja
utamanya ditunjukkan pada Gambar. 2-14 Gagasan dasarnya adalah bahwa ketika
pengguna akhir mencari file, ia mengunduh potongan file dari pengguna lain sampai
potongan yang diunduh dapat dikumpulkan bersama-sama menghasilkan file lengkap.
Tujuan desain yang penting adalah untuk memastikan kolaborasi. Dalam sebagian besar
sistem file-sharing, sebagian besar peserta hanya mengunduh file tetapi berkontribusi
hampir tidak ada (Adar dan Huberman, 2000; Saroiu et al., 2003; dan Yang et al., 2005).
Untuk tujuan ini, file hanya dapat diunduh ketika klien mengunduh menyediakan konten
kepada orang lain. Kami akan segera kembali ke perilaku "gayung bersambut" ini.
Gambar 2-14. Kerja utama BitTorrent [diadaptasi dengan izin dari Pouwelse et al.
(2004)].
Untuk mengunduh ame, pengguna perlu mengakses direktori global, yang
merupakan salah satu dari beberapa situs Web terkenal. Direktori semacam itu berisi
referensi ke apa yang disebut file .torrent. File .torrent berisi informasi yang diperlukan untuk
mengunduh file tertentu. Secara khusus, ini mengacu pada apa yang dikenal sebagai
pelacak, yang merupakan server yang menjaga akun akurat dari node aktif yang memiliki
(potongan) dari file yang diminta. Nodeone aktif yang sedang mengunduh file lain. Jelas,
akan ada banyak pelacak yang berbeda, meskipun (umumnya hanya akan ada satu pelacak
per file (atau koleksi file).
Setelah node telah diidentifikasi dari mana chunks dapat diunduh, node
pengunduhan secara efektif menjadi aktif. Pada titik itu, ia akan dipaksa untuk membantu
orang lain, misalnya dengan memberikan potongan file yang sedang diunduh yang belum
dimiliki orang lain. Penegakan ini berasal dari aturan sederhana: jika kode, perhatikan
bahwa node Q mengunduh lebih banyak daripada mengunggah, P dapat memutuskan untuk
mengurangi laju pengiriman data keQ. Skema ini berfungsi dengan baik asalkan P memiliki
sesuatu untuk diunduh dari Q. Untuk alasan ini, node sering diberikan dengan referensi ke
banyak node lain yang menempatkan mereka pada posisi yang lebih baik untuk
memperdagangkan data.
Jelas, BitTorrent menggabungkan solusi terpusat dengan desentralisasi. Ternyata,
hambatan dari sistem ini, tidak mengherankan, dibentuk oleh pelacak. Sebagai contoh lain,
pertimbangkan jaringan distribusi konten kolaboratif Globule (Pierre dan van Steen, 2006).
Globule sangat menyerupai arsitektur edgeerver yang disebutkan di atas. Dalam hal ini, alih-
alih server tepi, pengguna akhir (tetapi juga organisasi) secara sukarela menyediakan server
Web yang disempurnakan yang mampu berkolaborasi dalam replikasi halaman Web. Dalam
bentuknya yang paling sederhana, setiap server memiliki komponen berikut:
1. Komponen yang dapat mengarahkan permintaan klient ke server lain.
2. Komponen untuk menganalisis pola akses.
3. Komponen untuk mengelola aplikasi halaman Web.
Server yang disediakan oleh Alice adalah server Web yang biasanya menangani
lalu lintas untuk situs Web Alice dan disebut server asal untuk situs itu. Ini berkolaborasi
dengan server lain, misalnya, yang disediakan oleh Bob, untuk meng-host halaman dari
situs Bob. Dalam hal ini, Globule adalah sistem terdistribusi yang terdesentralisasi.
Permintaan untuk situs Web Alice awalnya diteruskan ke servernya, pada titik mana mereka
dapat dialihkan ke salah satu server lain. Pengalihan terdistribusi juga didukung.
Namun, Globule juga memiliki komponen yang terpusat dalam bentuk brokernya.
Pialang bertanggung jawab untuk mendaftarkan server, dan membuat server ini diketahui
orang lain. Server berkomunikasi dengan broker sepenuhnya analog dengan apa yang
diharapkan dalam sistem client-server. Untuk alasan ketersediaan, broker dapat direplikasi,
tetapi seperti yang akan kita bahas nanti dalam buku ini, tipe replikasi ini diterapkan secara
luas untuk mencapai komputasi client-server yang andal.
Gambar 2-15. Menggunakan pencegat untuk menangani doa objek jarak jauh.
Setelah langkah pertama, panggilan B.do_something (value) ditransformasikan
menjadi panggilan umum seperti invoke (B, & do_something, value) dengan referensi
ke metode B dan parameter yang sesuai dengan panggilan. Sekarang bayangkan objek
B direplikasi. Dalam hal ini, setiap replika harus benar-benar dipanggil. Ini adalah titik
yang jelas di mana intersepsi dapat membantu. Apa yang akan dilakukan interseptor
tingkat-permintaan hanya memanggil invoke (B, & do_something, nilai) untuk masing-
masing replika. Keindahan dari ini adalah bahwa objek A tidak perlu mewaspadai
replikasi B, tetapi juga objek middleware tidak perlu memiliki komponen khusus yang
berhubungan dengan panggilan yang direplikasi ini. Hanya pencegat tingkat
permintaan, yang dapat ditambahkan ke middleware yang perlu tahu tentang replikasi
B.
Pada akhirnya, panggilan ke objek jarak jauh harus dikirim melalui jaringan. Dalam
praktiknya, ini berarti bahwa antarmuka pengiriman pesan seperti yang ditawarkan oleh
sistem operasi lokal perlu dipanggil. Pada tingkat itu, pencegat tingkat pesan dapat
membantu mentransfer permohonan ke objek target. Sebagai contoh, bayangkan
bahwa nilai parameter sebenarnya sesuai dengan sejumlah besar data. Dalam hal ini,
mungkin bijaksana untuk memecah-mecah data menjadi bagian-bagian yang lebih kecil
untuk dirakit kembali tempat tujuan. Fragmentasi semacam itu dapat meningkatkan
kinerja atau keandalan. Sekali lagi, middleware tidak perlu menyadari fragmentasi ini;
pencegat tingkat rendah akan secara transparan menangani sisa komunikasi dengan
sistem operasi lokal.
Pendekatan Umum untuk Perangkat Lunak Adaptif
Apa yang sebenarnya ditawarkan pencegat adalah sarana untuk mengadaptasi
perangkat lunak mereka. Kebutuhan akan adaptasi datang dari kenyataan bahwa
lingkungan di mana aplikasi terdistribusi dieksekusi berubah secara terus menerus.
Perubahan termasuk yang dihasilkan dari mobilitas, variasi yang kuat dalam kualitas
layanan jaringan, perangkat keras yang gagal, dan drainase baterai, antara lain. Alih-alih
membuat aplikasi bertanggung jawab untuk bereaksi terhadap perubahan, tugas ini
ditempatkan di perangkat lunak.
Pengaruh kuat dari lingkungan ini telah membawa banyak perancang middleware
untuk mempertimbangkan pembangunan perangkat lunak adaptif. Namun, perangkat lunak
adaptif belum sesukses yang diperkirakan. Karena banyak peneliti dan pengembang
menganggapnya sebagai aspek penting dari sistem terdistribusi modern, mari kita
perhatikan sejenak. McKinley et al. (2004) membedakan tiga teknik dasar untuk adaptasi
perangkat lunak:
1. Pemisahan masalah
2. Refleksi komputasi
3. Desain berbasis komponen
Memisahkan kekhawatiran berkaitan dengan cara tradisional sistem modularisasi:
pisahkan bagian-bagian yang mengimplementasikan fungsionalitas dari hal-hal yang
mengurus hal-hal lain (dikenal sebagai fungsi ekstra) seperti keandalan, kinerja, keamanan,
dll. Orang dapat berpendapat bahwa mengembangkan middleware untuk aplikasi
terdistribusi sebagian besar tentang penanganan fungsionalitas ekstra yang independen
dari aplikasi. Masalah utamanya adalah kita tidak dapat dengan mudah memisahkan
fungsionalitas ekstra ini dengan cara modularisasi. Sebagai contoh, hanya menempatkan
keamanan ke dalam modul terpisah tidak akan berhasil. Demikian juga, sulit untuk
membayangkan bagaimana toleransi kesalahan dapat diisolasi ke dalam kotak terpisah dan
dijual sebagai layanan independen. Memisahkan dan kemudian menenun keprihatinan
lintas sektor ini ke dalam sistem (didistribusikan) adalah tema utama yang ditangani oleh
pengembangan perangkat lunak berorientasi aspek (Filman et al., 2005). Namun, orientasi
aspek belum berhasil diterapkan untuk mengembangkan sistem terdistribusi skala besar,
dan dapat diharapkan bahwa masih ada jalan panjang untuk mencapai sebelum mencapai
tahap itu.
Refleksi komputasi mengacu pada kemampuan suatu program untuk memeriksa
dirinya sendiri dan, jika perlu, menyesuaikan perilakunya (Kon et al., 2002). Refleksi telah
dibangun ke dalam bahasa pemrograman, termasuk Java, dan menawarkan fasilitas yang
kuat untuk modifikasi runtime. Selain itu, beberapa sistem middleware menyediakan sarana
untuk menerapkan teknik reflektif. Namun, seperti halnya dalam hal orientasi aspek,
middleware reflektif belum membuktikan dirinya sebagai alat yang kuat untuk mengelola
kompleksitas sistem terdistribusi skala besar. Disebutkan oleh Blair et al. (2004),
menerapkan refleksi ke domain aplikasi yang luas harus dilakukan.
Akhirnya, desain berbasis komponen mendukung adaptasi melalui komposisi.
Suatu sistem dapat dikonfigurasi secara statis pada waktu desain, atau secara dinamis saat
runtime. Yang terakhir membutuhkan dukungan untuk pengikatan lambat, suatu teknik yang
telah berhasil diterapkan dalam lingkungan bahasa pemrograman, tetapi juga untuk sistem
operasi di mana modul dapat dimuat dan dibongkar sesuka hati. Penelitian saat ini sedang
berjalan dengan baik untuk memungkinkan pemilihan secara otomatis implementasi terbaik
dari suatu komponen selama runtime (Yellin, 2003), tetapi sekali lagi, prosesnya tetap
kompleks untuk sistem terdistribusi, terutama ketika mempertimbangkan bahwa
penggantian satu komponen perlu diketahui apa efeknya. penggantian komponen lain akan.
Dalam banyak kasus, komponen kurang independen seperti yang diperkirakan.
Diskusi
Arsitektur perangkat lunak untuk sistem terdistribusi, terutama ditemukan sebagai
middleware, berukuran besar dan kompleks. Sebagian besar, kekakuan dan kompleksitas
ini muncul dari kebutuhan untuk bersikap umum dalam arti bahwa transparansi distribusi
perlu disediakan. Pada saat yang sama aplikasi memiliki persyaratan fungsional ekstra
spesifik yang bertentangan dengan tujuan untuk mencapai transparansi ini sepenuhnya.
Persyaratan yang saling bertentangan ini untuk generalisasi dan spesialisasi telah
menghasilkan solusi middleware yang sangat fleksibel. Namun, harga yang harus dibayar
adalah kompleksitas. Sebagai contoh, Zhang dan Jacobsen (2004) melaporkan peningkatan
50% dalam ukuran produk perangkat lunak tertentu hanya dalam empat tahun sejak
diperkenalkan, sedangkan jumlah total file untuk produk itu telah tiga kali lipat selama
periode yang sama. Jelas, ini bukan arahan yang mendorong.
Mempertimbangkan bahwa hampir semua sistem perangkat lunak besar saat ini
diperlukan untuk dieksekusi dalam lingkungan jaringan, kita dapat bertanya pada diri sendiri
apakah kompleksitas sistem terdistribusi hanyalah fitur yang melekat dalam upaya membuat
distribusi transparan. Tentu saja, masalah-masalah seperti keterbukaan sama pentingnya,
tetapi kebutuhan akan fleksibilitas tidak pernah begitu lazim seperti dalam kasus
middleware. Coyler et al. (2003) berpendapat bahwa yang dibutuhkan adalah fokus yang
lebih kuat pada kesederhanaan (eksternal), cara yang lebih sederhana untuk membangun
middleware oleh komponen, dan independensi aplikasi. Apakah ada teknik yang disebutkan
di atas yang membentuk solusinya dapat diperdebatkan. Secara khusus, tidak ada teknik
yang diusulkan sejauh ini telah menemukan adopsi besar-besaran, atau mereka tidak
berhasil menerapkan sistem skala besar.
Asumsi yang mendasarinya adalah bahwa kita memerlukan perangkat lunak adaptif
dalam arti bahwa perangkat lunak tersebut harus dibiarkan berubah ketika lingkungan
berubah. Namun, orang harus mempertanyakan apakah beradaptasi dengan lingkungan
yang berubah adalah alasan yang bagus untuk mengadopsi perubahan perangkat lunak.
Perangkat keras yang rusak, serangan keamanan, drainase energi, dan sebagainya, semua
tampaknya merupakan pengaruh lingkungan yang dapat (dan harus) diantisipasi oleh
perangkat lunak.
Argumen terkuat, dan tentu saja paling valid, untuk mendukung perangkat lunak
adaptif adalah bahwa banyak sistem terdistribusi tidak dapat dimatikan. Kendala ini
membutuhkan solusi untuk mengganti dan meningkatkan komponen dengan cepat, tetapi
tidak jelas apakah salah satu solusi yang diusulkan di atas adalah yang terbaik untuk
mengatasi masalah perawatan ini. Apa yang tersisa adalah bahwa sistem terdistribusi harus
dapat bereaksi terhadap perubahan di lingkungan mereka dengan, misalnya, mengubah
kebijakan untuk mengalokasikan sumber daya. Semua komponen perangkat lunak untuk
mengaktifkan adaptasi semacam itu sudah akan tersedia. Algoritme yang terkandung dalam
komponen ini dan yang menentukan perilaku yang mengubah pengaturannya.
Tantangannya adalah membiarkan perilaku reaktif seperti itu terjadi tanpa campur tangan
manusia. Pendekatan ini terlihat lebih baik ketika membahas organisasi fisik sistem
terdistribusi ketika keputusan diambil tentang di mana komponen ditempatkan, misalnya.
Kami membahas masalah arsitektur sistem tersebut selanjutnya.
D. Manajemen Diri Dalam Sistem Terdistribusi
Sistem terdistribusi - dan terutama middleware terkait - perlu memberikan solusi umum
untuk melindungi fitur yang tidak diinginkan yang melekat pada jaringan sehingga mereka dapat
mendukung sebanyak mungkin aplikasi. Di sisi lain, transparansi distribusi penuh bukanlah yang
diinginkan sebagian besar aplikasi, menghasilkan solusi spesifik aplikasi yang perlu didukung juga.
Kami berpendapat bahwa, untuk alasan ini, sistem terdistribusi harus adaptif, tetapi terutama ketika
datang untuk menyesuaikan perilaku eksekusi mereka dan bukan komponen perangkat lunak yang
mereka buat. Ketika adaptasi perlu dilakukan secara otomatis, kami melihat interaksi yang kuat
antara arsitektur sistem dan arsitektur perangkat lunak. Di satu sisi, kita perlu mengatur komponen
sistem terdistribusi sehingga pemantauan dan penyesuaian dapat dilakukan, sementara di sisi lain
kita perlu memutuskan di mana proses yang akan dijalankan yang menangani adaptasi.
Pada bagian ini kami memberikan perhatian eksplisit untuk mengatur sistem terdistribusi
sebagai sistem kontrol umpan balik tingkat tinggi yang memungkinkan adaptasi otomatis terhadap
perubahan. Fenomena ini juga dikenal sebagai komputasi otonom (Kephart, 2003) atau sistem
self..star (Babaoglu et al., 2005). Nama yang terakhir menunjukkan berbagai variasi yang dengannya
adaptasi otomatis ditangkap: pengelolaan diri, penyembuhan diri, konfigurasi diri, optimalisasi diri,
dan sebagainya. Kami hanya menggunakan nama sistem manajemen mandiri dari banyak varian
mereka.
Model Kontrol Umpan Balik
Ada banyak pandangan berbeda tentang sistem pengelolaan diri, tetapi apa yang
paling umum miliki (baik secara eksplisit maupun implisit) adalah asumsi bahwa adaptasi
terjadi melalui satu atau lebih loop kontrol umpan balik. Dengan demikian, sistem yang
diorganisasikan melalui loop semacam itu disebut sebagai sistem umpan balik COl. Kontrol
umpan balik telah sejak lama diterapkan di berbagai bidang teknik, dan fondasi yang
sistematis secara bertahap juga menemukan jalan mereka dalam sistem komputasi
(Hellerstein et al., 2004; dan Diao et al., 2005). Untuk sistem yang dikelola sendiri, masalah
arsitektur pada awalnya adalah yang paling menarik. Ide dasar di balik organisasi ini cukup
sederhana, seperti yang ditunjukkan pada Gambar 2-16.