Back to IF4031 Arsitektur Aplikasi Terdistribusi

Topic

Questions/Cues

  • Apa dua paradigma desain server?

  • Bagaimana model Thread bekerja?

  • Bagaimana model Event bekerja?

  • Perbandingan Performa?

  • Perbandingan Alur Kontrol (Control Flow)?

  • Perbandingan Sinkronisasi?

  • Beda manajemen State?

  • Beda Penjadwalan (Scheduling)?

  • Apa itu “Stack Ripping”?

  • Apa kelebihan utama setiap model?

Reference Points

  • Slides IF4031 Hal 36-44

Paradigma Thread-based

Dalam model ini, setiap urutan kejadian yang terkait (misalnya, satu koneksi klien dari awal hingga akhir) ditangani oleh satu thread.

  • Alur Kerja: Logika program ditulis secara sekuensial. Jika thread perlu menunggu operasi I/O, thread tersebut akan diblokir oleh sistem operasi.

  • State: State untuk setiap koneksi (variabel lokal, alur eksekusi) disimpan secara otomatis di dalam stack milik thread tersebut.

  • Skalabilitas: Secara teori, skalabilitas dicapai dengan membuat satu thread untuk setiap koneksi.

Paradigma Event-based

Dalam model ini, satu event loop (biasanya satu thread per inti CPU) menunggu dan menangani semua event dari semua koneksi.

  • Alur Kerja: Ketika sebuah event terjadi (misal, data masuk), event handler yang sesuai akan dieksekusi. Handler ini harus berjalan dengan cepat dan tidak boleh blocking.

  • State: Karena hanya ada satu thread, state untuk setiap koneksi harus dikelola secara eksplisit oleh programmer, seringkali dalam struktur data global.

  • Skalabilitas: Satu thread dapat menangani ribuan koneksi karena tidak pernah terblokir menunggu I/O.

Perbandingan Head-to-Head

Performa

  • Thread: Abstraksi lebih berat. Context switching antar thread bisa sangat mahal jika jumlah thread sangat banyak.

  • Event: Lebih ringan dan lebih dekat ke cara kerja hardware (interrupts). Umumnya lebih efisien karena kompleksitas manajemen konkurensi dilimpahkan ke aplikasi.

Alur Kontrol (Control Flow)

  • Thread: Sangat mudah untuk alur sekuensial (panggil fungsi, tunggu hasil, lanjut). Terlihat natural bagi programmer.

  • Event: Lebih sulit untuk alur sekuensial karena logika harus dipecah menjadi callback atau handler. Namun, sangat fleksibel untuk alur yang kompleks.

Sinkronisasi

  • Thread: Sangat sulit. Membutuhkan mekanisme seperti locks atau mutex untuk melindungi data bersama, yang rawan deadlock dan race condition.

  • Event: “Gratis” pada sistem single-core. Karena hanya ada satu thread eksekusi, tidak ada akses data bersamaan, sehingga tidak perlu sinkronisasi. Pada multi-core, sinkronisasi tetap dibutuhkan antar event loop.

Manajemen State

  • Thread: Otomatis. State disimpan di stack thread. Programmer tidak perlu khawatir. Namun, ukuran stack bisa boros memori.

  • Event: Manual. Programmer harus secara eksplisit menyimpan dan mengambil kembali state untuk setiap koneksi. Proses ini disebut “Stack Ripping”. Ini lebih hemat memori tetapi lebih rumit.

Penjadwalan (Scheduling)

  • Thread: Preemptive. Sistem operasi dapat menghentikan thread kapan saja untuk menjalankan thread lain. Ini memberikan isolasi, tapi keputusan penjadwalan bisa jadi tidak optimal untuk aplikasi.

  • Event: Cooperative. Sebuah event handler berjalan sampai selesai. Jika satu handler berjalan terlalu lama, ia akan memblokir semua koneksi lain.

Summary

Desain server terbagi menjadi dua paradigma utama: Thread-based dan Event-based. Model Thread menawarkan kemudahan pemrograman dengan alur sekuensial yang natural dan manajemen state otomatis via stack, namun dibayar dengan biaya performa dari context switching dan kompleksitas sinkronisasi. Sebaliknya, model Event menawarkan performa dan efisiensi sumber daya yang superior dengan menghilangkan overhead tersebut, namun menuntut programmer untuk mengelola state dan alur kontrol secara manual, yang membuat kode menjadi lebih kompleks.