Ringkasan Informasi Mengenai:

            Concurrency

Dalam ranah komputasi dan ilmu komputer, "Concurrency" merupakan kemampuan suatu sistem atau program untuk menjalankan beberapa tugas, instruksi, atau operasi secara bersamaan.

Keberadaan Concurrency menjadi penting dalam pengembangan perangkat lunak modern karena memungkinkan program untuk memaksimalkan penggunaan sumber daya komputasi dan meminimalkan waktu tunggu. Hal ini khususnya relevan dalam aplikasi yang melibatkan tugas-tugas berulang, seperti sistem operasi, basis data, dan aplikasi web yang melayani banyak pengguna secara bersamaan.

Proses eksekusi consurrency tidak dapat diprediksi. Hal ini bergantung pada hal-hal berikut:

a.       Aktivitas proses tambahan

b.       Cara sistem operasi mengatasi gangguan

c.       Kebijakan untuk mengatur sistem operasi

Concurrency memiliki kelebihan dan kekurangan yang perlu dipertimbangkan dalam pengembangan perangkat lunak. Adapun kelebihan dan kekurangan dari concurrency antara lain:

a.       Kelebihan Concurrency

1. Peningkatan Kinerja: Dengan menggunakan concurrency, program dapat mengeksekusi beberapa tugas secara bersamaan, memungkinkan penggunaan sumber daya komputasi yang lebih efisien.

2. Penanganan Banyak Pengguna: Dalam sistem yang melayani banyak pengguna secara bersamaan (seperti situs web, aplikasi jejaring sosial, atau sistem basis data), concurrency memungkinkan untuk menangani permintaan dari banyak pengguna secara simultan.

3. Responsifitas Antarmuka Pengguna: Dalam aplikasi dengan antarmuka pengguna (UI) yang kompleks, concurrency memungkinkan untuk menjalankan tugas-tugas latar belakang tanpa menghalangi responsifitas antarmuka pengguna.

4. Pemrosesan Data Dalam Jumlah Besar: Dalam kasus di mana ada banyak data yang harus diproses, concurrency dapat memungkinkan untuk membagi tugas menjadi potongan-potongan kecil dan memprosesnya secara bersamaan, menghemat waktu.

b.       Kekurangan Concurrency

1. Kompleksitas: Mengelola concurrency dapat meningkatkan kompleksitas kode. Memastikan bahwa beberapa tugas berjalan bersamaan dengan benar tanpa terjadi konflik atau deadlock memerlukan desain dan implementasi yang hati-hati.

2. Kesulitan Debugging: Debugging program yang menggunakan concurrency bisa menjadi lebih sulit karena ada potensi untuk masalah yang terkait dengan race condition, deadlock, dan masalah konkuransi lainnya.

3. Kesulitan Reproduksi Bug: Bug yang berkaitan dengan concurrency mungkin tidak selalu mudah untuk direproduksi karena tergantung pada situasi dan kondisi saat aplikasi berjalan.

4. Keamanan: Jika tidak dikelola dengan benar, concurrency dapat menyebabkan masalah keamanan seperti race condition yang dapat menghasilkan hasil yang tidak diinginkan.

5. Overhead: Implementasi concurrency dapat menghasilkan overhead tambahan pada sistem, terutama dalam pengelolaan thread atau proses tambahan.


Synchronize

Synchronize adalah suatu proses pengendalian akses dari sumber daya terbagi pakai (shared resource) oleh banyak thread sedemikian sehingga hanya satu thread yang dapat mengakses sumber daya tertentu pada satu waktu. Tujuannya adalah untuk memastikan bahwa dua atau lebih entitas (seperti thread atau proses) dapat berbagi sumber daya atau melakukan tugas bersama tanpa menghasilkan konflik atau kondisi yang tidak diinginkan.

Dalam konteks program multithreading atau multiproses, "synchronization" digunakan untuk memastikan bahwa dua atau lebih thread atau proses tidak mengakses atau memodifikasi sumber daya bersamaan. Hal ini sering diperlukan untuk mencegah race condition, yaitu situasi di mana dua atau lebih operasi bersaing untuk mengakses atau memodifikasi sumber daya yang sama pada saat yang sama.

Ada beberapa mekanisme sinkronisasi yang digunakan dalam pemrograman, seperti mutex (mutual exclusion), semafor, kondisi, dan berbagai struktur data sinkronisasi lainnya. Setiap mekanisme ini dirancang untuk memastikan bahwa hanya satu thread atau proses yang dapat mengakses atau memodifikasi sumber daya pada satu waktu tertentu.

Kebutuhan akan sinkronisasi tidak hanya muncul dalam sistem multi-prosesor tetapi untuk semua jenis proses yang berjalan bersamaan; bahkan dalam sistem prosesor tunggal. Di bawah ini disebutkan beberapa kebutuhan utama untuk sinkronisasi:

Fork dan Joins : Ketika suatu pekerjaan sampai pada titik percabangan, pekerjaan tersebut dipecah menjadi N sub-pekerjaan yang kemudian dilayani oleh n tugas. Setelah dilayani, setiap sub-pekerjaan menunggu hingga semua sub-pekerjaan lainnya selesai diproses. Kemudian, mereka bergabung kembali dan keluar dari sistem. Jadi, pemrograman paralel memerlukan sinkronisasi karena semua proses paralel menunggu beberapa proses lainnya terjadi.

Produsen-Konsumen: Dalam hubungan produsen-konsumen, proses konsumen bergantung pada proses produsen hingga data yang diperlukan telah dihasilkan.

Sumber daya penggunaan eksklusif: Ketika beberapa proses bergantung pada suatu sumber daya dan mereka perlu mengaksesnya pada saat yang sama, sistem operasi perlu memastikan bahwa hanya satu prosesor yang mengaksesnya pada titik waktu tertentu. Hal ini mengurangi konkurensi.

Dengan menggunakan sinkronisasi dengan benar, pengembang dapat memastikan keamanan dan integritas data dalam aplikasi yang menggunakan beberapa thread atau proses bersamaan.


            Caching

3.       Caching merupakan sebuah proses menyimpan data yang sering digunakan di tempat penyimpanan sementara yang disebut cache. Tujuan dari caching ini sendiri adalah untuk meningkatkan kinerja aplikasi dan sistem dengan mengurangi jumlah waktu yang dibutuhkan untuk mengakses data. Saat permintaan dibuat untuk data yang disimpan di cache, sistem dapat mengambil data dari cache alih-alih harus mengambilnya dari sumber aslinya, yang bisa lebih lambat.

Jadi, fungsi cache adalah agar user bisa mengakses informasi dengan lebih cepat, karena adanya data yang sudah tersimpan.

Secara jangka panjang, proses ini tentu akan sangat bermanfaat karena bisa menghemat waktu dan menjadikan semuanya lebih efisien saat Anda perlu membuka informasi yang sama secara berulang kali.

Adapun cara kerja dari caching sendiri yaitu,  saat permintaan dibuat untuk data, sistem memeriksa cache untuk melihat apakah data sudah disimpan di sana. Jika ya, sistem mengambil data dari cache dan menyajikannya kepada pengguna. Jika data tidak ada di cache, sistem akan mengambilnya dari sumber aslinya dan menyimpannya di cache untuk digunakan di masa mendatang. Lain kali data diminta, itu akan disajikan dari cache, yang lebih cepat daripada mengambilnya dari sumber aslinya.

Ada beberapa jenis caching, termasuk memory caching, in-memory caching, dan disk caching. Caching memori menyimpan data dalam memori cache sistem, yang lebih cepat daripada menyimpannya di disk. Caching dalam memori menyimpan data dalam RAM sistem, yang bahkan lebih cepat daripada caching memori. Caching disk menyimpan data pada disk, yang lebih lambat dari caching memori tetapi dapat menyimpan lebih banyak data.

Caching juga dapat dilakukan di berbagai tingkatan, termasuk browser web, server web, CDN (Jaringan Pengiriman Konten), dan server asal. Browser web meng-cache HTML, gambar, dan kode untuk mengurangi jumlah permintaan ke server web. Server web meng-cache data respons untuk mengurangi beban pada CPU dan meningkatkan kinerja aplikasi. Konten cache CDN untuk mengurangi latensi dan meningkatkan pengalaman pengguna. Data cache server asal untuk mengurangi beban pada server backend dan meningkatkan kinerja aplikasi.

API juga dapat menggunakan caching untuk meningkatkan kinerja. Saat permintaan API dibuat, sistem dapat memeriksa cache untuk melihat apakah respons sudah disimpan di sana. Jika ya, sistem dapat melayani respons dari cache alih-alih memproses permintaan lagi.

 

4.               Fault Tolerance

Fault Tolerance merupakan feature yang memungkinkan suatu sistem tetap berjalan normal meskipun ada komponen yang rusak pada salah satu komponennya. Fault tolerant juga dipakai dalam transmisi data sehingga meskipun ada bebarapa data yang gagal diterima, pesan dapat diterima secara utuh. Dalam storage kita mengenal RAID, di mana hardisk dikonfigurasi sedemikian rupa sehingga jika ada hardisk yang rusak, maka data dapat diambil dari hardisk yang masih berfungsi normal.

Secara sederhana kita memahami fault tolerance sebagai toleransi terhadap kerusakan. Di sini kita merancang agar sistem informasi terutama sistem informasi akuntansi yang digunakan oleh perusahaan dapat berjalan meskipun ada kerusakan perangkat kerasnya. Di sini kita akan membicarakan bagaimana merancang sistem tetap berjalan jika ada kerusakan di level storage, di level perangkat keras dan di level kerusakan total.

Sebuah desain toleransi kesalahan memungkinkan sistem untuk melanjutkan operasi yang dimaksudkan, mungkin pada tingkat yang dikurangi, daripada gagal sepenuhnya, ketika beberapa bagian dari sistem gagal. Istilah ini paling sering digunakan untuk menjelaskan sistem komputer yang dirancang untuk terus beroperasi penuh atau kurang lebih dengan, mungkin, pengurangan throughput atau peningkatan waktu respons jika terjadi beberapa kegagalan parsial. Artinya, sistem secara keseluruhan tidak terhenti karena adanya masalah baik di hardware maupun software.

Fault-tolerant berhubungan dengan sistem yang mempunyai high-availability yang tinggi.

System yang fault-tolerant mempunyai karakteristik

a.       Semua memiliki cadangan, jadi tidak ada komponen yang bergantung kepada satu alat saja

b.       Memiliki kemampuan memisahkan sistem yang gagal/rusak

c.       Bisa mencegah efek kerusakan supaya tidak menjalar ke komponen lain

d.       Kemampuan untuk berpindah ke komponen backup, dan kemudian kembali lagi ke komponen utama setelah sistem utama diperbaiki



Referensi:
1. Pengertian, Kelebihan, dan Kekurangan Concurrent Development Model
2. Concurrency Control Techniques


Noted:
Untuk memenuhi tugas mata kuliah Sistem Terdistribusi dan Komputasi Pararel 
oleh Lisa Yiha Rodhiatun - 1220011