Mengapa kita membutuhkannya?
Manfaat besar dari layanan-mikro - dan lebih besar lagi, SOA - adalah tingkat abstraksi internal yang tinggi - tidak hanya implementasinya, tetapi juga teknologi yang digunakan. Misalnya, jika suatu sistem dikembangkan dalam bentuk lima layanan-mikro oleh lima tim, satu tim dapat memutuskan untuk pindah ke tumpukan teknologi yang sama sekali berbeda (misalnya dari tumpukan Microsoft ke LAMP) tanpa meminta pendapat tim lain.
Lihatlah Amazon AWS atau Twilio. Apakah Anda tahu jika layanan mereka diterapkan di Jawa atau Ruby? Apakah mereka menggunakan Oracle atau PostgreSQL atau Cassandra atau MongoDB? Berapa banyak mesin yang mereka gunakan? Apakah Anda peduli tentang hal itu; dengan kata lain, apakah pilihan teknologi itu mempengaruhi cara Anda menggunakan layanan itu? ... Dan yang lebih penting, jika mereka pindah ke database yang berbeda, apakah Anda harus mengubah aplikasi klien Anda sesuai?
Sekarang, apa yang terjadi jika dua layanan menggunakan database yang sama? Berikut adalah sebagian kecil dari masalah yang mungkin timbul:
Tim yang mengembangkan layanan 1 ingin pindah dari SQL Server 2012 ke SQL Server 2016. Namun, tim 2 bergantung pada fitur usang yang telah dihapus di SQL Server 2016.
Layanan 1 adalah kesuksesan besar. Hosting database pada dua mesin (master dan failover) bukan pilihan lagi. Tetapi penskalaan cluster ke beberapa mesin membutuhkan strategi seperti sharding. Sementara itu, tim 2 senang dengan skala saat ini, dan tidak melihat alasan untuk pindah ke hal lain.
Layanan 1 harus pindah ke UTF-8 sebagai penyandian standarnya. Namun, Layanan 2 senang menggunakan Kode Halaman 1252 Windows Latin 1.
Layanan 1 memutuskan untuk menambahkan pengguna dengan nama tertentu. Namun, pengguna ini sudah ada, dibuat beberapa bulan yang lalu oleh tim kedua.
Layanan 1 membutuhkan banyak fitur berbeda. Layanan 2 adalah komponen yang sangat penting dan perlu menjaga fitur database seminimal mungkin untuk mengurangi risiko serangan.
Layanan 1 membutuhkan ruang penyimpanan 15 TB; kecepatannya tidak penting, jadi hard disk biasa baik-baik saja. Layanan 2 membutuhkan paling banyak 50 GB, tetapi harus mengaksesnya secepat mungkin, artinya data harus disimpan pada SSD.
...
Setiap pilihan kecil memengaruhi semua orang. Setiap keputusan harus diambil secara kolaboratif, oleh orang-orang dari setiap tim. Kompromi harus dibuat. Bandingkan dengan kebebasan penuh untuk melakukan apa pun yang Anda inginkan dalam konteks SOA.
itu terlalu [...] tidak bisa diatur.
Maka Anda salah melakukannya. Saya kira Anda menggunakan secara manual .
Ini bukan bagaimana hal-hal harus dilakukan. Anda perlu mengotomatiskan penyebaran mesin virtual (atau wadah Docker) yang menjalankan database. Setelah Anda mengotomatiskannya, menggunakan dua server atau dua puluh server atau dua ribu server tidak jauh berbeda.
Hal ajaib tentang basis data terisolasi adalah sangat mudah dikelola . Sudahkah Anda mencoba mengelola basis data besar yang digunakan oleh puluhan tim? Ini mimpi buruk. Setiap tim memiliki permintaan spesifik, dan segera setelah Anda menyentuh sesuatu, itu memengaruhi seseorang. Dengan database yang dipasangkan dengan suatu aplikasi, cakupannya menjadi sangat sempit, artinya ada lebih sedikit hal untuk dipikirkan.
Jika database besar membutuhkan administrator sistem khusus, database yang hanya digunakan oleh satu tim pada dasarnya dapat dikelola oleh tim ini (DevOps juga tentang itu), membebaskan waktu administrator sistem.
itu terlalu mahal
Tentukan biaya.
Biaya lisensi tergantung pada database. Di era cloud computing, saya yakin semua pemain besar mendesain ulang lisensi mereka untuk mengakomodasi konteks di mana alih-alih satu database besar, ada banyak yang kecil. Jika tidak, Anda dapat mempertimbangkan untuk pindah ke database yang berbeda. Omong-omong, ada banyak sumber terbuka.
Jika Anda berbicara tentang kekuatan pemrosesan, mesin dan wadah virtual ramah-CPU, dan saya tidak akan terlalu setuju bahwa satu basis data besar akan mengkonsumsi lebih sedikit CPU daripada banyak yang kecil melakukan pekerjaan yang sama.
Jika masalah Anda adalah memori, maka mesin virtual bukanlah pilihan yang baik untuk Anda. Wadah adalah. Anda dapat merentang sebanyak yang Anda inginkan, mengetahui bahwa mereka tidak akan mengkonsumsi lebih banyak RAM daripada yang dibutuhkan. Sementara total konsumsi memori akan lebih tinggi untuk banyak database kecil dibandingkan dengan yang besar, saya kira perbedaannya tidak terlalu penting. YMMV.