Back to IF4031 Arsitektur Aplikasi Terdistribusi

Topic

Questions/Cues

  • Beda Level-triggered & Edge-triggered?

  • Bagaimana arsitektur server Apache?

  • Apa itu MPM di Apache?

  • Bagaimana arsitektur server Nginx?

  • Apa peran Master dan Worker di Nginx?

  • Kenapa Nginx sangat cepat?

Reference Points

  • Slides IF4031 Hal 45-49

Level-triggered vs. Edge-triggered

Ini adalah dua mode notifikasi dalam sistem event seperti epoll. Misalkan ada 100 byte data tiba di socket, dan aplikasi hanya membaca 10 byte.

  • Level-triggered (dipicu oleh level/status): Sistem akan terus-menerus memberitahu aplikasi bahwa socket “siap dibaca” selama masih ada data yang tersisa (90 byte) di buffer. Ini lebih aman dan mudah ditangani.

  • Edge-triggered (dipicu oleh perubahan): Sistem hanya akan memberitahu aplikasi satu kali, yaitu saat data pertama kali tiba. Aplikasi bertanggung jawab untuk membaca semua data yang tersedia sampai habis. Jika tidak, aplikasi tidak akan diberitahu lagi tentang sisa data tersebut. Mode ini lebih efisien karena mengurangi jumlah notifikasi, tetapi lebih sulit diimplementasikan dengan benar.

Contoh Desain Server: Apache HTTP Server

Apache adalah server web veteran dengan arsitektur yang sangat modular. Model konkurensinya tidak tunggal, melainkan dapat dikonfigurasi melalui MPM (Multi-Processing Modules).

MPM di Apache

  • mpm_prefork: Model klasik. Apache membuat beberapa proses anak di awal. Setiap proses anak bersifat single-threaded dan menangani satu koneksi pada satu waktu. Sangat stabil dan aman (isolasi proses), tetapi memakan banyak memori.

  • mpm_worker: Model hibrida. Apache membuat beberapa proses anak, dan setiap proses anak memiliki thread pool (beberapa thread). Setiap thread dapat menangani satu koneksi. Ini lebih hemat memori daripada prefork.

  • mpm_event: Mirip dengan worker, tetapi dioptimalkan untuk menangani koneksi keep-alive. Ada satu thread khusus yang mendengarkan semua koneksi. Koneksi yang aktif akan diserahkan ke thread pekerja, sementara koneksi yang idle (menunggu request berikutnya) tidak mengikat satu thread penuh.

Contoh Desain Server: Nginx

Nginx dirancang dari awal untuk mengatasi C10K Problem, sehingga arsitektur dasarnya adalah event-based, asynchronous, dan non-blocking.

Arsitektur Nginx

  1. Master Process: Bertugas untuk membaca konfigurasi, membuka port, dan menjalankan serta mengelola beberapa Worker Process.

  2. Worker Processes: Biasanya ada satu worker per inti CPU. Setiap worker bersifat single-threaded dan menjalankan event loop (epoll atau kqueue). Satu worker process ini mampu menangani ribuan koneksi secara bersamaan karena tidak pernah ada operasi yang memblokir.

  3. Non-blocking I/O: Semua operasi I/O (membaca dari jaringan, menulis ke disk, berkomunikasi dengan backend) dilakukan secara non-blocking. Worker tidak menunggu operasi selesai, melainkan mendaftarkan minat pada event dan melanjutkan memproses event lain.

Summary

Arsitektur server di dunia nyata mengaplikasikan paradigma thread dan event secara berbeda. Apache menggunakan pendekatan modular dengan MPM, yang memungkinkannya beradaptasi dari model multi-proses (prefork) ke model hibrida multi-thread (worker/event) untuk efisiensi yang lebih baik. Sebaliknya, Nginx dibangun sepenuhnya di atas fondasi arsitektur event-driven yang non-blocking, dengan satu master process yang mengelola beberapa worker process single-threaded, di mana setiap worker mampu menangani ribuan koneksi secara bersamaan, memberikannya keunggulan signifikan dalam menangani beban konkurensi tinggi.