Layanan REST sebagai server aplikasi untuk 2000+ mesin klien. Apakah itu ide yang bagus?

11

Kami akan membangun sistem dengan UI di javaFx yang akan digunakan untuk 2000+ mesin (minimum 2000, tetapi akan lebih - bisa mencapai 5000 mesin).

Untuk alasan / batasan lain, itu harus diinstal pada mesin, jadi kami tidak dapat melakukannya dengan antarmuka browser web.

Mesin 2000+ akan berada di grup lokasi geografis yang berbeda. Secara umum koneksi baik, tetapi mungkin tidak begitu baik di lokasi yang lebih terpencil.

Alih-alih mengakses database secara langsung, saya berpikir tentang membangun cluster layanan REST dengan Spring + Spring Boot + Spring Data (java).

Layanan REST akan menerima dan mengembalikan Json.

Saya pikir itu ide yang bagus karena:

  • Layanan akan bertindak sebagai kumpulan koneksi database (saya pikir 2000+ koneksi pada database akan menyebabkan masalah);
  • Dimungkinkan untuk memiliki database dengan pengiriman log ke database hanya-baca lainnya untuk melayani beberapa permintaan;
  • Ini akan berskala lebih baik karena kami dapat menambahkan lebih banyak mesin untuk menjalankan layanan REST;
  • Dimungkinkan untuk menggunakan HTTPS dengan kompresi untuk alasan keamanan dan penghematan bandwidth;
  • Dimungkinkan untuk membuat beberapa perubahan terpusat pada entitas bisnis tanpa menggunakan kembali 2000+ mesin;
  • Ini terintegrasi lebih baik dengan sistem lain (cukup arahkan ke layanan REST).

Apakah itu ide yang bagus?

Bisakah Anda berbagi pengalaman positif atau negatif?

Terima kasih.

Thiago Sayão
sumber
1
Saya pikir itu ide yang masuk akal, terutama karena REST dirancang dengan caching. Anda dapat mempertimbangkan menggunakan soket web untuk mengurangi beban dari koneksi klien yang tidak persisten, tetapi ini tergantung pada pola penggunaan API Anda. WebSocket mulai menunjukkan kekuatannya ketika memungkinkan untuk melipatgandakan sejumlah besar transaksi req / res kecil ke koneksi yang persisten. Yang mengatakan, mungkin lebih mudah untuk hanya skala ...
blz
8
Basis data tidak boleh dapat diakses dari internet publik dan selalu berada di belakang firewall - oleh karena itu, melindunginya melalui REST API atau sejenisnya adalah prosedur standar. Ini juga memungkinkan Anda untuk menambahkan fitur keamanan lainnya dengan lebih mudah, misalnya mencegah pengguna mengedit entri data yang tidak mereka lihat atau edit.
amon

Jawaban:

3

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!

Bogdan
sumber
Balasan yang bagus Saya hanya ingin menyoroti kepada Thiago bahwa ada baiknya mempertimbangkan versi di API tenang secepat mungkin. Anda mungkin tidak perlu melakukannya di awal tetapi Anda harus menyadarinya dan bersiaplah.
Daniel Hollinrake