Server Basis Data dan Basis Data Tersemat
Server Database
Server database mengacu pada database yang berjalan sebagai proses server independen dan memproses permintaan aplikasi melalui jaringan. Sebagian besar RDBMS yang sudah dikenal seperti MySQL, PostgreSQL, dan Oracle DB termasuk dalam model ini. Server database memiliki keuntungan sebagai berikut.
- Manajemen Terpusat: Data dikelola secara terintegrasi di satu lokasi, sehingga memudahkan konsistensi, keamanan, pencadangan, dan pemulihan.
- Independensi Sumber Daya: Dengan mengalokasikan CPU, memori, dan penyimpanan sendiri, server database menjamin kinerja yang stabil terlepas dari status aplikasi.
- Konkurensi dan Skalabilitas Tinggi: Server database dioptimalkan untuk akses bersamaan oleh banyak pengguna, dan skalabilitas horizontal melalui clustering atau replikasi relatif mudah.
Berkat karakteristik ini, server database telah menjadi standar infrastruktur perangkat lunak selama beberapa dekade terakhir. Namun, karena kemajuan teknologi dan perubahan lingkungan, kelemahan server database mulai terlihat di beberapa lingkungan, dan database embedded kembali mendapatkan perhatian sebagai alternatif.
Tren Baru: Database Embedded
Database embedded adalah engine database yang disertakan sebagai library dalam aplikasi dan berjalan dalam proses yang sama, tanpa proses server terpisah. SQLite, LevelDB, dan RocksDB adalah contoh umum database embedded. Latar belakang mengapa database embedded ini muncul sebagai alternatif yang kuat dalam lingkungan teknologi terbaru adalah sebagai berikut.
Munculnya SSD
Di masa lalu, dalam lingkungan sistem yang berpusat pada HDD, kinerja akses acak jauh lebih rendah dibandingkan dengan kinerja baca/tulis data sekuensial. Oleh karena itu, meminimalkan I/O disk dan memaksimalkan caching memori adalah kunci untuk optimasi kinerja. Server database telah mengatasi keterbatasan fisik HDD dengan mengoperasikan cache besar dan memproses operasi tulis secara berkelompok.
Namun, munculnya SSD sepenuhnya mengubah premis ini. SSD ribuan kali lebih cepat dalam kinerja I/O acak dibandingkan HDD, dan latensinya juga jauh lebih singkat. Akibatnya, persepsi yang ada bahwa "I/O disk adalah bottleneck terbesar" menghilang, dan sebaliknya, latensi yang terjadi akibat akses server DB jarak jauh melalui jaringan mulai menonjol sebagai bottleneck baru.
MSA dan Independensi Data
Di masa lalu, struktur di mana aplikasi monolitik raksasa bergantung pada satu database terpusat adalah hal yang umum. Meskipun sederhana, metode ini memiliki masalah di mana perubahan skema data menjadi sulit seiring dengan pertumbuhan skala layanan, dan ketergantungan menjadi terlalu kuat karena semua layanan berbagi DB yang sama.
Dalam arsitektur microservice modern, prinsip "Database per Service" menjadi penting untuk mengatasi masalah ini. Dengan setiap layanan memiliki dan mengkapsulasi penyimpanan datanya sendiri, independensi antar layanan terjamin, serta isolasi kegagalan dan skalabilitas menjadi lebih mudah. Dalam proses ini, DB embedded menjadi pilihan ideal sebagai penyimpanan data unit layanan. Ringan, cepat, dan dapat di-deploy bersama dengan kode layanan, sehingga sangat cocok dengan lingkungan MSA.
Secara khusus, dalam lingkungan Kubernetes, pola sidecar banyak digunakan untuk mengoptimalkan pemrosesan data lokal dengan menempatkan DB embedded di samping container aplikasi. Ini mengurangi bottleneck jaringan dan meminimalkan latensi akses data.
Penyederhanaan Lingkungan Operasional
Server database memerlukan prosedur operasional yang kompleks seperti instalasi, patch, pencadangan, pemulihan bencana, replikasi, dan pemantauan kinerja, yang membutuhkan DBA khusus dan personel operasional profesional. Terutama dalam lingkungan berskala besar, beban manajemen ini sangat besar.
DB embedded sangat mengurangi masalah ini. Ketika database terintegrasi di dalam aplikasi, unit test, build, version control, dan deployment dilakukan bersamaan, sehingga tidak diperlukan operasi server terpisah. Selain itu, ketika aplikasi di-Scale-out, DB embedded juga ikut diskalakan, dan manajemen otomatis dimungkinkan melalui budaya DevOps dan pipeline CI/CD. Khususnya dalam lingkungan startup, layanan skala kecil, dan pengembangan prototipe, database embedded secara signifikan mengurangi kompleksitas operasional dan sangat meningkatkan kecepatan pengembangan dan deployment.
Bahasa Sistem Berkinerja Tinggi dan Perkembangan Ekosistem
Di masa lalu, umum bagi database dan aplikasi ditulis dalam bahasa yang berbeda. Misalnya, engine database yang membutuhkan kinerja tinggi umumnya ditulis dalam C, C++, dan aplikasi dikembangkan dalam bahasa seperti Java, Python, PHP. Meskipun metode ini efektif untuk optimasi kinerja, ia memiliki keterbatasan seperti masalah stabilitas memori, pemrosesan konkurensi yang kompleks, latensi, dan kesulitan dalam integrasi serta deployment library.
Namun, dengan munculnya bahasa pemrograman sistem modern seperti Go dan Rust baru-baru ini, keterbatasan ini sangat berkurang. Khususnya Go cocok untuk menulis aplikasi berkinerja tinggi serta program tingkat rendah seperti engine database, memungkinkan database dan aplikasi ditangani bersama dalam satu ekosistem bahasa.
Faktanya, dalam Golang, database embedded berkinerja tinggi seperti BadgerDB dan PebbleDB banyak digunakan. Ini berarti bahwa database embedded tidak hanya sekadar alternatif ringan untuk server database, tetapi juga telah memantapkan dirinya sebagai pilihan penting dengan daya saing sendiri.
Kesimpulan
Dalam kondisi yang membutuhkan manajemen terpusat data besar, transaksi kompleks, dan konkurensi tinggi, server database masih merupakan solusi paling kuat. Namun, dalam proyek-proyek seperti layanan individual dalam lingkungan MSA, perangkat IoT Edge, prototipe cepat, dan efisiensi operasional yang penting, database embedded bisa menjadi pilihan yang lebih efisien dan rasional. Pada akhirnya, yang penting adalah memilih alat terbaik yang paling sesuai dengan situasi dan persyaratan yang diberikan, dan perkembangan database embedded memberi kita pilihan yang lebih luas dan beragam.