Beberapa hal menjadi tren dalam Industri Komputasi diantaranya adalah distribusi, penekanan biaya, dan volume peningkatan produk yang tinggi. Disamping itu, pengembangan perangkat lunak juga membawa dampak positif terhadap perkembangan suatu organisasi, yang mana aktifitasnya menjadi lebih tersentralisasi. Hadirnya Multiprocessing dan Multicomputing telah membawa peningkatan derastis terhadap performa Sistem Komputasi. Makalah ini mengulas tentang isu-isu, tantangan, masalah, market dan solusi Perangkat Lunak Sistem Terdistribusi.

img by: aa4cc.dce.fel.cvut.cz
1. Pengenalan
Teknologi internet dan jaringan perangkat lunak sistem terdistribusi menjadi populer dan sangat penting terutama bagi kalangan industri, mereka memberikan perhatian lebih terhadap kedua hal itu. Isu yang menjadi topik utama perbincangan mereka adalah Kendala dan Batasan Distributed Software System (DSS). Solusi yang ingin mereka capai adalah menghilangkan atau paling tidak meminimalkan batasan dan kendala DSS. Penggiat Software Engineering sendiri mengakui bahwa mengembangkan DSS merupakan aktifitas paling menantang, yang mana sulit dirancang dan diprogram, karena banyaknya proses yang berjalan secara paralel atau bisa juga masalah timbul dari proses update variabel secara independen, belum lagi bahasa pemrograman umum yang tidak bisa mengakomodir masalah-masalah unik DSS.
Distributed system [Figure 1] dapat dikategorikan sebagai:
- Hanya Hardware dan Software yang didistribusikan.
- Hanya User yang didistribusikan.
- Keduanya (Hardware, Software dan User) yang didistribusikan.
Ada beberapa definisi tentang apa itu Sistem Terdistribusi:
- Adalah komponen hardware atau software yang berada di ruang lingkup jaringan komunikasi dan saling mengkoordinasikan tindakan mereka hanya melalui pesan [by:Coulouris].
- Adalah kumpulan independen komputer yang ditampilkan kepada pengguna sistem layaknya komputer tunggal [by: Tanenbaum].
Beberapa contoh sistem terdistribusi yang terdapat di world wide web adalah resource sharing, cluster, jaringan workstation, distributed manufacturing system (seperti automated assembly line), jaringan komputer suatu instansi, sistem informasi untuk menangani proses pemesanan otomatis (seperti kebanyakan marketplace, tiket online, dll.), dan jaringan embedded systems.

Figure 1. Types of Distributed System
2. Pekerjaan Terkait
Banyak penulis mengidentifikasi berbagai masalah sistem terdistribusi.
- Sudipto Ghosh dan Aditya P. Mathur[1], menjelaskan isu pada Komponen Penguji berbasis sistem terdistribusi terkait konkurensi, skalabilitas, platform heterogen dan protokol komunikasi.
- Nessett[2], fokus pada sistem terdistribusi secara masal seperti Desain dan Tantangan.
- Ahmed Khoumsi[3], fokus pada pendekatan temporal untuk menguji sistem terdistribusi.
- Hiroshi Tamura, Futoshi Tasaki, Masakazu Sengoku & Shoji Shinoda[4], fokus masalah penjadwalan kelas sistem terdistribusi paralel.
- Eric Koskinen & Maurice Herlihy[5], fokus pada Deadlock, terutama Efisiensi Deteksi Deadlock.
- Ajay Kshemkalyani & Mukesh Singhal[6], fokus mendeskripsikan tentang Komputasi Terdistribusi, terutama dalam hal Prinsip, Algoritma, dan Sistem.
- S. Kartik & C. Siva Ram Murthy[7], fokus dalam hal peningkatan Algoritma Pengalokasian-Tugas untuk memaksimalkan kehandalan Redundansi Sistem Komputasi Terdistribusi.
- Veljko m. milutinovic, jakov j. crnkovic, & catherine e. houstis[8], fokus mempelajari Simulasi Prosedur Dua Alokasi-Tugas Terdistribusi.
- Ian Sommerville[9], fokus mendeskripsikan tentang Rekayasa Perangkat Lunak Terdistribusi.
- Issa Traoreand Isaac Woungang[10], fokus pada Pemodelan Kinerja Perangkat Lunak Terdistribusi berbasis UML.
- Masoud Mansouri-Samani & Morris Sloman[11], mempresentasikan Pemantauan Sistem Terdistribusi.
3. Isu Perangkat Lunak Sistem Terdistribusi
Skalabilitas: Scaling adalah salah satu masalah utama Sistem Terdistribusi. Scaling terdiri dari Dimensi seperti kapasitas komunikasi. Sistem Harus dirancang sedemikian rupa sehingga kapasitasnya dapat ditingkatkan seiring meningkatnya permintaan sistem.
Heterogenitas (keberagaman): terkait pentingnya desain sistem terdistribusi. Infrastrukur komunikasi terdiri atas saluran kapasitas yang berbeda. End-Systems akan memiliki banyak keragaman teknik presentasi.
Objects representation & translation: pemilihan model pemrograman terbaik untuk object terdistribusi seperti CORBA, Java, dll.
Manajemen Sumber Daya: dalam sistem terdistribusi, object terdiri atas sumber daya yang lokasinya berbeda. Routing merupakan isu yang ada di network layer sistem terdistribusi dan pada layer aplikasi. Manajemen sumber Daya adalah sistem terdistribusi yang akan berinteraksi dengan keberagaman alam.
Keamanan dan Privasi: menjadi penting sejak sistem terdistribusi menangani informasi dan data sensitif, sehingga sistem harus memiliki keamanan yang kuat. Perlindungan terhadap aset sistem terdistribusi, termasuk sumber daya, penyimpanan, komunikasi, dan antarmuka-pengguna I/O.
Transparansi: yang berarti "sejauh mana sistem terdistribusi seharusnya muncul ke pengguna sebagai sistem tunggal?" Sistem terdistribusi harus dirancang untuk menyembunyikan kompleksitas sistem sampai batas yang lebih tinggi.
Keterbukaan: yang berarti "sampai sejauh mana sistem dirancang menggunakan standar protokol untuk mendukung Interoperabilitas?", hal itu adalah yang diharapkan oleh para pengembang agar mereka dapat menambahkan fitur atau mengganti subsistem di masa yang akan datang.
Kualitas Layanan: yang berarti "sejauh mana kualitas layanan diberikan kepada pengguna sistem dan tingakat kualitas yang seperti apa yang perlu diberikan kepada pengguna sistem?" Tingkat kualitas sangat bergantung pada pengalokasian prosesor, sumber daya, perangkat keras, dan kemampuan beradaptasi, jaringan, dll. Intinya adalah Performa, Ketersediaan dan Kehandalan sebagai cerminan ukuran kualitas.
Kegagalan manajemen: tentang bagaimana kesalahan sistem dapat dideteksi dan diperbaiki.
Sinkronisasi: adalah salah satu masalah penting yang perlu diperhatikan oleh para engineer sistem terdistribusi, komputasi tersinkronisasi adalah cara menghadapi ribuan komponen. Metode yang digunakan seperti semaphores, monitors, barriers, remote procedure call, object method invocation, dan message passing.
Identifikasi Sumber Daya: tentang sumber daya yang didistribusikan ke varian komputer dan skema penamaan yang tepat dimaksudkan agar sumber daya tersebut dapat direferensikan dengan tepat juga.
Komunikasi: sistem terdistribusi menjadi lebih efektif dengan hadirnya internet, tentu tidak sembarang internet, ada persyaratan khusus untuk menunjang kinerja dan kehandalan.
Arsitektur Perangkat Lunak: mencerminkan distribusi fungsionalitas aplikasi melalui logical component dan seluruh processor. Perlu memilih arsitektur yang tepat untuk menunjang kualitas layanan yang lebih baik.
Analisis Kinerja: diharapkan DSS memiliki kecepatan tinggi, toleransi kesalahan dan biaya yang efektif. Hal ini sebagai bahan evaluasi untuk mencapai mutu pelayanan yang lebih baik di masa depan, serta mengurangi resiko dan biaya.
Generating Test Data: ada kemungkinan beberapa path meningkat secara signifikan, maka uji kasus ini harus mencakup sampai ke tingkat paling rendah.
Pemilihan Komponen untuk Pengujian: Pengujian Komponen Terdistribusi memerlukan komponen lainnya, bila hal ini berjalan bersama, maka ada kemungkinan deadlock dan kondisi balapan. Jika hanya satu client yang beroperasi maka boleh jadi tidak ada kesalahan terdeteksi, karena hanya satu thread yang dijalankan, tapi jika kasusnya adalah multithreading dari banyak client, maka potensi terjadinya kesalahan sangat besar.
Test Sequence: Komponen harus diuji bersama dengan komponen lain. Maka urutan mana yang harus diikuti? Jika komponen tidak mengikuti model arsitektur berlapis (layered architectural model).
Pengujian untuk Skalabilitas dan Kinerja Sistem: Skalabilitas berdasarkan kriteria pengujian konvensional, maka data adalah isu utamanya. Konsep threading dapat diterapkan pada komponen untuk meningkatkan kinerja saat pengujian. Tapi menggunakan multithreading merupakan tantangan tersendiri.
Redundant Testing (pengujian berlebihan) selama integrasi komponen: komponen pertama diuji secara terpisah. Jika keseluruhan sistem diuji, maka banyak pengujian ulang terhadap komponen.
Ketersediaan Kode Sumber: komponen perangkat lunak bisa saja dikembangkan di house atau off-the-shelf. Ketergantungan terhadap ketersediaan kode sumber membawa berbagai macam teknik pengujian sistem.
Keragaman Bahasa, Platform dan Arsitektur: Menggunakan bahasa pemrograman yang berbeda untuk menulis komponen sistem, itu bisa saja dilakukan. Komponen sistem bisa saja menggunakan platform perangkat keras dan perangkat lunak berbeda.
Mekanisme Kontrol dan Monitoring Pada Pengujian Perangkat Lunak Terdistribusi: sistem perangkat lunak terdistribusi melibatkan banyak komputer dalam jaringan. Layanan Monitoring Sistem Terdistribusi juga penting untuk menunjang debugging selama masih dalam pengembangan sistem dan juga sebagai bagian dari kebutuhan aplikasi itu sendiri layaknya proses kontrol dan otomatisasi.
Reproducibility of Events: adalah tugas menantang, karena proses yang bersamaan (konkuren) dan asynchronous communication terjadi pada lingkungan terdistribusi. Belum lagi jika full control tidak terpenuhi.
Deadlocks & Race Conditions: adalah masalah besar dalam konteks pengujian. Tingkat urgensinya akan lebih tinggi lagi jika sudah masuk ke shared memory multiprocessor environment.
Deteksi Deadlock dan Resolusinya: melibatkan dua masalah utama, yaitu Pemeliharaan the Wait For Graph dan Pencarian the Wait For Graph untuk siklus kehadiran.
Pengujian Toleransi Kesalahan: kemampuan untuk mentoleransi kesalahan pada sistem perangkat lunak diperlukan dalam aplikasi seperti nuklir tertanam, misi luar angkasa, peralatan medis, dll. Pengujian toleransi kesalahan menjadi tantangan tersendiri karena pemulihan kode sumber hampir tidak boleh dieksekusi saat pengujian. Teknik injeksi dilakukan untuk menyuntikan kesalahan-kesalahan berbeda pada sistem.
Penjadwalan Sistem Terdistribusi: fokus penjadwalan problem pada paralel sistem terdistribusi secara homogen dan heterogen. Cara kerja paralel sistem terdistribusi dipengaruhi oleh proses Broadcast / Multicast dan diperlukan untuk mengembangkan prosedur pengiriman sampai selesai dalam tempo minimal.
Controllability & Observability: adalah dua hal penting dalam pengujian, pengaruhnya terhadap kemampuan memeriksa suatu implementasi, apakah sesuai atau tidak.
Under Test Controllability: adalah kemampuan menguji sistem dengan cara memaksanya menjadi kondisi ujicoba untuk menerima inputan dalam urutan tertentu.
Alokasi Tugas Terdistribusi: menemukan alokasi tugas paling optimal dalam sistem komputasi terdistribusi.
4. Tantangan Sistem Perangkat Lunak Terdistribusi
Peningkatan Kinerja: Pesatnya pertumbuhan pemrosesan paralel dan terdistribusi di era komputer modern, Tingginya permintaan akan memberikan efek peningkatan kinerja dan penekanan biaya produktivitas dalam kehidupan nyata. Tantangannya adalah keterlambatan atau kesalahan komunikasi dan kesalahan perhitungan bisa juga terjadi karena kualitas mesin atau jaringan masing-masing pengguna.
Skalabilitas: sistem harus tetap efektif meskipun terjadi peningkatan signifikan dalam jumlah sumber daya ataupun jumlah pengguna. Arsitektur dan algoritma harus dirancang untuk kedaan seperti ini.
Keamanan: jaminan kerahasiaan dan integritas data harus tersedia dalam DSS. Ancamannya adalah kebocoran informasi, pelanggaran integritas, penyangkalan layanan dan penggunaan ilegal.
Tantangan Desain: DSS harus dirancang responsiveness(dinamis / atau dalam istilah jawanya mampu "papan empan adepan"), throughput(sukses melakukan pengiriman dalam satuan waktu bps/Mbps/Gbps), load sharing dan load balancing.
Concurrency: proses yang dibutuhkan untuk mengakses sumber daya harus tersedia.
Keterbukaan dan Perluasan: antarmuka harus dirancang secara terpisah dan secara publik harus tersedia untuk memungkinkan perluasan terhadap komponen yang sudah ada atau menambahkan komponen baru.
Migration & load balancing: tasknya harus bisa berpindah diantara sistem tanpa mempengaruhi operasi pengguna atau aplikasi yang sedang berjalan, dan beban harus didistribusikan diantara sumberdaya yang tersedia agar mencapai kinerja terbaik.
5. Problematika dan Solusi Sistem Perangkat Lunak Terdistribusi
Performance menjadi isu penting dalam sistem perangkat lunak terdistribusi, hal ini dimaksudkan untuk meminimalkan kendala dan menyediakan solusi.
Dalam sistem perangkat lunak terdistribusi perbedaan algoritma penjadwalan tugas adalah bentuk pengembangan. Algoritma tersebut harus selalu dievaluasi dan mengacu pada parameter tertentu, secara spesifik seperti task graph, yang mana dapat mewakili wajah DSS dan algorimta dengan hasil terbaik harus diadopsi. Pendekatan ini akan meminimalkan Tantangan DSS.
Hal ini dapat diuraikan lebih jauh lagi seperti, berbagai macam bentuk kesalahan disuntikan ke DSS, kemudian kinerja algoritmanya diperhatikan, apakah kesalahan yang disuntikan berpengaruh pada kegagalan komunikasi atau kegagalan komputasi atau malah keduanya. Jika kegagalan komunikasi maka bisa dimungkinkan itu karena kesalahan jaringan atau kesalahan link. Tapi jika kegagalan komputasi maka bisa dimungkinkan itu karena kesalahan hardware atau processor tidak merespon.
6. Kesimpulan
Sistem Terdistribusi merupakan bidang penting dalam dunia penelitian maupun dalam organisasi industri. Pembangunan dan perawatannya sangat kompleks dilakukan, disamping itu rawan berbagai bentuk kesalahan.
Referensi:
Kamal Sheel Mishra, Anil Kumar Tripathi, 2014. "Some Issues, Challenges and Problems of Distributed Software System". Deapartment of Computer Science & Engineering, Indian Institute of Technology(Banaras Hinhu University). Varanasi. India.