Saat menghubungkan Nginx ke backend (PHP-FPM, app server, dsb), biasanya ada dua opsi:
- Unix Domain Socket
- TCP Socket (IP:Port)
Sering terdengar klaim:
“Unix socket pasti lebih cepat”
Jawaban yang benar:
- Kadang iya
- Kadang tidak
- Dan sering kali beda tipis tapi efeknya kontekstual
Artikel ini membedah perbedaan nyata, kapan masing-masing lebih tepat, dan salah kaprah yang sering terjadi.
Contents
- 1 1. Apa Bedanya Secara Fundamental?
- 2 2. Mitos: Unix Socket Selalu Lebih Cepat
- 3 3. Benchmark Realistis (Umum)
- 4 4. Kelebihan Unix Socket
- 5 5. Kekurangan Unix Socket (Sering Diabaikan)
- 6 6. Kelebihan TCP Socket
- 7 7. TCP 127.0.0.1 vs 0.0.0.0
- 8 8. Bottleneck Bukan di Socket (Sering Salah Fokus)
- 9 9. Timeout & Backlog Tetap Penting
- 10 10. Kapan Pakai Unix Socket?
- 11 11. Kapan Pakai TCP Socket?
- 12 12. Kesalahan Fatal yang Sering Terjadi
- 13 13. Kesimpulan
- 14 Related Posts
1. Apa Bedanya Secara Fundamental?
Unix Domain Socket
- Berbasis filesystem
- Tidak lewat TCP/IP stack
- Contoh:
/run/php/php-fpm.sock
TCP Socket
- Lewat network stack
- Bisa local (127.0.0.1) atau remote
- Contoh:
127.0.0.1:9000
2. Mitos: Unix Socket Selalu Lebih Cepat
Secara teori:
- Unix socket punya latency lebih rendah
- Lebih sedikit context switch
- Lebih sedikit overhead protocol
Secara praktik:
- Selisih sering mikrodetik
- Mudah kalah oleh:
- Disk I/O
- Buffering
- App logic
➡️ Socket jarang jadi bottleneck utama.
3. Benchmark Realistis (Umum)
Di satu mesin:
| Metode | Latency |
|---|---|
| Unix socket | 🟢 Paling rendah |
| TCP 127.0.0.1 | 🟢 Hampir sama |
| TCP remote | 🔴 Lebih tinggi |
Perbedaannya biasanya:
- 1–5% saja
4. Kelebihan Unix Socket
1️⃣ Lebih Aman (Default)
- Tidak bisa diakses lewat network
- Tidak perlu firewall rule
- Scope terbatas di host
Cocok untuk:
- Nginx ↔ PHP-FPM di mesin yang sama
2️⃣ Lebih Sederhana untuk Single Host
Konfigurasi PHP-FPM:
listen = /run/php/php-fpm.sock
Nginx:
fastcgi_pass unix:/run/php/php-fpm.sock;
Tidak perlu:
- Port management
- Network debug
3️⃣ Lebih Stabil untuk Local IPC
Tidak tergantung:
- Network stack
- TCP backlog
- SYN queue
5. Kekurangan Unix Socket (Sering Diabaikan)
❌ Permission = Sumber Masalah
Masalah klasik:
- Nginx: user
www-data - PHP-FPM: user
php-fpm
Socket:
- Tidak bisa diakses
- Error 502
Solusi:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
❌ Tidak Bisa Scale Antar Host
Unix socket:
- Tidak bisa di-share ke mesin lain
- Tidak bisa load balance multi-node
Jika ada rencana scale:
Unix socket = jalan buntu
6. Kelebihan TCP Socket
1️⃣ Mudah Scale
- Bisa beda host
- Bisa container
- Bisa load balance
Contoh:
upstream php_backend {
server 10.0.0.2:9000;
server 10.0.0.3:9000;
}
2️⃣ Debug Lebih Familiar
Tool umum:
netstatsstcpdump
Unix socket:
- Lebih susah di-trace
3️⃣ Cocok untuk Docker / K8s
Container:
- Isolasi filesystem
- Unix socket ribet
- TCP lebih natural
7. TCP 127.0.0.1 vs 0.0.0.0
Kesalahan umum:
listen = 0.0.0.0:9000
Masalah:
- Terbuka ke network
- Risiko security
Lebih aman:
listen = 127.0.0.1:9000
Atau:
- Firewall ketat
8. Bottleneck Bukan di Socket (Sering Salah Fokus)
Jika latency tinggi:
- 99% bukan karena socket
- Tapi karena:
- PHP lambat
- Query lambat
- Disk lambat
- Buffer salah
Ganti socket tidak menyembuhkan aplikasi lambat.
9. Timeout & Backlog Tetap Penting
Baik Unix maupun TCP:
- Bisa kehabisan backlog
- Bisa drop connection
Perhatikan:
listen.backlogpm.max_childrenfastcgi_connect_timeout
10. Kapan Pakai Unix Socket?
Gunakan Unix socket jika:
- Nginx & backend satu mesin
- Tidak ada rencana scale horizontal
- Ingin setup sederhana
- Security minimal effort
11. Kapan Pakai TCP Socket?
Gunakan TCP socket jika:
- Backend beda host
- Containerized
- Load balancing
- High availability
12. Kesalahan Fatal yang Sering Terjadi
- Pakai Unix socket lalu scale ke multi-host ❌
- Permission socket dibiarkan default ❌
- TCP listen ke 0.0.0.0 tanpa firewall ❌
- Mengira socket tuning = performance tuning ❌
13. Kesimpulan
Unix socket vs TCP socket bukan soal:
mana yang lebih cepat
Tapi soal:
mana yang paling sesuai dengan arsitektur
Kalimat paling jujur:
Pilih socket yang membuat sistem Anda lebih sederhana, bukan lebih “keren”.