Apa itu Daemon?
Dalam dunia komputasi, daemon (diucapkan DEE-muhn) adalah sebuah program yang berjalan terus menerus sebagai proses latar belakang dan “terbangun” untuk menangani permintaan layanan yang terjadi secara berkala, yang sering kali berasal dari proses jarak jauh. Program daemon diberi tahu tentang permintaan tersebut oleh sistem operasi (OS), dan ia akan merespons permintaan itu sendiri atau meneruskan permintaan tersebut ke program atau proses lain sesuai kebutuhan.
Proses daemon yang umum antara lain adalah spooler cetak, pengelola email, dan program lainnya yang mengelola tugas administratif. Banyak program utilitas Unix atau Linux yang berjalan sebagai daemon. Sebagai contoh, pada Linux, daemon Network Time Protocol (NTP) digunakan untuk mengukur perbedaan waktu antara jam di komputer tempatnya berjalan dengan jam komputer lain di jaringan. Daemon waktu berjalan di setiap komputer host, dengan satu ditunjuk sebagai primer dan yang lainnya sebagai sekunder. Daemon sekunder mengatur ulang waktu jaringan di komputer host mereka dengan terlebih dahulu mengirimkan permintaan ke daemon waktu primer untuk mengetahui waktu jaringan yang benar.
Daemon berperan sebagai server dalam model client-server.
Apa peran daemon dalam layanan web?
Salah satu contoh paling jelas dari daemon adalah daemon Hypertext Transfer Protocol (HTTPd), yang berjalan di setiap server web, terus-menerus menunggu dalam mode tidur sampai ada permintaan yang datang dari klien web dan penggunanya. Versi sebelumnya dari daemon HTTP akan membuat proses baru untuk menangani setiap permintaan. Proses baru ini, yang merupakan salinan dari daemon, akan mengambil konten yang diminta dan mengembalikannya kepada klien yang meminta. Setelah itu, proses baru ini akan berhenti.
Dengan membuat proses baru, proses asli bisa kembali ke mode tidur untuk menunggu permintaan lainnya. Pendekatan ini digunakan untuk mencegah proses asli menjadi terlalu sibuk untuk melayani permintaan baru, karena daemon yang menangani semua permintaan sendiri akan membuat sistem lebih rentan terhadap peretasan. Serangan denial-of-service sering kali didasarkan pada strategi untuk membuat daemon terlalu sibuk sehingga tidak bisa menangani permintaan yang masuk.
Daemon HTTP yang lebih modern, seperti Apache, menangani permintaan menggunakan thread alih-alih membuat proses baru. Thread, yang mulai digunakan setelah generasi pertama daemon HTTP diterapkan dan disebarkan, memungkinkan bagian-bagian berbeda dari proses yang sama untuk berjalan secara paralel. Bagian utama dari daemon bisa menunggu permintaan baru, sementara thread lainnya menangani permintaan lama. Thread memerlukan overhead yang lebih sedikit dibandingkan dengan membuat proses baru, yang memerlukan waktu untuk dijalankan dan membutuhkan memori untuk berjalan.
Pendekatan ketiga dapat dilihat pada daemon Nginx HTTP, yang didasarkan pada arsitektur berbasis event yang berjalan dalam satu thread. Permintaan diserahkan ke proses pekerja, yang terus-menerus berjalan di latar belakang — artinya, proses ini tidak dibuat hanya untuk menangani satu permintaan dan langsung berhenti setelahnya. Administrator menentukan berapa banyak proses pekerja yang harus dibuat.
Jenis sistem operasi apa yang dibutuhkan oleh daemon?
Karena daemon membutuhkan layanan khusus dari OS, mereka berperilaku sedikit berbeda antara satu sistem operasi dengan lainnya. Daemon pertama kali dijalankan pada sistem operasi Unix dan dirancang berdasarkan fitur-fitur dari Unix.
Daemon dimulai melalui baris perintah Unix atau dalam file startup; file-file ini berisi skrip yang dijalankan ketika sistem di-boot atau pada peristiwa lain, seperti login pengguna atau ketika shell script baru dijalankan. Setelah itu, daemon berjalan di latar belakang dan menunggu sinyal dari OS untuk terbangun dan melakukan tugasnya.
Daemon hanya bisa dijalankan pada sistem operasi Multitasking. Mereka diimplementasikan pada Microsoft Windows, dimulai dari versi NT, dan sering disebut sebagai Windows services alih-alih daemon.
Apa saja contoh-contoh daemon?
Daemon merespons peringatan dari sistem operasi (OS) ketika terjadi suatu peristiwa eksternal, seperti kedatangan pesan di jaringan. Untuk pesan yang datang dari jaringan, modul TCP/IP di komputer host mencari nomor port pesan tersebut dan mengirimkan peringatan ke daemon yang ditugaskan untuk nomor port tersebut. Sebagai contoh, nomor port 80 ditugaskan untuk HTTP, sehingga ketika pesan dengan nomor port tersebut diterima, stack TCP/IP yang ada pada OS akan mengirimkan sinyal ke HTTPd.
Setiap sistem yang berbasis Unix atau varian Unix menjalankan beberapa daemon, yang biasanya namanya diakhiri dengan huruf d. Berikut adalah beberapa contoh daemon:
- init. Ini adalah daemon pertama yang dijalankan ketika Unix booting, dan ia memulai semua proses lainnya.
- inetd. Daemon super ini mendengarkan permintaan internet di nomor port yang ditentukan dan memulai program server yang sesuai untuk menangani permintaan tersebut. Layanan yang ditangani oleh inetd antara lain rlogin, telnet, ftp, talk, dan finger.
- crond. Daemon ini mengeksekusi perintah yang dijadwalkan.
- dhcpd. Daemon ini menyediakan layanan Dynamic Host Configuration Protocol.
- fingerd. Daemon ini sering dijalankan oleh inetd untuk merespons perintah finger.
- ftpd. Daemon ini sering dijalankan oleh inetd untuk menangani permintaan File Transfer Protocol.
- httpd. Daemon ini bertindak sebagai server web.
- lpd. Daemon ini menyediakan permintaan Line Printer Protocol.
- named. Daemon ini menyediakan layanan Domain Name Protocol.
- nfsd. Daemon ini menyediakan layanan Network File System.
- ntpd. Daemon ini menyediakan layanan NTP, baik sebagai primer maupun sekunder.
- portmap/rpcbind. Daemon ini mengonversi nomor program Remote Procedure Call menjadi nomor port internet.
- sshd. Daemon ini menyediakan layanan Secure Shell.
- sendmail. Daemon ini menangani pesan email yang masuk melalui Simple Mail Transfer Protocol atau Mailer.
- swapper. Daemon kernel ini memindahkan proses-proses antara memori utama dan penyimpanan sekunder sebagai bagian dari manajemen memori virtual.
- syslogd. Daemon ini menangani permintaan log dari kernel OS, proses lain di mesin yang sama, dan proses di mesin lain.
- syncd. Daemon ini menyinkronkan file di server yang berbeda.
- systemd. Daemon ini menggantikan init pada sistem Linux.
- vhand. Daemon ini memilih halaman yang belum lama diakses dan dapat dipindahkan dari memori utama ke penyimpanan sekunder jika diperlukan.
- ypbind. Daemon ini mengikat proses di klien Network Information Service (NIS) ke layanan di server NIS.
Sejarah Daemon
Istilah daemon diciptakan oleh para programmer di Massachusetts Institute of Technology (MIT) Project MAC (Mathematics and Computation) pada tahun 1963, yang terinspirasi dari demon Maxwell, sebuah agen imajiner dalam fisika dan termodinamika. Dalam eksperimen pemikiran yang dirancang oleh James Clerk Maxwell pada tahun 1867, seorang demon akan mengendalikan pintu kecil tanpa massa antara dua ruangan gas, memaksa molekul-molekul yang bergerak cepat untuk melewati satu arah dan molekul-molekul yang bergerak lambat untuk melewati arah lainnya. Dalam mitologi Yunani, daemon dianggap sebagai makhluk atau kekuatan supernatural.
Para programmer MIT menganggap bahwa demon adalah nama yang tepat untuk sebuah proses latar belakang yang bekerja tanpa henti untuk menjalankan tugas-tugas sistem. Namun, alih-alih menggunakan istilah demon, mereka menggunakan daemon, yang merupakan bentuk lama dari kata tersebut.
Akrnime ditambahkan setelah konsep ini mulai digunakan secara luas. Jadi, di beberapa kalangan, daemon menjadi singkatan dari disk and execution monitor.