Ini adalah pertanyaan terbuka dengan banyak kemungkinan tanggapan yang bergantung pada apa yang Anda coba lakukan. Namun demikian saya akan menambahkan beberapa hal sebagai jawaban, karena komentar tidak akan cukup besar.
Layanan akan bertindak sebagai kumpulan koneksi database (saya pikir 2000+ koneksi pada database akan menyebabkan masalah);
Ya, itu ide bagus. Anda membiarkan sejumlah kecil koneksi tetap terbuka dan Anda menggunakannya kembali ketika permintaan tiba ke layanan. Tapi Anda perlu tahu seberapa cepat permintaan akan dilayani dan berapa banyak setiap permintaan menggunakan database, jika tidak, kolam kecil dapat dengan mudah habis dan permintaan lainnya akan diblokir sambil menunggu koneksi database akan dirilis.
Caching dapat membantu di sana, untuk mengembalikan data yang sudah diambil (seperti yang saya katakan, tergantung pada apa yang Anda coba lakukan - jika kueri unik, Anda tidak dapat menyimpan banyak cache).
Perhatikan juga bahwa ukuran kolam akan dikalikan dengan jumlah layanan yang Anda tempatkan. Beberapa layanan dan Anda dapat menggunakan ukuran kumpulan database besar; lebih banyak layanan dan Anda perlu mengurangi ukuran kumpulan, sehingga Anda memiliki jumlah koneksi yang sama dibuka ke database, secara keseluruhan.
Dimungkinkan untuk memiliki database dengan pengiriman log ke database hanya-baca lainnya untuk melayani beberapa permintaan;
Basis data dapat dengan mudah menjadi hambatan Anda. Terlalu banyak koneksi dan / atau terlalu banyak permintaan dan Anda dapat merusaknya. Pada titik itu tidak masalah bahwa Anda dapat secara horizontal skala layanan Anda ke nomor apa pun. Semua permintaan pada akhirnya akan mencapai database yang sama.
Ada berbagai cara untuk melindunginya: caching yang saya sebutkan (tergantung pada kasus penggunaan Anda), duplikat beberapa info di server lain untuk melayani beberapa pertanyaan seperti yang Anda sebutkan, CQRS (tergantung pada kasus penggunaan Anda), gunakan relasional vs non-relasional (tergantung pada use case Anda lagi), dll.
Perhatikan bahwa ketika Anda mendistribusikan data seperti itu, teorema CAP mulai berlaku. Sadarilah hal itu karena Anda mungkin perlu kompromi antara konsistensi dan ketersediaan.
Ini akan berskala lebih baik karena kami dapat menambahkan lebih banyak mesin untuk menjalankan layanan REST;
Ya, layanan REST akan meningkat, tetapi seperti yang saya sebutkan di atas, jika Anda tidak melindungi basis data, itu dapat dengan mudah menjadi hambatan.
Dimungkinkan untuk menggunakan HTTPS dengan kompresi untuk alasan keamanan dan penghematan bandwidth;
Ya, dan juga hal-hal lain ... mungkin Anda ingin otentikasi / otorisasi nanti, dll.
Dimungkinkan untuk membuat beberapa perubahan terpusat pada entitas bisnis tanpa menggunakan kembali 2000+ mesin;
Ya, tetapi sampai batas tertentu dan tidak semua jenis perubahan. Jika Anda melakukan perubahan besar, Anda perlu memperbarui klien juga. Jadi pikirkan strategi untuk memperbarui klien ke versi terbaru atau jika Anda mengizinkan klien lama untuk tetap bekerja dan menggunakan aplikasi.
Ini terintegrasi lebih baik dengan sistem lain (cukup arahkan ke layanan REST).
Ya, tetapi itu berarti klien untuk layanan Anda yang mungkin tidak dapat Anda kontrol.
Jika Anda melakukan perubahan yang melanggar dan Anda memiliki strategi yang baik untuk memperbarui 2000+ klien JavaFX Anda maka tidak ada masalah. Tetapi jika klien lain ada dan Anda tidak memiliki kendali atas mereka, Anda mungkin perlu menerapkan versi pada layanan REST dan mendukung lebih dari satu versi hingga semua orang dapat memperbarui ke yang terbaru.
Seperti yang saya katakan, itu tergantung pada apa yang Anda coba lakukan. Secara keseluruhan, ide Anda bagus. Namun ketahuilah bahwa hal-hal tidak akan datang gratis hanya karena Anda menempel layanan REST di depan database.
Hanya 2 sen saya!