Apa sebenarnya komputasi terdistribusi? [Tutup]

14

Apa sebenarnya yang dimaksud dengan komputasi terdistribusi, dan bagaimana perbedaannya dari komputasi paralel / konkuren?

Apakah penggunaan mutex dan semaphore di banyak thread paralel mencoba menyinkronkan untuk akses ke sumber daya merupakan masalah dalam domain komputasi terdistribusi?

rdasxy
sumber

Jawaban:

8

Apa sebenarnya yang dimaksud dengan komputasi terdistribusi?

Komputasi terdistribusi adalah kumpulan elemen pemrosesan yang inheren paralel yang berkomunikasi satu sama lain untuk mengatasi satu atau lebih masalah. Elemen-elemen pemrosesan tersebut cukup terpisah satu sama lain sehingga tidak praktis untuk membangun jalinan perpesanan yang andal dan tepat waktu di antara mereka, sehingga tidak mungkin ada pengetahuan global tentang keadaan sistem. Fitur khusus dari perpesanan dengan sistem terdistribusi adalah bahwa pesan akan hilang, akan kacau, akan tertunda - solusi dalam ruang ini harus memperhitungkan hal ini. Dengan demikian, pemrograman terdistribusi adalah tentang berurusan dengan jaringan dan pesan, paralelisme dan kurangnya informasi global.

Metode termudah untuk mengatasi masalah adalah membuat elemen pemrosesan tunggal menjadi istimewa, yaitu otoritatif untuk sepotong informasi tertentu. Kemudian elemen-elemen lain dapat merujuk kembali ke setiap kali, atau cache informasi dan berharap bahwa itu tidak ketinggalan zaman (karena mereka tidak dapat mengandalkan diberitahu tentang perubahan). Ini adalah arsitektur klien / server klasik.

Komputasi internet adalah komputasi terdistribusi, tetapi tanpa kemampuan untuk mengendalikan apa yang sebenarnya dilakukan oleh sebagian besar node terdistribusi.

Apakah beberapa utas paralel yang mencoba menyinkronkan untuk akses ke sumber daya merupakan masalah dalam domain komputasi terdistribusi?

Mereka merupakan solusi yang mungkin berguna ketika membangun model klien / server, tetapi dengan biaya peningkatan dramatis dalam pertentangan sumber daya. Untuk dibaca, itu bukan masalah besar (menyediakan perangkat keras yang cukup) tetapi untuk menulis itu memang masalah besar.

Apa yang Anda coba hindari adalah kunci yang didistribusikan. Kurangnya pesan yang dapat diandalkan tepat waktu benar-benar membunuh protokol keputusan terdistribusi, kecuali jika Anda menggunakan sesuatu seperti protokol Paxos , tapi itu punya banyak peringatan. Masalah mendasar dengan komputasi terdistribusi adalah "hal-hal buruk terjadi pada pesan". Protokol level yang relatif rendah, seperti TCP, mengurangi masalah, tetapi Anda masih bisa terhenti.

Donal Fellows
sumber
6

Apakah beberapa utas paralel yang mencoba menyinkronkan untuk akses ke sumber daya merupakan masalah dalam domain komputasi terdistribusi?

Mereka melakukannya jika utas tersebut dapat berjalan pada mesin yang berbeda, atau bahkan jika mereka berjalan pada mesin yang sama tetapi dalam proses yang berbeda.

Caleb
sumber
1
Utas yang berjalan pada mesin yang berbeda pada dasarnya tidak dapat disinkronkan dengan cara tradisional mutex dan semaphore.
Jan Hudec
@ JanHudec Saya pikir itu adalah inti dari pertanyaan pewawancara. Tanpa uji coba-dan-atur atom atau bandingkan-dan-tukar instruksi atau memori bersama, komputasi terdistribusi harus bergantung pada pesan antar mesin untuk sinkronisasi. Untungnya, ada algoritma yang mencapai ini.
Caleb
Saya tidak setuju dengan "untungnya". Algoritme rumit dan tidak toleran terhadap kesalahan, sehingga harus dihindari.
Jan Hudec
5

Komputasi terdistribusi adalah sistem komputasi yang memiliki pemrosesan yang terjadi pada komputer yang berbeda (yaitu pada sistem terdistribusi). Program individu berkomunikasi satu sama lain melalui serangkaian saluran komunikasi. Saluran ini biasanya koneksi jaringan (soket TCP, misalnya), tetapi sering menggunakan protokol dan perangkat komunikasi lainnya (seperti DeviceNET, BACNet, SECS-2, Modbus, dll.) Atau bahkan protokol yang dibuat khusus untuk perangkat tertentu.

Sistem terdistribusi biasanya jauh lebih rumit daripada sistem yang dirancang untuk dijalankan pada satu komputer. Selain masalah konkurensi dan penguncian sumber daya yang harus dihadapi aplikasi multi-utas, sistem terdistribusi perlu menangani kegagalan komunikasi, dan memproses kegagalan simpul. Transaksi (dan kembalikan) yang memerlukan banyak prosesor untuk melakukan juga bisa rumit.

Sistem terdistribusi mengambil banyak bentuk dan saat ini digunakan dalam banyak aplikasi. Aplikasi web adalah sistem terdistribusi. Sistem N-Tiered biasanya memiliki setidaknya N prosesor yang berbeda (dengan aplikasi yang berbeda). Sistem terdistribusi juga digunakan di banyak sistem otomasi pabrik juga.

Tulisan tentang komputasi terdistribusi di Wikipedia layak dibaca.

Sebagai jawaban atas pertanyaan Anda tentang apakah aplikasi multi-utas merupakan aplikasi terdistribusi - jika utas berjalan pada satu komputer, sistem tidak terdistribusi. Memang harus menyelesaikan beberapa masalah yang melekat dalam sistem terdistribusi, tetapi tidak semuanya.

Jay Elston
sumber
3

Sebenarnya "komputasi terdistribusi" adalah solusi apa pun yang melibatkan pemrosesan satu transaksi / permintaan / perhitungan pada lebih dari satu komputer.

Anda juga akan menemukan istilah "Sistem Terdistribusi" yang merupakan istilah umum untuk windows, unix dan server sistem kecil lainnya yang semula akan digunakan di luar pusat data pusat. Meskipun lebih normal untuk sistem ini untuk digunakan di dalam pusat data hari ini istilah tersebut macet.

James Anderson
sumber
3

Untuk menjawab pertanyaan umum Anda tentang apa yang merupakan komputasi terdistribusi, saya akan merekomendasikan makalah Catatan tentang Komputasi Terdistribusi oleh Ann Wollrath, Geoff Wyant, Jim Waldo dan Samuel C. Kendall . Ini mencakup sejarah terbaru dari sistem terdistribusi dan kegagalannya, dan ia mengusulkan bahwa komputasi terdistribusi membutuhkan pemikiran berbeda tentang masalah yang terlibat.

Meskipun tidak ada mutex atau semaphore yang disebutkan dalam makalah, ini memberikan wawasan yang berharga tentang rekayasa yang tepat dari sistem perangkat lunak terdistribusi.

Mengenai mengapa pewawancara Anda bertanya tentang mutexes dan semaphores, saya setuju dengan @Caleb:

Mereka melakukannya jika utas tersebut dapat berjalan pada mesin yang berbeda, atau bahkan jika mereka berjalan pada mesin yang sama tetapi dalam proses yang berbeda.

Satu-satunya hal yang akan saya tambahkan adalah bahwa mutex dan semaphore adalah primitif penguncian tingkat rendah yang memungkinkan Anda untuk mendistribusikan pekerjaan di beberapa perangkat komputasi, dan operasi mereka (biasanya) sangat penting untuk keberhasilan aplikasi. Jelas, itu tergantung pada bahasa dan teknologi yang digunakan. Jika Anda menggunakan Erlang atau Scala, Anda mungkin akan menggunakan konkurensi berbasis model Aktor daripada konkurensi tradisional berbasis kunci.

Matthew Rodatus
sumber
2

Kata itu mengatakan semuanya. Anda harus melakukan beberapa operasi komputasi dan jika Anda dapat mendistribusikan bagian-bagian dari komputasi ini sedemikian rupa sehingga masing-masing komputasi bekerja terlepas dari komputasi lainnya dan kemudian ketika semua selesai Anda menggabungkan hasil dari setiap komputasi untuk mendapatkan jawaban dari komputasi utama. Contohnya adalah: Pengurangan Peta

Ankur
sumber
1

Kami memang memiliki kursus tentang "sistem terdistribusi" dan sementara saya tidak ingat definisi persisnya, itu sepanjang garis:

  1. dapat berjalan di beberapa node terpisah yang berkomunikasi melalui pesan (tidak dapat berbagi memori)
  2. objek dapat dimigrasikan antar node
  3. objek menjaga identitas mereka saat dimigrasi dan dapat diatasi secara transparan saat dimigrasikan
  4. objek tidak bergantung pada simpul yang membuatnya
  5. sistem dapat menangani penambahan dan penghapusan node

(Saya percaya ada beberapa lagi dan saya tidak yakin tentang poin terakhir)

Sekarang dalam kursus kami belajar bagaimana menerapkan transaksi terdistribusi dan kunci terdistribusi. Pelajarannya adalah bahwa kunci terdistribusi pada dasarnya diimplementasikan menggunakan transaksi terdistribusi, yang merupakan sebaliknya dibandingkan dengan apa yang Anda lakukan secara lokal, dan itu pada dasarnya tidak toleran terhadap kesalahan, yang agak mengalahkan tujuan memiliki sistem terdistribusi di tempat pertama.

Sunting: Definisi itu adalah untuk "sistem terdistribusi" dalam arti sempit sistem operasi atau sistem database dan bukan hanya sistem client-server. Apa pun yang memenuhi syarat pertama dapat disebut terdistribusi dalam beberapa konteks.

Secara kebetulan definisi tersebut cocok dengan perbedaan antara sistem kontrol versi terdistribusi dan tradisional, yang semuanya setidaknya client-server dan sering juga direplikasi.

Jan Hudec
sumber
Itu sangat gaya komputasi terdistribusi tertentu. Ada yang lain, dan satu-satunya hal yang benar-benar mereka bagikan adalah poin pertama. Pesan sangat penting, yang lain ... tidak terlalu banyak.
Donal Fellows
1
@ DonalFellows: Ya, ini adalah sistem terdistribusi , dalam arti sistem operasi atau basis data. Di sana migrasi dan toleransi kesalahan adalah poin utama untuk melakukannya. "Komputasi" terdistribusi adalah apa pun yang berjalan pada banyak node.
Jan Hudec
Nah, dalam hal itu seharusnya sudah mencakup bisnis untuk mengambil keputusan. Itu sulit dalam sistem terdistribusi. (Selain itu, sebagian besar makalah akademis yang pernah saya lihat tentang topik ini membuat asumsi yang sama sekali tidak realistis tentang topologi grafik yang mendasarinya, memberikan kesimpulan yang valid tetapi tidak berguna.)
Donal Fellows
@DonalFellows: Tentu saja tidak mencakup bisnis untuk mengambil keputusan dan semua arbitrasi dan membagi hal-hal otak (tidak terlalu dalam, itu hanya tingkat pengantar). Tapi itu bukan mendefinisikan properti dari sistem terdistribusi. Ini hanya rintangan yang harus Anda lompati jika Anda ingin membuatnya.
Jan Hudec
0

Komputasi terdistribusi, istilah "tidak-menandai" untuk komputasi perusahaan yang mungkin Anda dengar lebih banyak di kehidupan nyata. Namun, ide umum yang ditunjukkan oleh orang lain adalah "Anda menggunakan lebih dari satu komputer untuk melakukan pekerjaan"

Archimedes Trajano
sumber