Зараз я налаштовую подібну систему (на професійному рівні), і ось такий дизайн я вибрав:
- Два балансири вантажу Nginx (обидва активні, обидва відмовні для іншого, збалансовані з круглої роботою DNS)
- Дві бази даних MySQL в режимі майстер-реплікації
- Два екземпляри Tomcat як кластер tomcat
- Два екземпляри Memcached і для кешування, і для спільного використання сеансу для кластера Tomcat
Це дозволить досягти надмірного, високої доступності, масштабованого рішення.
Балансири навантаження (на пристойному обладнання) легко завантажують насичений 1 гбітовий рядок кожен. Це також чудове місце для розвантаження SSL.
Ви можете зберегти інформацію про сеанс у пам'яті. У випадку відмови екземпляра tomcat інший екземпляр tomcat може отримати відповідну інформацію про сеанс, і клієнти нічого не помітять. Не забувайте поєднувати це і з липкими сеансами. (Щоб зменшити мережевий трафік)
Кластеризація Tomcat також має можливість ділитися інформацією про сеанси між кластером у режимі реального часу, не використовуючи запам’ятовується. Хоча я думаю, що ефективність розумна, використання Memcached буде кращим.
Якщо вам потрібно більше енергії в будь-якому з цих додатків:
- Nginx: Додайте більше балансирів, хоча я не думаю, що це буде вузьким місцем дуже скоро.
- Tomcat: ви можете легко збільшити розмір кластера Tomcat або додати більше кластерів
- Mysql: Додайте кілька невільників для читання або збільште розмір кластера (залежно від вашої програми, але оскільки ви написали додаток на основі REST, це не повинно бути проблемою)
- Memcached: Додайте більше вузлів, Memcached ваги досить добре я вважаю.
Я не знаю, як будується ваше додаток і які великі вивіски для ресурсів, але якщо ви бачите велике завантаження бази даних (під час ваших навантажень!), Додавання кешу між програмою та базою даних, безумовно, може значно підвищити продуктивність. Але не забувайте, що не все є кешованим, якщо запити завжди різні, кешування не допоможе (сильно)
Моєю порадою буде завантажити VMware Workbench (або програмне забезпечення для віртуалізації similair) і спробувати створити просту настройку. Ніякого балансування навантаження або кластеризації, лише основи та робота звідти. Один за одним додайте більше функцій (балансування, кешування, кластеризація тощо) та переконайтесь, що провести деякі дослідження з кожної теми, щоб ви знали, що зробили правильний вибір.
Якщо ви продовжуєте виконувати ті ж тести на ефективність під час цього процесу, ви можете переконатися, чи використовувати X краще, ніж використовувати Y у ваших налаштуваннях, або яке кешування впливом матиме тощо.
Зрештою, така настройка дійсно залежить від вимог вашої програми та її клієнтів, все можна зробити різними способами, кожен має свої сильні та слабкі сторони.
Є ще запитання?
Удачі!
Веслі