Saat ini saya sedang menyiapkan sistem yang serupa (pada tingkat profesional) dan ini adalah desain yang saya pilih:
- Dua loadbalancers Nginx (keduanya aktif, keduanya failover untuk yang lain, diseimbangkan dengan DNS round robin)
- Dua Database MySQL dalam mode replikasi master master
- Dua contoh Tomcat sebagai tomcat cluster
- Dua instance Memcached untuk caching dan berbagi status sesi untuk gugus Tomcat
Ini akan mencapai solusi yang terukur, ketersediaan tinggi, dan dapat diskalakan.
Loadbalancers (pada perangkat keras yang layak) akan dengan mudah memuat masing-masing garis 1gbit jenuh. Ini juga merupakan tempat yang bagus untuk pembongkaran SSL.
Anda dapat menyimpan info sesi Anda di memcached. Dalam hal turunan kucing jantan gagal, turunan kucing jantan lain dapat mengambil informasi sesi yang relevan dan klien tidak akan melihat apa pun. Jangan lupa untuk menggabungkan ini dengan sesi lengket juga. (Untuk menjaga lalu lintas jaringan tetap rendah)
Tomcat clustering juga memiliki opsi untuk berbagi informasi sesi antar cluster secara real time, tanpa menggunakan memcached. Meskipun saya pikir kinerja bijaksana, menggunakan Memcached akan lebih baik.
Jika Anda membutuhkan lebih banyak daya di salah satu aplikasi ini:
- Nginx: Tambahkan lebih banyak loadbalancers, meskipun saya tidak berpikir ini akan menjadi hambatan segera.
- Tomcat: Anda dapat dengan mudah meningkatkan ukuran cluster Tomcat atau menambahkan lebih banyak kluster
- Mysql: Tambahkan beberapa budak read-only atau menambah ukuran cluster (tergantung pada aplikasi Anda, tetapi karena Anda menulis aplikasi berbasis REST, ini seharusnya tidak menjadi masalah)
- Memcached: Tambahkan lebih banyak node, skala Memcached cukup baik saya percaya.
Saya tidak tahu bagaimana aplikasi Anda dibuat dan apa sumber daya babi yang besar, tetapi jika Anda melihat beban basis data yang tinggi (selama uji beban Anda!), Menambahkan cache antara aplikasi dan basis data tentu dapat meningkatkan banyak kinerja. Tapi jangan lupa bahwa tidak semuanya bisa di-cache, jika pertanyaan Anda selalu berbeda, caching tidak akan membantu (banyak)
Saran saya adalah mengunduh VMware Workbench (atau perangkat lunak virtualisasi similair) dan mencoba membuat pengaturan sederhana. Tidak ada loadbalancing atau clustering, hanya dasar-dasarnya dan bekerja dari sana. Satu per satu menambahkan lebih banyak fitur (menyeimbangkan, caching, pengelompokan, dll.) Dan pastikan untuk melakukan riset pada setiap topik, sehingga Anda akan tahu bahwa Anda telah mengambil keputusan yang tepat.
Jika Anda terus menjalankan tes kinerja yang sama selama proses ini, Anda dapat melihat sendiri apakah menggunakan X lebih baik daripada menggunakan Y dalam pengaturan Anda, atau apa dampak caching, dll.
Pada akhirnya, pengaturan seperti ini sangat tergantung pada persyaratan aplikasi Anda dan kliennya, semuanya dapat dilakukan dengan berbagai cara, masing-masing dengan kekuatan dan kelemahannya sendiri.
Ada pertanyaan lagi?
Semoga berhasil!
Wesley