Database di Server Terpisah, Kapan Perlu Dipisah?
Kapan database perlu dipindah ke server sendiri, tanda-tandanya, untung rugi soal latensi dan biaya, serta cara memisahkannya dengan aman.
Jawaban singkat
Pisahkan database ke server sendiri saat aplikasi dan database berebut RAM atau CPU, saat kamu butuh lebih dari satu server aplikasi, atau saat keamanan dan perawatan database perlu diatur terpisah. Untuk aplikasi kecil dengan beban wajar, satu server biasanya masih lebih sederhana dan cepat.
Daftar isi
Memisahkan database berarti aplikasi (web server, PHP, Node.js, dan sejenisnya) berjalan di satu server, sedangkan MySQL, MariaDB, atau PostgreSQL berjalan di server lain, dan keduanya berkomunikasi lewat jaringan. Ini langkah yang sangat umum saat aplikasi mulai tumbuh.
Yang dipertaruhkan cukup nyata. Memisah terlalu cepat menambah biaya, latensi, dan satu server lagi untuk dirawat, tanpa hasil yang terasa. Memisah terlambat membuat aplikasi dan database saling mencekik saat trafik naik, dan perubahan arsitektur dilakukan dalam keadaan darurat. Jadi pertanyaannya bukan "apakah memisah itu bagus", tapi "apakah sekarang waktunya".
Apa untung dan ruginya memisah database?
Keuntungan
- Sumber daya tidak berebut. Database suka RAM untuk cache (misalnya buffer pool InnoDB), sementara proses PHP atau Node.js juga butuh RAM saat trafik naik. Di satu server, lonjakan trafik bisa membuat database kehabisan memori, atau sebaliknya.
- Bisa menambah server aplikasi. Kalau aplikasi perlu dua atau lebih server di belakang load balancer, semuanya harus memakai satu database bersama. Itu hanya bisa bila database berada di server sendiri.
- Penyetelan lebih leluasa. Server database bisa diberi disk yang cepat, RAM besar, dan setelan yang khusus untuk database. Setelan yang paling berpengaruh dibahas di setelan MySQL dan MariaDB.
- Keamanan berlapis. Server database tidak perlu menerima koneksi dari internet sama sekali. Kalau server aplikasi dibobol lewat celah di website, penyerang belum otomatis memegang seluruh sistem database.
- Perawatan terpisah. Update aplikasi, restart web server, atau ganti versi PHP tidak menyentuh database, begitu juga sebaliknya.
Kerugian
- Latensi jaringan per query. Di satu server, query lewat socket lokal hampir tanpa jeda. Di server terpisah, setiap query menempuh perjalanan jaringan. Satu query tidak terasa, tapi halaman yang menjalankan ratusan query kecil (pola N+1) bisa melambat nyata.
- Biaya bertambah. Ada server kedua, dan idealnya jaringan privat di antara keduanya.
- Titik kegagalan bertambah. Kini ada dua server yang harus menyala bersamaan. Memisah tidak otomatis membuat sistem lebih tahan gangguan.
- Konfigurasi lebih banyak. Akses jaringan, firewall, user dengan host tertentu, dan enkripsi koneksi harus diatur dengan benar.
Perbandingan pilihan arsitektur
| Aspek | Satu server | Database di server sendiri | Database terkelola |
|---|---|---|---|
| Latensi query | Paling rendah (socket lokal) | Bertambah, rendah bila satu jaringan privat | Bertambah, tergantung lokasi |
| Rebutan RAM dan CPU | Ya | Tidak | Tidak |
| Bisa banyak server aplikasi | Tidak | Ya | Ya |
| Beban perawatan | Paling ringan | Dua server dirawat sendiri | Database dirawat penyedia |
| Biaya | Paling rendah | Bertambah satu server | Tergantung paket |
| Cocok untuk | Aplikasi kecil sampai menengah | Aplikasi tumbuh dengan tim teknis | Tim kecil yang ingin fokus ke aplikasi |
Database terkelola adalah variasi dari memisah: server database tetap terpisah, tetapi backup, pembaruan, dan pemantauannya diurus penyedia. Bedanya dengan menjalankan sendiri di VPS dijelaskan di apa itu cloud database.
Tanda-tanda sudah waktunya memisah
Perhatikan pola ini selama beberapa minggu, bukan satu kejadian:
- RAM sering hampir habis di jam sibuk, dan proses database atau PHP sesekali dimatikan sistem karena kehabisan memori.
- CPU tinggi dan sulit memastikan siapa penyebabnya karena aplikasi dan database sama-sama sibuk.
- Kamu berencana menambah server aplikasi atau memasang load balancer.
- Ada lebih dari satu aplikasi yang memakai database yang sama.
- Ada tuntutan keamanan agar data tidak berada di server yang menghadap publik.
Sebaliknya, bila masalahnya adalah query lambat, memindahkan database ke server lain jarang menolong. Query yang tidak memakai indeks tetap lambat di mana pun ia berjalan. Periksa slow query log dan indeks lebih dulu.
Kapan tetap satu server, kapan dipisah?
Tetap di satu server bila aplikasi masih kecil sampai menengah, hanya ada satu server aplikasi, dan RAM serta CPU masih longgar. Menaikkan spesifikasi server yang sama sering kali lebih murah dan lebih sederhana daripada menambah server. Banyak toko online dan aplikasi internal berjalan baik bertahun-tahun dengan arsitektur ini.
Pisahkan bila tanda-tanda di atas sudah konsisten, terutama rencana menambah server aplikasi. Letakkan kedua server di pusat data dan jaringan privat yang sama agar latensinya kecil. Bila tim kecil dan tidak ingin merawat server database sendiri, pilih database terkelola. Setelah dipisah, langkah berikutnya untuk ketahanan adalah replikasi database ke server cadangan.
Bagaimana memisahkannya dengan aman?
Langkah besarnya:
- Siapkan server database baru di lokasi dan jaringan privat yang sama dengan server aplikasi.
- Pasang versi database yang sama dengan yang dipakai sekarang, lalu sesuaikan setelannya dengan RAM server baru.
- Atur agar database hanya mendengarkan di IP privat, dan firewall hanya mengizinkan IP server aplikasi.
- Buat user database dengan host terbatas, misalnya
'app'@'10.0.0.10', bukan'%'. - Uji koneksi dan kecepatan dari server aplikasi, idealnya di lingkungan uji dulu.
- Pada jam sepi, hentikan penulisan sebentar, salin data dengan dump terbaru, ubah alamat database di konfigurasi aplikasi, lalu jalankan.
- Pantau beberapa hari, dan pastikan backup kini mengambil dari server database yang baru.
Rincian pengaturan akses jaringan MySQL ada di membuka akses remote MySQL dengan aman.
Pertanyaan yang sering diajukan
Seberapa besar tambahan latensi bila database dipisah?
Bergantung pada jarak dan jaringan. Di jaringan privat dalam satu pusat data biasanya kecil per query, tapi tetap bisa terasa pada halaman dengan sangat banyak query. Ukur dengan uji coba sebelum pindah.
Apakah lebih baik menaikkan spesifikasi server dulu?
Sering kali ya, bila hanya ada satu server aplikasi dan masalahnya kekurangan RAM atau CPU. Memisah lebih tepat bila kamu butuh banyak server aplikasi atau pemisahan keamanan.
Bolehkah server database berada di penyedia atau kota yang berbeda?
Bisa secara teknis, tapi latensinya jauh lebih besar dan aplikasi akan terasa lambat. Server aplikasi dan database sebaiknya berada di lokasi yang sama.
Apakah memisah database membuat sistem lebih tahan gangguan?
Tidak dengan sendirinya. Kini ada dua server yang harus menyala. Ketahanan baru bertambah bila ada replika, backup teruji, dan prosedur pemulihan.


